diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 9bc573a5c9dbb4eca228cb4604466bd97592e873..e898e83afa0ac04717d1bca82d8bfb2e3af0851f 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -7,6 +7,17 @@ */ #include +/* + * Track whether the kernel is using the FPU state + * currently. + * + * This flag is used: + * + * - by IRQ context code to potentially use the FPU + * if it's unused. + * + * - to debug kernel_fpu_begin()/end() correctness + */ static DEFINE_PER_CPU(bool, in_kernel_fpu); static void kernel_fpu_disable(void) @@ -21,6 +32,11 @@ static void kernel_fpu_enable(void) this_cpu_write(in_kernel_fpu, false); } +static bool kernel_fpu_disabled(void) +{ + return this_cpu_read(in_kernel_fpu); +} + /* * Were we in an interrupt that interrupted kernel mode? * @@ -35,7 +51,7 @@ static void kernel_fpu_enable(void) */ static bool interrupted_kernel_fpu_idle(void) { - if (this_cpu_read(in_kernel_fpu)) + if (kernel_fpu_disabled()) return false; if (use_eager_fpu())