| Date | Thu, 4 Apr 2019 16:14:09 +0200 | From | 'Sebastian Andrzej Siewior' <> | Subject | Re: [PATCH v9 00/27] x86: load FPU registers on return to userland |
| |
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
|