Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

irqdomain: Always update revmap when setting up a virq

At irq_setup_virq() time all of the data needed to update the reverse
map is available, but the current code ignores it and relies upon the
slow path to insert revmap records. This patch adds revmap updating
to the setup path so the slow path will no longer be necessary.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Rob Herring <rob.herring@calxeda.com>

+12 -3
-3
arch/powerpc/sysdev/xics/xics-common.c
··· 329 329 330 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 332 /* They aren't all level sensitive but we just don't really know */ 336 333 irq_set_status_flags(virq, IRQ_LEVEL); 337 334
+12
kernel/irq/irqdomain.c
··· 424 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 439 irq_clear_status_flags(virq, IRQ_NOREQUEST); 428 440 429 441 return 0;