History

genirq: Move non-irqdomain handle_domain_irq() handling into ARM's handle_IRQ()

Despite the name, handle_domain_irq() deals with non-irqdomain handling for the sake of a handful of legacy ARM platforms. Move such handling into ARM's handle_IRQ(), allowing for better code generation for everyone else. This allows us get rid of some complexity, and to rearrange the guards on the various helpers in a more logical way.

Marc Zyngier committed 5 years ago

Commit e1c05491 parent 8240ef53 files · +33 −33Browse files

Showing the changes to kernel (1 of 3 files). Show all

Unified · Split

kernel/irq/irqdesc.c+8−22
@@ -659,7 +659,7 @@ int generic_handle_irq(unsigned int irq) · 658 unmodified lines
659659 }
660660 EXPORT_SYMBOL_GPL(generic_handle_irq);
661661
662−#ifdef CONFIG_HANDLE_DOMAIN_IRQ
662+#ifdef CONFIG_IRQ_DOMAIN
663663 /**
664664 * generic_handle_domain_irq - Invoke the handler for a HW irq belonging
665665 * 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
676676 }
677677 EXPORT_SYMBOL_GPL(generic_handle_domain_irq);
678678
679+#ifdef CONFIG_HANDLE_DOMAIN_IRQ
679680 /**
680− * __handle_domain_irq - Invoke the handler for a HW irq belonging to a domain,
681− * usually for a root interrupt controller
681+ * handle_domain_irq - Invoke the handler for a HW irq belonging to a domain,
682+ * usually for a root interrupt controller
682683 * @domain: The domain where to perform the lookup
683684 * @hwirq: The HW irq number to convert to a logical one
684685 * @lookup: Whether to perform the domain lookup or not
@@ -686,8 +687,8 @@ EXPORT_SYMBOL_GPL(generic_handle_domain_irq); · 1 unmodified line
686687 *
687688 * Returns: 0 on success, or -EINVAL if conversion has failed
688689 */
689−int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq,
690− bool lookup, struct pt_regs *regs)
690+int handle_domain_irq(struct irq_domain *domain,
691+ unsigned int hwirq, struct pt_regs *regs)
691692 {
692693 struct pt_regs *old_regs = set_irq_regs(regs);
693694 struct irq_desc *desc;
@@ -695,22 +696,8 @@ int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, · 1 unmodified line
695696
696697 irq_enter();
697698
698− if (likely(IS_ENABLED(CONFIG_IRQ_DOMAIN) && lookup)) {
699− /* The irqdomain code provides boundary checks */
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−
699+ /* The irqdomain code provides boundary checks */
700+ desc = irq_resolve_mapping(domain, hwirq);
714701 if (likely(desc))
715702 handle_irq_desc(desc);
716703 else
@@ -721,7 +708,6 @@ int __handle_domain_irq(struct irq_domain *domain, unsigned int hwirq, · 4 unmodified lines
721708 return ret;
722709 }
723710
724−#ifdef CONFIG_IRQ_DOMAIN
725711 /**
726712 * handle_domain_nmi - Invoke the handler for a HW irq belonging to a domain
727713 * @domain: The domain where to perform the lookup

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t