]> git.baikalelectronics.ru Git - kernel.git/commit
sparc64: Make sure %pil interrupts are enabled during hypervisor yield.
authorDavid S. Miller <davem@davemloft.net>
Mon, 24 Mar 2014 18:45:12 +0000 (14:45 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 24 Mar 2014 18:45:12 +0000 (14:45 -0400)
commit847e6930aa743cbf644452e08f81c129b4c58177
tree269c25b05aa778a030310f1656c501fd3d41c823
parent30aa29d0ebc4b2e0dc2029ddd194bdfe7f719001
sparc64: Make sure %pil interrupts are enabled during hypervisor yield.

In arch_cpu_idle() we must enable %pil based interrupts before
potentially invoking the hypervisor cpu yield call.

As per the Hypervisor API documentation for cpu_yield:

Interrupts which are blocked by some mechanism other that
pstate.ie (for example %pil) are not guaranteed to cause
a return from this service.

It seems that only first generation Niagara chips are hit by this
bug.  My best guess is that later chips implement this in hardware
and wake up anyways from %pil events, whereas in first generation
chips the yield is implemented completely in hypervisor code and
requires %pil to be enabled in order to wake properly from this
call.

Fixes: 56dbc3bc0902 ("sparc: Use generic idle loop")
Reported-by: Fabio M. Di Nitto <fabbione@fabbione.net>
Reported-by: Jan Engelhardt <jengelh@inai.de>
Tested-by: Jan Engelhardt <jengelh@inai.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/kernel/process_64.c