|
@@ -635,6 +635,18 @@ int request_irq(unsigned int irq, irq_handler_t handler,
|
|
struct irq_desc *desc;
|
|
struct irq_desc *desc;
|
|
int retval;
|
|
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
|
|
#ifdef CONFIG_LOCKDEP
|
|
/*
|
|
/*
|
|
* Lockdep wants atomic interrupt handlers:
|
|
* Lockdep wants atomic interrupt handlers:
|