static irqreturn_t opal_interrupt(int irq, void *data) { __be64 events; opal_handle_interrupt(virq_to_hw(irq), &events); opal_do_notifier(events); return IRQ_HANDLED; }
void opal_notifier_enable(void) { int64_t rc; uint64_t evt = 0; atomic_set(&opal_notifier_hold, 0); /* Process pending events */ rc = opal_poll_events(&evt); if (rc == OPAL_SUCCESS && evt) opal_do_notifier(evt); }
/* HMI exception handler called in virtual mode during check_irq_replay. */ int opal_handle_hmi_exception(struct pt_regs *regs) { s64 rc; __be64 evt = 0; /* * Check if HMI event is available. * if Yes, then call opal_poll_events to pull opal messages and * process them. */ if (!local_paca->hmi_event_available) return 0; local_paca->hmi_event_available = 0; rc = opal_poll_events(&evt); if (rc == OPAL_SUCCESS && evt) opal_do_notifier(be64_to_cpu(evt)); return 1; }