···6161 * interrupt handler after suspending interrupts. For system6262 * wakeup devices users need to implement wakeup detection in6363 * their interrupt handlers.6464+ * IRQF_NO_AUTOEN - Don't enable IRQ or NMI automatically when users request it.6565+ * Users will enable it explicitly by enable_irq() or enable_nmi()6666+ * later.6467 */6568#define IRQF_SHARED 0x000000806669#define IRQF_PROBE_SHARED 0x00000100···7774#define IRQF_NO_THREAD 0x000100007875#define IRQF_EARLY_RESUME 0x000200007976#define IRQF_COND_SUSPEND 0x000400007777+#define IRQF_NO_AUTOEN 0x0008000080788179#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)8280
+9-2
kernel/irq/manage.c
···16971697 irqd_set(&desc->irq_data, IRQD_NO_BALANCING);16981698 }1699169917001700- if (irq_settings_can_autoenable(desc)) {17001700+ if (!(new->flags & IRQF_NO_AUTOEN) &&17011701+ irq_settings_can_autoenable(desc)) {17011702 irq_startup(desc, IRQ_RESEND, IRQ_START_COND);17021703 } else {17031704 /*···20912090 * which interrupt is which (messes up the interrupt freeing20922091 * logic etc).20932092 *20932093+ * Also shared interrupts do not go well with disabling auto enable.20942094+ * The sharing interrupt might request it while it's still disabled20952095+ * and then wait for interrupts forever.20962096+ *20942097 * Also IRQF_COND_SUSPEND only makes sense for shared interrupts and20952098 * it cannot be set along with IRQF_NO_SUSPEND.20962099 */20972100 if (((irqflags & IRQF_SHARED) && !dev_id) ||21012101+ ((irqflags & IRQF_SHARED) && (irqflags & IRQF_NO_AUTOEN)) ||20982102 (!(irqflags & IRQF_SHARED) && (irqflags & IRQF_COND_SUSPEND)) ||20992103 ((irqflags & IRQF_NO_SUSPEND) && (irqflags & IRQF_COND_SUSPEND)))21002104 return -EINVAL;···2255224922562250 desc = irq_to_desc(irq);2257225122582258- if (!desc || irq_settings_can_autoenable(desc) ||22522252+ if (!desc || (irq_settings_can_autoenable(desc) &&22532253+ !(irqflags & IRQF_NO_AUTOEN)) ||22592254 !irq_settings_can_request(desc) ||22602255 WARN_ON(irq_settings_is_per_cpu_devid(desc)) ||22612256 !irq_supports_nmi(desc))