Commit 1400ea86 authored by Grant Likely's avatar Grant Likely

irqdomain: Beef up debugfs output

This patch increases the amount of output produced by the
irq_domain_mapping debugfs file by first listing all of the registered
irq domains at the beginning of the output, and then by including all
mapped IRQs in the output, not just the active ones. It is very useful
when debugging irqdomain issues to be able to see the entire list of
mapped irqs, not just the ones that happen to be connected to devices.
Signed-off-by: default avatarGrant Likely <grant.likely@linaro.org>
parent fa40f377
...@@ -596,12 +596,29 @@ static int virq_debug_show(struct seq_file *m, void *private) ...@@ -596,12 +596,29 @@ static int virq_debug_show(struct seq_file *m, void *private)
{ {
unsigned long flags; unsigned long flags;
struct irq_desc *desc; struct irq_desc *desc;
void *data; struct irq_domain *domain;
struct radix_tree_iter iter;
void *data, **slot;
int i; 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", "chip name", (int)(2 * sizeof(void *) + 2), "chip data",
"domain name"); "active", "type", "domain");
for (i = 1; i < nr_irqs; i++) { for (i = 1; i < nr_irqs; i++) {
desc = irq_to_desc(i); desc = irq_to_desc(i);
...@@ -609,12 +626,15 @@ static int virq_debug_show(struct seq_file *m, void *private) ...@@ -609,12 +626,15 @@ static int virq_debug_show(struct seq_file *m, void *private)
continue; continue;
raw_spin_lock_irqsave(&desc->lock, flags); raw_spin_lock_irqsave(&desc->lock, flags);
domain = desc->irq_data.domain;
if (desc->action && desc->action->handler) { if (domain) {
struct irq_chip *chip; struct irq_chip *chip;
int hwirq = desc->irq_data.hwirq;
bool direct;
seq_printf(m, "%5d ", i); 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); chip = irq_desc_get_chip(desc);
seq_printf(m, "%-15s ", (chip && chip->name) ? chip->name : "none"); 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) ...@@ -622,6 +642,11 @@ static int virq_debug_show(struct seq_file *m, void *private)
data = irq_desc_get_chip_data(desc); data = irq_desc_get_chip_data(desc);
seq_printf(m, data ? "0x%p " : " %p ", data); 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); seq_printf(m, "%s\n", desc->irq_data.domain->name);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment