|
@@ -1068,6 +1068,13 @@ static int irq_setup_forced_threading(struct irqaction *new)
|
|
|
if (new->flags & (IRQF_NO_THREAD | IRQF_PERCPU | IRQF_ONESHOT))
|
|
|
return 0;
|
|
|
|
|
|
+ /*
|
|
|
+ * No further action required for interrupts which are requested as
|
|
|
+ * threaded interrupts already
|
|
|
+ */
|
|
|
+ if (new->handler == irq_default_primary_handler)
|
|
|
+ return 0;
|
|
|
+
|
|
|
new->flags |= IRQF_ONESHOT;
|
|
|
|
|
|
/*
|
|
@@ -1075,7 +1082,7 @@ static int irq_setup_forced_threading(struct irqaction *new)
|
|
|
* thread handler. We force thread them as well by creating a
|
|
|
* secondary action.
|
|
|
*/
|
|
|
- if (new->handler != irq_default_primary_handler && new->thread_fn) {
|
|
|
+ if (new->handler && new->thread_fn) {
|
|
|
/* Allocate the secondary action */
|
|
|
new->secondary = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
|
|
|
if (!new->secondary)
|