Files
linux/arch/powerpc/include/asm
Thomas Huth 2ba90c0e06 powerpc/rtas: Introduce rtas_get_sensor_fast() for IRQ handlers
commit 1c2cb59444 upstream.

The EPOW interrupt handler uses rtas_get_sensor(), which in turn
uses rtas_busy_delay() to wait for RTAS becoming ready in case it
is necessary. But rtas_busy_delay() is annotated with might_sleep()
and thus may not be used by interrupts handlers like the EPOW handler!
This leads to the following BUG when CONFIG_DEBUG_ATOMIC_SLEEP is
enabled:

 BUG: sleeping function called from invalid context at arch/powerpc/kernel/rtas.c:496
 in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: swapper/1
 CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.2.0-rc2-thuth #6
 Call Trace:
 [c00000007ffe7b90] [c000000000807670] dump_stack+0xa0/0xdc (unreliable)
 [c00000007ffe7bc0] [c0000000000e1f14] ___might_sleep+0x134/0x180
 [c00000007ffe7c20] [c00000000002aec0] rtas_busy_delay+0x30/0xd0
 [c00000007ffe7c50] [c00000000002bde4] rtas_get_sensor+0x74/0xe0
 [c00000007ffe7ce0] [c000000000083264] ras_epow_interrupt+0x44/0x450
 [c00000007ffe7d90] [c000000000120260] handle_irq_event_percpu+0xa0/0x300
 [c00000007ffe7e70] [c000000000120524] handle_irq_event+0x64/0xc0
 [c00000007ffe7eb0] [c000000000124dbc] handle_fasteoi_irq+0xec/0x260
 [c00000007ffe7ef0] [c00000000011f4f0] generic_handle_irq+0x50/0x80
 [c00000007ffe7f20] [c000000000010f3c] __do_irq+0x8c/0x200
 [c00000007ffe7f90] [c0000000000236cc] call_do_irq+0x14/0x24
 [c00000007e6f39e0] [c000000000011144] do_IRQ+0x94/0x110
 [c00000007e6f3a30] [c000000000002594] hardware_interrupt_common+0x114/0x180

Fix this issue by introducing a new rtas_get_sensor_fast() function
that does not use rtas_busy_delay() - and thus can only be used for
sensors that do not cause a BUSY condition - known as "fast" sensors.

The EPOW sensor is defined to be "fast" in sPAPR - mpe.

Fixes: 587f83e8dd ("powerpc/pseries: Use rtas_get_sensor in RAS code")
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-10-01 12:07:30 +02:00
..
2012-03-28 18:30:02 +01:00
2012-03-28 18:30:02 +01:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-07-10 19:18:59 +10:00
2013-04-18 13:03:53 +10:00
2013-04-26 16:08:16 +10:00
2011-07-26 16:49:47 -07:00
2012-03-28 18:30:02 +01:00
2011-11-08 14:51:46 +11:00
2012-03-20 21:48:30 +08:00
2008-08-18 21:40:03 +02:00
2013-04-18 13:03:53 +10:00
2011-12-08 14:02:23 +11:00
2011-05-22 08:47:53 -04:00
2010-06-09 11:12:36 +02:00
2011-07-26 16:49:47 -07:00
2010-05-05 09:11:10 -04:00
2012-11-15 13:00:45 +11:00
2011-03-31 11:26:23 -03:00
2010-10-26 16:52:08 -07:00
2011-03-31 11:26:23 -03:00
2009-12-09 17:10:37 +11:00
2011-09-20 09:19:40 +10:00
2013-02-13 12:56:42 +01:00
2010-03-05 03:04:08 -06:00
2011-04-20 17:01:19 +10:00
2012-09-17 16:31:51 +10:00
2011-03-31 11:26:23 -03:00
2013-05-08 06:36:49 +10:00
2011-03-31 11:26:23 -03:00
2012-07-11 14:18:40 +10:00
2011-05-06 13:32:35 +10:00