lkml.org 
[lkml]   [2012]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/1] i387: ptrace breaks the lazy-fpu-restore logic
    Starting from 7e16838d "i387: support lazy restore of FPU state"
    we assume that fpu_owner_task doesn't need restore_fpu_checking()
    on the context switch, its FPU state should match what we already
    have in the FPU on this CPU.

    However, debugger can change the tracee's FPU state, in this case
    we should reset fpu.last_cpu to ensure fpu_lazy_restore() can't
    return true.

    Change init_fpu() to do this, it is called by user_regset->set()
    methods.

    Reported-by: Jan Kratochvil <jan.kratochvil@redhat.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    ---
    arch/x86/kernel/i387.c | 1 +
    1 files changed, 1 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
    index 7734bcb..2d6e649 100644
    --- a/arch/x86/kernel/i387.c
    +++ b/arch/x86/kernel/i387.c
    @@ -235,6 +235,7 @@ int init_fpu(struct task_struct *tsk)
    if (tsk_used_math(tsk)) {
    if (HAVE_HWFP && tsk == current)
    unlazy_fpu(tsk);
    + tsk->thread.fpu.last_cpu = ~0;
    return 0;
    }

    --
    1.5.5.1



    \
     
     \ /
      Last update: 2012-04-16 22:51    [W:0.024 / U:61.492 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site