Merge branches 'irq-urgent-for-linus' and 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq update from Thomas Gleixner:
"Fix from the urgent branch: a trivial oneliner adding the missing
Kconfig dependency curing build failures which have been discovered by
several build robots.

The update in the irq-core branch provides a new function in the
irq/devres code, which is a prerequisite for driver developers to get
rid of boilerplate code all over the place.

Not a bugfix, but it has zero impact on the current kernel due to the
lack of users. It's simpler to provide the infrastructure to
interested parties via your tree than fulfilling the wishlist of
driver maintainers on which particular commit or tag this should be
based on"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq: Add missing irq_to_desc export for CONFIG_SPARSE_IRQ=n

* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq: Add devm_request_any_context_irq()

Changed files
+51
include
linux
kernel
+5
include/linux/interrupt.h
··· 158 158 devname, dev_id); 159 159 } 160 160 161 + extern int __must_check 162 + devm_request_any_context_irq(struct device *dev, unsigned int irq, 163 + irq_handler_t handler, unsigned long irqflags, 164 + const char *devname, void *dev_id); 165 + 161 166 extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); 162 167 163 168 /*
+45
kernel/irq/devres.c
··· 73 73 EXPORT_SYMBOL(devm_request_threaded_irq); 74 74 75 75 /** 76 + * devm_request_any_context_irq - allocate an interrupt line for a managed device 77 + * @dev: device to request interrupt for 78 + * @irq: Interrupt line to allocate 79 + * @handler: Function to be called when the IRQ occurs 80 + * @thread_fn: function to be called in a threaded interrupt context. NULL 81 + * for devices which handle everything in @handler 82 + * @irqflags: Interrupt type flags 83 + * @devname: An ascii name for the claiming device 84 + * @dev_id: A cookie passed back to the handler function 85 + * 86 + * Except for the extra @dev argument, this function takes the 87 + * same arguments and performs the same function as 88 + * request_any_context_irq(). IRQs requested with this function will be 89 + * automatically freed on driver detach. 90 + * 91 + * If an IRQ allocated with this function needs to be freed 92 + * separately, devm_free_irq() must be used. 93 + */ 94 + int devm_request_any_context_irq(struct device *dev, unsigned int irq, 95 + irq_handler_t handler, unsigned long irqflags, 96 + const char *devname, void *dev_id) 97 + { 98 + struct irq_devres *dr; 99 + int rc; 100 + 101 + dr = devres_alloc(devm_irq_release, sizeof(struct irq_devres), 102 + GFP_KERNEL); 103 + if (!dr) 104 + return -ENOMEM; 105 + 106 + rc = request_any_context_irq(irq, handler, irqflags, devname, dev_id); 107 + if (rc) { 108 + devres_free(dr); 109 + return rc; 110 + } 111 + 112 + dr->irq = irq; 113 + dr->dev_id = dev_id; 114 + devres_add(dev, dr); 115 + 116 + return 0; 117 + } 118 + EXPORT_SYMBOL(devm_request_any_context_irq); 119 + 120 + /** 76 121 * devm_free_irq - free an interrupt 77 122 * @dev: device to free interrupt for 78 123 * @irq: Interrupt line to free
+1
kernel/irq/irqdesc.c
··· 274 274 { 275 275 return (irq < NR_IRQS) ? irq_desc + irq : NULL; 276 276 } 277 + EXPORT_SYMBOL(irq_to_desc); 277 278 278 279 static void free_desc(unsigned int irq) 279 280 {