On 03/17/2015 02:42 PM, Denys Vlasenko wrote:
> Without this change, it is still not possible to get rid of
> PER_CPU_VAR(old_rsp) usage in switch_to: if preemption happens
> while we did not fetch PER_CPU_VAR(old_rsp) and stored it in pt_regs->sp,
> PER_CPU_VAR(old_rsp) gets corrupted by other task's user sp.
> 
> Signed-off-by: Denys Vlasenko <[email protected]>
> CC: Linus Torvalds <[email protected]>
> CC: Steven Rostedt <[email protected]>
> CC: Ingo Molnar <[email protected]>
> CC: Borislav Petkov <[email protected]>
> CC: "H. Peter Anvin" <[email protected]>
> CC: Andy Lutomirski <[email protected]>
> CC: Oleg Nesterov <[email protected]>
> CC: Frederic Weisbecker <[email protected]>
> CC: Alexei Starovoitov <[email protected]>
> CC: Will Drewry <[email protected]>
> CC: Kees Cook <[email protected]>
> CC: [email protected]
> CC: [email protected]
> ---
> 
> Run-tested, including with PARAVIRT on.

Well. The testing with PARAVIRT did work, however, I don't know why.

>       movq_cfi rax,ORIG_RAX
> +     /*
> +      * No need to follow this irqs off/on section - it's straight
> +      * and short:
> +      */
> +     ENABLE_INTERRUPTS(CLBR_RAX)

Here I wrongly assumed that now I can clobber rax, since it is saved
in pt_regs->orig_ax now. Wrong. Code below still wants to use rax
register directly.

Looks like I was "lucky" and paravirt call happen to not change rax.
I'll send a v2 patch without this ill-advised attempt of optimization.
Sorry.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to