hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/kernel/irq/irqdesc.c
....@@ -16,6 +16,7 @@
1616 #include <linux/bitmap.h>
1717 #include <linux/irqdomain.h>
1818 #include <linux/sysfs.h>
19
+#include <linux/irq_pipeline.h>
1920
2021 #include "internals.h"
2122
....@@ -453,6 +454,7 @@
453454 * irq_sysfs_init() as well.
454455 */
455456 irq_sysfs_del(desc);
457
+ uncache_irq_desc(irq);
456458 delete_irq_desc(irq);
457459
458460 /*
....@@ -633,9 +635,12 @@
633635 #endif /* !CONFIG_SPARSE_IRQ */
634636
635637 /**
636
- * generic_handle_irq - Invoke the handler for a particular irq
638
+ * generic_handle_irq - Handle a particular irq
637639 * @irq: The irq number to handle
638640 *
641
+ * The handler is invoked, unless we are entering the interrupt
642
+ * pipeline, in which case the incoming IRQ is only scheduled for
643
+ * deferred delivery.
639644 */
640645 int generic_handle_irq(unsigned int irq)
641646 {
....@@ -646,7 +651,7 @@
646651 return -EINVAL;
647652
648653 data = irq_desc_get_irq_data(desc);
649
- if (WARN_ON_ONCE(!in_irq() && handle_enforce_irqctx(data)))
654
+ if (WARN_ON_ONCE(!in_hard_irq() && handle_enforce_irqctx(data)))
650655 return -EPERM;
651656
652657 generic_handle_irq_desc(desc);