Eric W. Biederman wrote:> Even if we never export them to drivers we will need to implement> in genirq functions like:> > int __must_check irq_request(struct irq_desc *irq, irq_handler_t handler,> unsigned long irqflags, const char *devname, void *devid);> > int __must_check request_irq(unsigned int irq, irq_handler_t handler,> unsigned long irqflags, const char *devname, void *devid)> {> return irq_request(cookie_to_desc(irq), handler, irqflags, devname, devid);> }> > Or at the very least do the mapping from cookie to irq_desc at the> start of all of the genirq functions. One valid implementation of> that cookie to desc will be the current array lookup. But for x86> we need something less limiting.[...]> And on x86 at least the hardware maps the MSI write into an interrupt.> So there is not an opportunity to get any metdata/OOB data from the> MSI message. Instead we just potentially get a boatload more irq> sources. Which is one of the things making a static NR_IRQS painful.> > To be safe we have to make NR_IRQS 10x+ or so bigger then people use> today. Just in case they decide to plug in some really irq hungry> cards.

Just to be clear, irq_chip/irq_desc and metadata/OOB data are two very different beasts. irq_chip/irq_desc is more a system attribute as Linus notes. Also, it doesn't change very often.

metadata/OOB, on the other hand, is different -for each interrupt-, and is highly relevant to drivers. Thus should be part of the driver API somehow.