Re: [PATCH v9 00/27] x86: load FPU registers on return to userland

From: 'Sebastian Andrzej Siewior'
Date: Thu Apr 04 2019 - 10:14:20 EST


On 2019-04-04 14:01:43 [+0000], David Laight wrote:
> From: Sebastian Andrzej Siewior
> > Sent: 03 April 2019 17:41
> ...
> > To access the FPU registers in kernel we need:
> > - disable preemption to avoid that the scheduler switches tasks. By
> > doing so it would set TIF_NEED_FPU_LOAD and the FPU registers would be
> > not valid.
> > - disable BH because the softirq might use kernel_fpu_begin() and then
> > set TIF_NEED_FPU_LOAD instead loading the FPU registers on completion.
>
> Is there a possible optimisation here for kernel threads?
> Since there is no 'user FP state' the 'kernel FP state' can
> be saved by a task switch or softirq.

There is no such thing as "kernel FP state" that is saved.

> You'd still want the kernel thread to bracket fpu usage (or at least say
> that it is a kernel thread that always needs the fpu) to avoid having
> to save and restore the fpu registers on every context switch to/from
> a kernel thread.

I thing you misunderstood the code. A context switch between two kernel
threads never saves/restores the FPU register. This only happens if a
user task is involved and then only those FPU register (of the user
task) are saved and restored.

> David

Sebastian