All of lore.kernel.org
 help / color / mirror / Atom feed
* irq_fpu_usable() is irreliable
@ 2015-11-17 11:39 Jason A. Donenfeld
  2015-11-18  6:55 ` Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Jason A. Donenfeld @ 2015-11-17 11:39 UTC (permalink / raw)
  To: tglx, mingo, hpa; +Cc: LKML

Hi folks,

The availability of the FPU in kernel space, as you know, is
determined by this function:

bool irq_fpu_usable(void)
{
        return !in_interrupt() ||
                interrupted_user_mode() ||
                interrupted_kernel_fpu_idle();
}

My understanding is that the first check is !in_interrupt(), because
if `current` is valid - if we are in process context - then we have a
place to store the existing FPU regs in kernel_fpu_begin, to be
restored later in kernel_fpu_end. Recently I've been tracking down a
problem in which irq_fpu_usable() returns false, yet a stack trace
shows the first function is the syscall entry point. This leads me to
believe that in_interrupt() is not an adequate way of testing for a
valid `current`. In my particular problematic case, the reason
in_interrupt() was returning false is because a number of
rcu_read_lock_bh()s were being held; IOW this is occurring in the
ndo_start_xmit path of a network driver.

I therefore propose changing the function to this:

bool irq_fpu_usable(void)
{
        return (!in_irq() && !in_nmi()) ||
                interrupted_user_mode() ||
                interrupted_kernel_fpu_idle();
}

What would you think of that?

Thanks,
Jason

^ permalink raw reply	[flat|nested] 9+ messages in thread
[parent not found: <CAHmME9rgXh3zQDfc2Yo_Au0CSg--X+ak=SQdS9DoXNsKK0TPmA@mail.gmail.com>]

end of thread, other threads:[~2015-11-27  8:47 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-17 11:39 irq_fpu_usable() is irreliable Jason A. Donenfeld
2015-11-18  6:55 ` Ingo Molnar
2015-11-18 12:16   ` Jason A. Donenfeld
2015-11-18 19:59     ` Jason A. Donenfeld
2015-11-27  8:41       ` Ingo Molnar
2015-11-27  8:47     ` Ingo Molnar
     [not found] <CAHmME9rgXh3zQDfc2Yo_Au0CSg--X+ak=SQdS9DoXNsKK0TPmA@mail.gmail.com>
2015-11-17 14:06 ` Thomas Gleixner
2015-11-17 14:51   ` Jason A. Donenfeld
2015-11-17 19:54     ` Jason A. Donenfeld

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.