summaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/powernv/opal-irqchip.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/platforms/powernv/opal-irqchip.c')
-rw-r--r--arch/powerpc/platforms/powernv/opal-irqchip.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/arch/powerpc/platforms/powernv/opal-irqchip.c b/arch/powerpc/platforms/powernv/opal-irqchip.c
index bd5125dcf0d7..841135f48981 100644
--- a/arch/powerpc/platforms/powernv/opal-irqchip.c
+++ b/arch/powerpc/platforms/powernv/opal-irqchip.c
@@ -100,7 +100,6 @@ void opal_handle_events(uint64_t events)
{
int virq, hwirq = 0;
u64 mask = opal_event_irqchip.mask;
- u64 notifier_mask = 0;
if (!in_irq() && (events & mask)) {
last_outstanding_events = events;
@@ -108,19 +107,16 @@ void opal_handle_events(uint64_t events)
return;
}
- while (events) {
+ while (events & mask) {
hwirq = fls64(events) - 1;
- virq = irq_find_mapping(opal_event_irqchip.domain,
- hwirq);
- if (virq) {
- if (BIT_ULL(hwirq) & mask)
+ if (BIT_ULL(hwirq) & mask) {
+ virq = irq_find_mapping(opal_event_irqchip.domain,
+ hwirq);
+ if (virq)
generic_handle_irq(virq);
- } else
- notifier_mask |= BIT_ULL(hwirq);
+ }
events &= ~BIT_ULL(hwirq);
}
-
- opal_do_notifier(notifier_mask);
}
static irqreturn_t opal_interrupt(int irq, void *data)