|
@@ -1101,14 +1101,20 @@ int is_debug_stack(unsigned long addr)
|
|
|
addr > (__get_cpu_var(debug_stack_addr) - DEBUG_STKSZ));
|
|
|
}
|
|
|
|
|
|
+static DEFINE_PER_CPU(u32, debug_stack_use_ctr);
|
|
|
+
|
|
|
void debug_stack_set_zero(void)
|
|
|
{
|
|
|
+ this_cpu_inc(debug_stack_use_ctr);
|
|
|
load_idt((const struct desc_ptr *)&nmi_idt_descr);
|
|
|
}
|
|
|
|
|
|
void debug_stack_reset(void)
|
|
|
{
|
|
|
- load_idt((const struct desc_ptr *)&idt_descr);
|
|
|
+ if (WARN_ON(!this_cpu_read(debug_stack_use_ctr)))
|
|
|
+ return;
|
|
|
+ if (this_cpu_dec_return(debug_stack_use_ctr) == 0)
|
|
|
+ load_idt((const struct desc_ptr *)&idt_descr);
|
|
|
}
|
|
|
|
|
|
#else /* CONFIG_X86_64 */
|