Merge remote-tracking branch 'trace/tip/x86/trace' into x86/trace
Fix from Steven Rostedt.
This commit is contained in:
Коммит
5236eb968e
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче