irqdomain: Beef up debugfs output
[deliverable/linux.git] / kernel / irq / irqdomain.c
index e0db59e2eef60fb030fbef8361af9893b5810e2f..280b8047d8db611baeb6e7189ecb46cf04b98dd9 100644 (file)
@@ -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);
                }
 
This page took 0.027014 seconds and 5 git commands to generate.