|
@@ -596,12 +596,29 @@ static int virq_debug_show(struct seq_file *m, void *private)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
struct irq_desc *desc;
|
|
|
- void *data;
|
|
|
+ struct irq_domain *domain;
|
|
|
+ struct radix_tree_iter iter;
|
|
|
+ void *data, **slot;
|
|
|
int i;
|
|
|
|
|
|
- seq_printf(m, "%-5s %-7s %-15s %-*s %s\n", "irq", "hwirq",
|
|
|
+ seq_printf(m, " %-16s %-6s %-10s %-10s %s\n",
|
|
|
+ "name", "mapped", "linear-max", "direct-max", "devtree-node");
|
|
|
+ mutex_lock(&irq_domain_mutex);
|
|
|
+ list_for_each_entry(domain, &irq_domain_list, link) {
|
|
|
+ int count = 0;
|
|
|
+ radix_tree_for_each_slot(slot, &domain->revmap_tree, &iter, 0)
|
|
|
+ count++;
|
|
|
+ seq_printf(m, "%c%-16s %6u %10u %10u %s\n",
|
|
|
+ domain == irq_default_domain ? '*' : ' ', domain->name,
|
|
|
+ domain->revmap_size + count, domain->revmap_size,
|
|
|
+ domain->revmap_direct_max_irq,
|
|
|
+ domain->of_node ? of_node_full_name(domain->of_node) : "");
|
|
|
+ }
|
|
|
+ mutex_unlock(&irq_domain_mutex);
|
|
|
+
|
|
|
+ seq_printf(m, "%-5s %-7s %-15s %-*s %6s %-14s %s\n", "irq", "hwirq",
|
|
|
"chip name", (int)(2 * sizeof(void *) + 2), "chip data",
|
|
|
- "domain name");
|
|
|
+ "active", "type", "domain");
|
|
|
|
|
|
for (i = 1; i < nr_irqs; i++) {
|
|
|
desc = irq_to_desc(i);
|
|
@@ -609,12 +626,15 @@ static int virq_debug_show(struct seq_file *m, void *private)
|
|
|
continue;
|
|
|
|
|
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
|
|
+ domain = desc->irq_data.domain;
|
|
|
|
|
|
- if (desc->action && desc->action->handler) {
|
|
|
+ if (domain) {
|
|
|
struct irq_chip *chip;
|
|
|
+ int hwirq = desc->irq_data.hwirq;
|
|
|
+ bool direct;
|
|
|
|
|
|
seq_printf(m, "%5d ", i);
|
|
|
- seq_printf(m, "0x%05lx ", desc->irq_data.hwirq);
|
|
|
+ seq_printf(m, "0x%05x ", hwirq);
|
|
|
|
|
|
chip = irq_desc_get_chip(desc);
|
|
|
seq_printf(m, "%-15s ", (chip && chip->name) ? chip->name : "none");
|
|
@@ -622,6 +642,11 @@ static int virq_debug_show(struct seq_file *m, void *private)
|
|
|
data = irq_desc_get_chip_data(desc);
|
|
|
seq_printf(m, data ? "0x%p " : " %p ", data);
|
|
|
|
|
|
+ seq_printf(m, " %c ", (desc->action && desc->action->handler) ? '*' : ' ');
|
|
|
+ direct = (i == hwirq) && (i < domain->revmap_direct_max_irq);
|
|
|
+ seq_printf(m, "%6s%-8s ",
|
|
|
+ (hwirq < domain->revmap_size) ? "LINEAR" : "RADIX",
|
|
|
+ direct ? "(DIRECT)" : "");
|
|
|
seq_printf(m, "%s\n", desc->irq_data.domain->name);
|
|
|
}
|
|
|
|