| @@ -659,7 +659,7 @@ int generic_handle_irq(unsigned int irq) · 658 unmodified lines |
| 659 | } | 659 | } |
| 660 | EXPORT_SYMBOL_GPL(generic_handle_irq); | 660 | EXPORT_SYMBOL_GPL(generic_handle_irq); |
| 661 | | 661 | |
| 662 | #ifdef CONFIG_HANDLE_DOMAIN_IRQ | 662 | #ifdef CONFIG_IRQ_DOMAIN |
| 663 | /** | 663 | /** |
| 664 | * generic_handle_domain_irq - Invoke the handler for a HW irq belonging | 664 | * generic_handle_domain_irq - Invoke the handler for a HW irq belonging |
| 665 | * to a domain, usually for a non-root interrupt | 665 | * to a domain, usually for a non-root interrupt |
| @@ -676,9 +676,10 @@ int generic_handle_domain_irq(struct irq_domain *domain, unsigned int hwirq) · 10 unmodified lines |
| 676 | } | 676 | } |
| 677 | EXPORT_SYMBOL_GPL(generic_handle_domain_irq); | 677 | EXPORT_SYMBOL_GPL(generic_handle_domain_irq); |
| 678 | | 678 | |
| | 679 | #ifdef CONFIG_HANDLE_DOMAIN_IRQ |
| 679 | /** | 680 | /** |
| 680 | * __handle_domain_irq - Invoke the handler for a HW irq belonging to a domain, | 681 | * handle_domain_irq - Invoke the handler for a HW irq belonging to a domain, |
| 681 | * usually for a root interrupt controller | 682 | * usually for a root interrupt controller |
| 682 | * @domain: The domain where to perform the lookup | 683 | * @domain: The domain where to perform the lookup |
| 683 | * @hwirq: The HW irq number to convert to a logical one | 684 | * @hwirq: The HW irq number to convert to a logical one |
| 684 | * @lookup: Whether to perform the domain lookup or not | 685 | * @lookup: Whether to perform the domain lookup or not |
| @@ -686,8 +687,8 @@ EXPORT_SYMBOL_GPL(generic_handle_domain_irq); · 1 unmodified line |
| 686 | * | 687 | * |
| 687 | * Returns: 0 on success, or -EINVAL if conversion has failed | 688 | * Returns: 0 on success, or -EINVAL if conversion has failed |
| 688 | */ | 689 | */ |
| 689 | int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, | 690 | int handle_domain_irq(struct irq_domain *domain, |
| 690 | bool lookup, struct pt_regs *regs) | 691 | unsigned int hwirq, struct pt_regs *regs) |
| 691 | { | 692 | { |
| 692 | struct pt_regs *old_regs = set_irq_regs(regs); | 693 | struct pt_regs *old_regs = set_irq_regs(regs); |
| 693 | struct irq_desc *desc; | 694 | struct irq_desc *desc; |
| @@ -695,22 +696,8 @@ int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, · 1 unmodified line |
| 695 | | 696 | |
| 696 | irq_enter(); | 697 | irq_enter(); |
| 697 | | 698 | |
| 698 | if (likely(IS_ENABLED(CONFIG_IRQ_DOMAIN) && lookup)) { | 699 | /* The irqdomain code provides boundary checks */ |
| 699 | /* The irqdomain code provides boundary checks */ | 700 | desc = irq_resolve_mapping(domain, hwirq); |
| 700 | desc = irq_resolve_mapping(domain, hwirq); | | |
| 701 | } else { | | |
| 702 | /* | | |
| 703 | * Some hardware gives randomly wrong interrupts. Rather | | |
| 704 | * than crashing, do something sensible. | | |
| 705 | */ | | |
| 706 | if (unlikely(!hwirq || hwirq >= nr_irqs)) { | | |
| 707 | ack_bad_irq(hwirq); | | |
| 708 | desc = NULL; | | |
| 709 | } else { | | |
| 710 | desc = irq_to_desc(hwirq); | | |
| 711 | } | | |
| 712 | } | | |
| 713 | | | |
| 714 | if (likely(desc)) | 701 | if (likely(desc)) |
| 715 | handle_irq_desc(desc); | 702 | handle_irq_desc(desc); |
| 716 | else | 703 | else |
| @@ -721,7 +708,6 @@ int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, · 4 unmodified lines |
| 721 | return ret; | 708 | return ret; |
| 722 | } | 709 | } |
| 723 | | 710 | |
| 724 | #ifdef CONFIG_IRQ_DOMAIN | | |
| 725 | /** | 711 | /** |
| 726 | * handle_domain_nmi - Invoke the handler for a HW irq belonging to a domain | 712 | * handle_domain_nmi - Invoke the handler for a HW irq belonging to a domain |
| 727 | * @domain: The domain where to perform the lookup | 713 | * @domain: The domain where to perform the lookup |