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