[PATCH] Fix pSeries boot failure, by returning interrupt controller node when an interrupt-map property doesn't exist

Benjamin Herrenschmidt benh at kernel.crashing.org
Tue Jun 30 13:23:33 AEST 2015


On Mon, 2015-06-29 at 18:50 -0500, Jeremy Linton wrote:
> This is a reformat of the patch attached to "pSeries boot failure due
> to wrong interrupt controller".
> 
> It allows of_irq_parse_raw() to return the node pointer of the
> interrupt controller, rather than the parent bus. This allows
> ics_rtas_host_match() to detect that the controller is a legacy 8259
> and avoid using xics. This avoids an RTAS assertion/crash during early
> kernel bootstrapping
> 
> Signed-off-by: Jeremy Linton <lintonrjeremy at gmail.com>

Reviewed-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---

Rob, do you want to take this or should we ?

> ---
>  drivers/of/irq.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/of/irq.c b/drivers/of/irq.c
> index 1a79806..cb4b9ae 100644
> --- a/drivers/of/irq.c
> +++ b/drivers/of/irq.c
> @@ -252,8 +252,6 @@ int of_irq_parse_raw(const __be32 *addr, struct
> of_phandle_args *out_irq)
>                  * Successfully parsed an interrrupt-map translation; copy new
>                  * interrupt specifier into the out_irq structure
>                  */
> -               out_irq->np = newpar;
> -
>                 match_array = imap - newaddrsize - newintsize;
>                 for (i = 0; i < newintsize; i++)
>                         out_irq->args[i] = be32_to_cpup(imap - newintsize + i);
> @@ -262,6 +260,7 @@ int of_irq_parse_raw(const __be32 *addr, struct
> of_phandle_args *out_irq)
> 
>         skiplevel:
>                 /* Iterate again with new parent */
> +               out_irq->np = newpar;
>                 pr_debug(" -> new parent: %s\n", of_node_full_name(newpar));
>                 of_node_put(ipar);
>                 ipar = newpar;
> --
> 1.8.1.4




More information about the Linuxppc-dev mailing list