diff options
author | Peter Zijlstra <peterz@infradead.org> | 2014-07-24 09:39:21 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2014-07-24 11:32:56 -0400 |
commit | 4fae4e7624653ef498d0e2a38f00620b9701ab04 (patch) | |
tree | b54ebbc2342f696970bf2c760087a48cc8be09b6 | |
parent | 1b0733837a9b2b8e006c787c628d0085073a5c36 (diff) |
irq: Warn when shared interrupts do not match on NO_SUSPEND
When suspend_device_irqs() iterates all descriptors, its pointless if
one has NO_SUSPEND set while another has not.
Validate on request_irq() that NO_SUSPEND state maches for SHARED
interrupts.
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Link: http://lkml.kernel.org/r/20140724133921.GY6758@twins.programming.kicks-ass.net
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | kernel/irq/manage.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 88657d7bc9dd..27a1fe028afb 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -1077,9 +1077,12 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) | |||
1077 | * set the trigger type must match. Also all must | 1077 | * set the trigger type must match. Also all must |
1078 | * agree on ONESHOT. | 1078 | * agree on ONESHOT. |
1079 | */ | 1079 | */ |
1080 | |||
1081 | #define IRQF_MISMATCH \ | ||
1082 | (IRQF_TRIGGER_MASK | IRQF_ONESHOT | IRQF_NO_SUSPEND) | ||
1083 | |||
1080 | if (!((old->flags & new->flags) & IRQF_SHARED) || | 1084 | if (!((old->flags & new->flags) & IRQF_SHARED) || |
1081 | ((old->flags ^ new->flags) & IRQF_TRIGGER_MASK) || | 1085 | ((old->flags ^ new->flags) & IRQF_MISMATCH)) |
1082 | ((old->flags ^ new->flags) & IRQF_ONESHOT)) | ||
1083 | goto mismatch; | 1086 | goto mismatch; |
1084 | 1087 | ||
1085 | /* All handlers must agree on per-cpuness */ | 1088 | /* All handlers must agree on per-cpuness */ |