diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-06-25 09:09:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-06-25 09:09:59 -0400 |
commit | 2de23071f5f7eb80a6cccf45438b271da81246af (patch) | |
tree | 91c5353f6d62bee597bce14a746b77ad684dbcc6 | |
parent | 2f6e97477bb44f8d1b36e6ead62b4934052d884d (diff) | |
parent | 4b2312bd0592708c85ed94368c874819e7013309 (diff) |
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fix from Thomas Gleixner:
"A single fix for the fallout from the conversion of MIPS GIC to irq
domains"
* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip/mips-gic: Fix IRQs in gic_dev_domain
-rw-r--r-- | drivers/irqchip/irq-mips-gic.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 3b5e10aa48ab..8a4adbeb2b8c 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c | |||
@@ -746,6 +746,12 @@ static int gic_irq_domain_alloc(struct irq_domain *d, unsigned int virq, | |||
746 | /* verify that it doesn't conflict with an IPI irq */ | 746 | /* verify that it doesn't conflict with an IPI irq */ |
747 | if (test_bit(spec->hwirq, ipi_resrv)) | 747 | if (test_bit(spec->hwirq, ipi_resrv)) |
748 | return -EBUSY; | 748 | return -EBUSY; |
749 | |||
750 | hwirq = GIC_SHARED_TO_HWIRQ(spec->hwirq); | ||
751 | |||
752 | return irq_domain_set_hwirq_and_chip(d, virq, hwirq, | ||
753 | &gic_level_irq_controller, | ||
754 | NULL); | ||
749 | } else { | 755 | } else { |
750 | base_hwirq = find_first_bit(ipi_resrv, gic_shared_intrs); | 756 | base_hwirq = find_first_bit(ipi_resrv, gic_shared_intrs); |
751 | if (base_hwirq == gic_shared_intrs) { | 757 | if (base_hwirq == gic_shared_intrs) { |
@@ -867,10 +873,14 @@ static int gic_dev_domain_alloc(struct irq_domain *d, unsigned int virq, | |||
867 | &gic_level_irq_controller, | 873 | &gic_level_irq_controller, |
868 | NULL); | 874 | NULL); |
869 | if (ret) | 875 | if (ret) |
870 | return ret; | 876 | goto error; |
871 | } | 877 | } |
872 | 878 | ||
873 | return 0; | 879 | return 0; |
880 | |||
881 | error: | ||
882 | irq_domain_free_irqs_parent(d, virq, nr_irqs); | ||
883 | return ret; | ||
874 | } | 884 | } |
875 | 885 | ||
876 | void gic_dev_domain_free(struct irq_domain *d, unsigned int virq, | 886 | void gic_dev_domain_free(struct irq_domain *d, unsigned int virq, |