Re: [v3, 5/8] powernv/opal: Convert opal message events to opal irq domain

Michael Ellerman
2015-05-11T09:18:55Z

On Thu, 2015-07-05 at 03:16:15 UTC, Alistair Popple wrote:
> diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
> index 4399ff2..0196220 100644
> --- a/arch/powerpc/platforms/powernv/opal.c
> +++ b/arch/powerpc/platforms/powernv/opal.c
> @@ -362,33 +362,34 @@ static void opal_handle_message(void)
> opal_message_do_notify(type, (void *)&msg);
> }
>
> -static int opal_message_notify(struct notifier_block *nb,
> - unsigned long events, void *change)
> +static irqreturn_t opal_message_notify(int irq, void *data)
> {
> - if (events & OPAL_EVENT_MSG_PENDING)
> - opal_handle_message();
> - return 0;
> + opal_handle_message();
> + return IRQ_HANDLED;
> }
>
> -static struct notifier_block opal_message_nb = {
> - .notifier_call = opal_message_notify,
> - .next = NULL,
> - .priority = 0,
> -};
> -
> static int __init opal_message_init(void)
> {
> - int ret, i;
> + int ret, i, irq;
>
> for (i = 0; i < OPAL_MSG_TYPE_MAX; i++)
> ATOMIC_INIT_NOTIFIER_HEAD(&opal_msg_notifier_head[i]);
>
> - ret = opal_notifier_register(&opal_message_nb);
> + irq = opal_event_request(ilog2(OPAL_EVENT_MSG_PENDING));
> + if (!irq) {
> + pr_err("%s: Can't register OPAL event irq (%d)\n",
> + __func__, irq);
> + return irq;
> + }

On mambo this is giving me:

irq: XICS didn't like hwirq-0xb to VIRQ17 mapping (rc=-22)
opal: opal_message_init: Can't register OPAL event irq (0)

Which suggests your irq domain is NULL and it's falling back to XICS?

And it never gets to userspace, which I guess is related, but might not be.

cheers