diff options
-rw-r--r-- | arch/powerpc/sysdev/xics/xics-common.c | 3 | ||||
-rw-r--r-- | kernel/irq/irqdomain.c | 12 |
2 files changed, 12 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c index cd1d18db92c6..9049d9f44485 100644 --- a/arch/powerpc/sysdev/xics/xics-common.c +++ b/arch/powerpc/sysdev/xics/xics-common.c | |||
@@ -329,9 +329,6 @@ static int xics_host_map(struct irq_domain *h, unsigned int virq, | |||
329 | 329 | ||
330 | pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw); | 330 | pr_devel("xics: map virq %d, hwirq 0x%lx\n", virq, hw); |
331 | 331 | ||
332 | /* Insert the interrupt mapping into the radix tree for fast lookup */ | ||
333 | irq_radix_revmap_insert(xics_host, virq, hw); | ||
334 | |||
335 | /* They aren't all level sensitive but we just don't really know */ | 332 | /* They aren't all level sensitive but we just don't really know */ |
336 | irq_set_status_flags(virq, IRQ_LEVEL); | 333 | irq_set_status_flags(virq, IRQ_LEVEL); |
337 | 334 | ||
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 17634f2c9f6c..091732c9dbdc 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c | |||
@@ -424,6 +424,18 @@ static int irq_setup_virq(struct irq_domain *domain, unsigned int virq, | |||
424 | return -1; | 424 | return -1; |
425 | } | 425 | } |
426 | 426 | ||
427 | switch (domain->revmap_type) { | ||
428 | case IRQ_DOMAIN_MAP_LINEAR: | ||
429 | if (hwirq < domain->revmap_data.linear.size) | ||
430 | domain->revmap_data.linear.revmap[hwirq] = virq; | ||
431 | break; | ||
432 | case IRQ_DOMAIN_MAP_TREE: | ||
433 | mutex_lock(&revmap_trees_mutex); | ||
434 | irq_radix_revmap_insert(domain, virq, hwirq); | ||
435 | mutex_unlock(&revmap_trees_mutex); | ||
436 | break; | ||
437 | } | ||
438 | |||
427 | irq_clear_status_flags(virq, IRQ_NOREQUEST); | 439 | irq_clear_status_flags(virq, IRQ_NOREQUEST); |
428 | 440 | ||
429 | return 0; | 441 | return 0; |