Subject: Re: Problem with OF interrupt parsing code

From: Benjamin Herrenschmidt <[email-masked]>
Date: Tue, 02 Oct 2007 08:54:04 +1000

On Tue, 2007-10-02 at 00:33 +0200, Segher Boessenkool wrote:
> > 		  	i8259: interrupt-controller@20 {
> > 				device_type = "interrupt-controller";
> > 				compatible = "pnpPNP,000";
> > 				interrupt-controller;
> > 				reg = <00000001 00000020 00000002
> > 				       00000001 000000a0 00000002
> > 				       00000001 000004d0 00000002>;
> > 				reserved-interrupts = <2>;
> > 			};
> 
> This is an interrupt controller (it has an "interrupt-controller"
> property, and it has no interrupt parent (there is no "interrupt-parent"
> property, for interrupt controllers you do not follow the "normal" tree
> parent), so it is the root interrupt controller and there is no loop.
> 
> It seems from your description that the Linux code is using the tree
> parent as interrupt parent even for interrupt controller nodes.  This
> is wrong behaviour.

It shoudn't normally happen. The reason it -does- happen in fact is that
the above node is also missing the #interrupt-cells property, which
cause the parent-lookup routine to skip it before it gets a chance to
see that there's an "interrupt-controller" property in there.

I'm not sure whether linux behaviour is a bug or not since I believe we
are clearly in undefined-land as an interrupt controller should always
have a #interrupt-cells property.

Ben.