If Linux softirq is running by interrupting Linux kernel mode and the interrupted task was using FPU it is not allowed to use the FPU in softirq.
If the interrupted task was user mode process it was still allowed to use the FPU in softirq, but not interrupting the kernel mode.
The code in discussion is below.
Question is, Why its so ?
static inline bool interrupted_kernel_fpu_idle(void)
{
return !__thread_has_fpu(current) &&
(read_cr0() & X86_CR0_TS);
}