Messages in this thread | | | From | Linus Torvalds <> | Date | Sun, 15 Apr 2012 16:42:45 -0700 | Subject | Re: ptrace && fpu_lazy_restore |
| |
On Sun, Apr 15, 2012 at 3:38 PM, Oleg Nesterov <oleg@redhat.com> wrote: > > Suppose that fpu_owner_task exits on CPU_0, and then fork() reuses > its task_struct. The new child is still fpu_owner_task and this is > obviously wrong (unless of course another thread uses fpu). > > Initially I thought this should be fixed too, but it seems that > "p->fpu_counter = 0" in copy_thread() saves us. > > This looks a bit fragile... And could you confirm this is really > fine?
That one is done by design. That fpu_counter=0 in copy_thread() is there explicitly to avoid the problem. Although it's possible that we should reset last_cpu instead. However, that line was actually added before the lazy thing - see commit cea20ca3f318.
> Btw, do we really need this "old->thread.fpu.last_cpu = ~0" in > the "else" branch of switch_fpu_prepare()? Just curious, I guees > this doesn't matter since we reset old->fpu_counter. But if we > can remove this line, then perhaps we can another optimization.
Possibly not needed, but quite frankly, I'd rather have last_cpu never contain some stale value.
Linus
| |