| .. | .. |
|---|
| 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); |
|---|