Commit 5236eb96 authored by H. Peter Anvin's avatar H. Peter Anvin

Merge remote-tracking branch 'trace/tip/x86/trace' into x86/trace

Fix from Steven Rostedt.
parents 33e5ff63 2b4bc789
...@@ -497,21 +497,19 @@ static inline void load_trace_idt(void) ...@@ -497,21 +497,19 @@ static inline void load_trace_idt(void)
#endif #endif
/* /*
* the load_current_idt() is called with interrupt disabled by local_irq_save() * The load_current_idt() must be called with interrupts disabled
* to avoid races. That way the IDT will always be set back to the expected * to avoid races. That way the IDT will always be set back to the expected
* descriptor. * descriptor. It's also called when a CPU is being initialized, and
* that doesn't need to disable interrupts, as nothing should be
* bothering the CPU then.
*/ */
static inline void load_current_idt(void) static inline void load_current_idt(void)
{ {
unsigned long flags;
local_irq_save(flags);
if (is_debug_idt_enabled()) if (is_debug_idt_enabled())
load_debug_idt(); load_debug_idt();
else if (is_trace_idt_enabled()) else if (is_trace_idt_enabled())
load_trace_idt(); load_trace_idt();
else else
load_idt((const struct desc_ptr *)&idt_descr); load_idt((const struct desc_ptr *)&idt_descr);
local_irq_restore(flags);
} }
#endif /* _ASM_X86_DESC_H */ #endif /* _ASM_X86_DESC_H */
...@@ -29,7 +29,11 @@ static void set_trace_idt_ctr(int val) ...@@ -29,7 +29,11 @@ static void set_trace_idt_ctr(int val)
static void switch_idt(void *arg) static void switch_idt(void *arg)
{ {
unsigned long flags;
local_irq_save(flags);
load_current_idt(); load_current_idt();
local_irq_restore(flags);
} }
void trace_irq_vector_regfunc(void) void trace_irq_vector_regfunc(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment