|
@@ -1950,9 +1950,10 @@ int setup_percpu_irq(unsigned int irq, struct irqaction *act)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * request_percpu_irq - allocate a percpu interrupt line
|
|
|
+ * __request_percpu_irq - allocate a percpu interrupt line
|
|
|
* @irq: Interrupt line to allocate
|
|
|
* @handler: Function to be called when the IRQ occurs.
|
|
|
+ * @flags: Interrupt type flags (IRQF_TIMER only)
|
|
|
* @devname: An ascii name for the claiming device
|
|
|
* @dev_id: A percpu cookie passed back to the handler function
|
|
|
*
|
|
@@ -1965,8 +1966,9 @@ int setup_percpu_irq(unsigned int irq, struct irqaction *act)
|
|
|
* the handler gets called with the interrupted CPU's instance of
|
|
|
* that variable.
|
|
|
*/
|
|
|
-int request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
|
|
- const char *devname, void __percpu *dev_id)
|
|
|
+int __request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
|
|
+ unsigned long flags, const char *devname,
|
|
|
+ void __percpu *dev_id)
|
|
|
{
|
|
|
struct irqaction *action;
|
|
|
struct irq_desc *desc;
|
|
@@ -1980,12 +1982,15 @@ int request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
|
|
!irq_settings_is_per_cpu_devid(desc))
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ if (flags && flags != IRQF_TIMER)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
|
|
|
if (!action)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
action->handler = handler;
|
|
|
- action->flags = IRQF_PERCPU | IRQF_NO_SUSPEND;
|
|
|
+ action->flags = flags | IRQF_PERCPU | IRQF_NO_SUSPEND;
|
|
|
action->name = devname;
|
|
|
action->percpu_dev_id = dev_id;
|
|
|
|
|
@@ -2004,7 +2009,7 @@ int request_percpu_irq(unsigned int irq, irq_handler_t handler,
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(request_percpu_irq);
|
|
|
+EXPORT_SYMBOL_GPL(__request_percpu_irq);
|
|
|
|
|
|
/**
|
|
|
* irq_get_irqchip_state - returns the irqchip state of a interrupt.
|