.. | .. |
---|
16 | 16 | #include <linux/bitmap.h> |
---|
17 | 17 | #include <linux/irqdomain.h> |
---|
18 | 18 | #include <linux/sysfs.h> |
---|
| 19 | +#include <linux/irq_pipeline.h> |
---|
19 | 20 | |
---|
20 | 21 | #include "internals.h" |
---|
21 | 22 | |
---|
.. | .. |
---|
453 | 454 | * irq_sysfs_init() as well. |
---|
454 | 455 | */ |
---|
455 | 456 | irq_sysfs_del(desc); |
---|
| 457 | + uncache_irq_desc(irq); |
---|
456 | 458 | delete_irq_desc(irq); |
---|
457 | 459 | |
---|
458 | 460 | /* |
---|
.. | .. |
---|
633 | 635 | #endif /* !CONFIG_SPARSE_IRQ */ |
---|
634 | 636 | |
---|
635 | 637 | /** |
---|
636 | | - * generic_handle_irq - Invoke the handler for a particular irq |
---|
| 638 | + * generic_handle_irq - Handle a particular irq |
---|
637 | 639 | * @irq: The irq number to handle |
---|
638 | 640 | * |
---|
| 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. |
---|
639 | 644 | */ |
---|
640 | 645 | int generic_handle_irq(unsigned int irq) |
---|
641 | 646 | { |
---|
.. | .. |
---|
646 | 651 | return -EINVAL; |
---|
647 | 652 | |
---|
648 | 653 | 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))) |
---|
650 | 655 | return -EPERM; |
---|
651 | 656 | |
---|
652 | 657 | generic_handle_irq_desc(desc); |
---|