From 3f89384c77fc719e8164ebfa872d95f5b3f1ee5b Mon Sep 17 00:00:00 2001 From: David Brownell Date: Mon, 1 Dec 2008 14:31:37 -0800 Subject: [PATCH] --- yaml --- r: 123216 b: refs/heads/master c: 470c66239ef0336429b35345f3f615d47341e13b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/irq/manage.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8054e8bd1d0f..1e86d5a4a605 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7807fafa52b990abb321f1212416c71e64523ecb +refs/heads/master: 470c66239ef0336429b35345f3f615d47341e13b diff --git a/trunk/kernel/irq/manage.c b/trunk/kernel/irq/manage.c index c498a1b8c621..7fd891c3a33d 100644 --- a/trunk/kernel/irq/manage.c +++ b/trunk/kernel/irq/manage.c @@ -635,6 +635,18 @@ int request_irq(unsigned int irq, irq_handler_t handler, struct irq_desc *desc; int retval; + /* + * handle_IRQ_event() always ignores IRQF_DISABLED except for + * the _first_ irqaction (sigh). That can cause oopsing, but + * the behavior is classified as "will not fix" so we need to + * start nudging drivers away from using that idiom. + */ + if ((irqflags & (IRQF_SHARED|IRQF_DISABLED)) + == (IRQF_SHARED|IRQF_DISABLED)) + pr_warning("IRQ %d/%s: IRQF_DISABLED is not " + "guaranteed on shared IRQs\n", + irq, devname); + #ifdef CONFIG_LOCKDEP /* * Lockdep wants atomic interrupt handlers: