diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2018-05-10 19:20:05 +0200 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2018-06-03 12:40:30 +0200 |
commit | 56c0b48b1e443efa5d6f4d60513302c934e55b17 (patch) | |
tree | 95ae0d148361c2a1eac119173585d3475ddba936 /arch/powerpc/platforms/powernv/powernv.h | |
parent | powerpc/powernv: call OPAL_QUIESCE before OPAL_SIGNAL_SYSTEM_RESET (diff) | |
download | linux-56c0b48b1e443efa5d6f4d60513302c934e55b17.tar.xz linux-56c0b48b1e443efa5d6f4d60513302c934e55b17.zip |
powerpc/powernv: process all OPAL event interrupts with kopald
Using irq_work for processing OPAL event interrupts is not necessary.
irq_work is typically used to schedule work from NMI context, a
softirq may be more appropriate. However OPAL events are not
particularly performance or latency critical, so they can all be
invoked by kopald.
This patch removes the irq_work queueing, and instead wakes up
kopald when there is an event to be processed. kopald processes
interrupts individually, enabling irqs and calling cond_resched
between each one to minimise latencies.
Event handlers themselves should still use threaded handlers,
workqueues, etc. as necessary to avoid high interrupts-off latencies
within any single interrupt.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/platforms/powernv/powernv.h')
-rw-r--r-- | arch/powerpc/platforms/powernv/powernv.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/powernv/powernv.h b/arch/powerpc/platforms/powernv/powernv.h index 94f17ab1374b..fd4a1c5a6369 100644 --- a/arch/powerpc/platforms/powernv/powernv.h +++ b/arch/powerpc/platforms/powernv/powernv.h @@ -24,7 +24,8 @@ extern u32 pnv_get_supported_cpuidle_states(void); extern void pnv_lpc_init(void); -extern void opal_handle_events(uint64_t events); +extern void opal_handle_events(void); +extern bool opal_have_pending_events(void); extern void opal_event_shutdown(void); bool cpu_core_split_required(void); |