On 2014/11/18 21:28, Yun Wu (Abel) wrote: > On 2014/11/18 20:38, Jiang Liu wrote: > >> On 2014/11/18 19:47, Yun Wu (Abel) wrote: >>> On 2014/11/18 18:03, Thomas Gleixner wrote: >>> >>>> On Tue, 18 Nov 2014, Yun Wu (Abel) wrote: >>>> >>>>> Hi Thomas, Jiang, >>>>> On 2014/11/12 21:43, Thomas Gleixner wrote: >>>>> >>>>>> From: Jiang Liu <[email protected]> >>>>> [...] >>>>>> +void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, >>>>>> + irq_hw_number_t hwirq, struct irq_chip *chip, >>>>>> + void *chip_data, irq_flow_handler_t handler, >>>>>> + void *handler_data, const char *handler_name) >>>>>> +{ >>>>>> + irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, >>>>>> chip_data); >>>>>> + __irq_set_handler(virq, handler, 0, handler_name); >>>>>> + irq_set_handler_data(virq, handler_data); >>>>>> +} >>>>> >>>>> When stacked domain enabled, there will be a semantic shift to the linux >>>>> interrupt >>>>> identifiers. The @virq now delivers much more than before. >>>>> More specifically, now we need both @virq and @domain, rather than only >>>>> @irq, to >>>>> determine which irq_data we want to configure. And once we configure @irq >>>>> without >>>>> providing the exact domain, it means we are configuring all the domains >>>>> related to >>>>> that @irq. So I think this routine just messed all things up. >>>> >>>> You can mess up anything by using an interface in the wrong way. Open >>>> coding will not make that harder. >>>> >>> >>> But what's the correct way to use this interface? >> >> It's to be used by interrupt controller drivers to implement >> hierarchy irqdomains. >> > > Each time an interrupt domain calls this, the previous (@handler, > @handler_name, > @handler_data) will be overrode. It's because the routines __irq_set_handler() > and irq_set_handler_data() only configure top level (without Marc's fix which > is > not ideal). Is this what we really want to see? Hi Yun, There are different interfaces for different purposes. irq_domain_set_hwirq_and_chip() sets hwirq, irq_chip and irq_chip_data. irq_domain_set_info() sets handler and handler_data in addition to irq_domain_set_hwirq_and_chip(). Which irqdomain to call irq_domain_set_info() to set irq_handler is determined by the interrupt hierarchy. And at least on irqdomain in the hierarchy must set flow handler for the irq. Thanks! Gerry
> > Thanks, > Abel > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

