On Wed, 30 Mar 2011, Linus Torvalds wrote: > On Wed, Mar 30, 2011 at 9:46 AM, Thomas Gleixner wrote: > > On Wed, 30 Mar 2011, Thomas Gleixner wrote: > >> On Wed, 30 Mar 2011, Linus Torvalds wrote: > >> > > >> > which just makes me go "Somebody is really really confused". > >> > > >> > The whole thing may mean that both handler_data and chip_data contains > >> > the right thing, but it still makes me go "WTF?". > >> > > >> > Which way should I resolve it? > >> > >> get_irq_desc_data() maps to irq_desc_get_handler_data() so Richards > >> resolution is correct even if the other might work as well. > > > > Older code which was not using any accessors has: > > > >      desc->handler_data > > > > But yeah, the init stuff is confusing as hell. > > So I took the handler_data version, but I do think the chip_data one > seems to make more conceptual sense. It would be good if somebody who > can actually test that code and knows all the details of the > particular irq controller could just take a look, and decide on using > one or the other, and not both. I think I figured it out. The cascade interrupts do not set chip_data, they set handler data in qe_ic_init(). The interrupts which are demultiplexed by the cascade handlers set chip_data on different irq_desc instances. So Ben's resolution would have resulted in a NULL pointer dereference. Thanks, tglx