mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
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>
This commit is contained in:
parent
3cd788c1ee
commit
4b9a8dca0e
7 changed files with 9 additions and 170 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue