(2012/01/25 23:32), Steven Rostedt wrote: > Preemption must be disabled before enabling interrupts in do_trap > on x86_64 because the stack in use for int3 and debug is a per CPU > stack set by th IST. But in 32bit, the stack still belongs to the > current task and there is no problem in scheduling out the task. > > Keep preemption enabled on X86_32 when enabling interrupts for > do_trap(). > > Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx> Hmm, I think you'd better change caller side, because the function itself has "preempt" in its name. I think it can easily mislead other people. Thank you, > > Index: linux-rt.git/arch/x86/kernel/traps.c > =================================================================== > --- linux-rt.git.orig/arch/x86/kernel/traps.c > +++ linux-rt.git/arch/x86/kernel/traps.c > @@ -89,7 +89,14 @@ static inline void conditional_sti(struc > > static inline void preempt_conditional_sti(struct pt_regs *regs) > { > +#ifdef CONFIG_X86_64 > + /* > + * X86_64 uses a per CPU stack for certain traps like int3. > + * We must disable preemption, otherwise we can corrupt the > + * stack if the task is scheduled out with this stack. > + */ > inc_preempt_count(); > +#endif > if (regs->flags & X86_EFLAGS_IF) > local_irq_enable(); > } > @@ -104,7 +111,9 @@ static inline void preempt_conditional_c > { > if (regs->flags & X86_EFLAGS_IF) > local_irq_disable(); > +#ifdef CONFIG_X86_64 > dec_preempt_count(); > +#endif > } > > static void __kprobes > -- Masami HIRAMATSU Software Platform Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu.pt@xxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html