diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2017-08-28 08:47:31 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-08-29 11:42:28 +0200 |
commit | 4b9a8dca0e58b6fee229795f77e902a4dfd116fe (patch) | |
tree | 16815f988922bb9999b479f62b984cd28d031e30 /arch/x86/kernel/tracepoint.c | |
parent | x86/smp: Use static key for reschedule interrupt tracing (diff) | |
download | linux-4b9a8dca0e58b6fee229795f77e902a4dfd116fe.tar.xz linux-4b9a8dca0e58b6fee229795f77e902a4dfd116fe.zip |
x86/idt: Remove the tracing IDT completely
No more users of the tracing IDT. All exception tracepoints have been moved
into the regular handlers. Get rid of the mess which shouldn't have been
created in the first place.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/20170828064957.378851687@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel/tracepoint.c')
-rw-r--r-- | arch/x86/kernel/tracepoint.c | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/arch/x86/kernel/tracepoint.c b/arch/x86/kernel/tracepoint.c index dd4aa04bb95c..4cae92f15495 100644 --- a/arch/x86/kernel/tracepoint.c +++ b/arch/x86/kernel/tracepoint.c @@ -10,58 +10,15 @@ #include <asm/hw_irq.h> #include <asm/desc.h> -atomic_t trace_idt_ctr = ATOMIC_INIT(0); -struct desc_ptr trace_idt_descr = { NR_VECTORS * 16 - 1, - (unsigned long) trace_idt_table }; - -/* No need to be aligned, but done to keep all IDTs defined the same way. */ -gate_desc trace_idt_table[NR_VECTORS] __page_aligned_bss; - DEFINE_STATIC_KEY_FALSE(trace_irqvectors_key); -static int trace_irq_vector_refcount; -static DEFINE_MUTEX(irq_vector_mutex); - -static void set_trace_idt_ctr(int val) -{ - atomic_set(&trace_idt_ctr, val); - /* Ensure the trace_idt_ctr is set before sending IPI */ - wmb(); -} - -static void switch_idt(void *arg) -{ - unsigned long flags; - - local_irq_save(flags); - load_current_idt(); - local_irq_restore(flags); -} int trace_irq_vector_regfunc(void) { static_branch_inc(&trace_irqvectors_key); - - mutex_lock(&irq_vector_mutex); - if (!trace_irq_vector_refcount) { - set_trace_idt_ctr(1); - smp_call_function(switch_idt, NULL, 0); - switch_idt(NULL); - } - trace_irq_vector_refcount++; - mutex_unlock(&irq_vector_mutex); return 0; } void trace_irq_vector_unregfunc(void) { static_branch_dec(&trace_irqvectors_key); - - mutex_lock(&irq_vector_mutex); - trace_irq_vector_refcount--; - if (!trace_irq_vector_refcount) { - set_trace_idt_ctr(0); - smp_call_function(switch_idt, NULL, 0); - switch_idt(NULL); - } - mutex_unlock(&irq_vector_mutex); } |