]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
genirq/debugfs: Print irqdomain flags as human-readable strings
authorJinjie Ruan <ruanjinjie@huawei.com>
Wed, 29 May 2024 09:16:28 +0000 (09:16 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 3 Jun 2024 10:24:51 +0000 (12:24 +0200)
Improve the readability of irqdomain debugging information in debugfs by
printing the flags field of domain files as human-readable strings instead
of a raw bitmask, which aligned with the existing style used for irqchip
flags in the irq debug files.

Before:
#cat :cpus:cpu@0:interrupt-controller
name:   :cpus:cpu@0:interrupt-controller
 size:   0
 mapped: 2
 flags:  0x00000003

After:
#cat :cpus:cpu@0:interrupt-controller
name:   :cpus:cpu@0:interrupt-controller
 size:   0
 mapped: 3
 flags:  0x00000003
            IRQ_DOMAIN_FLAG_HIERARCHY
            IRQ_DOMAIN_NAME_ALLOCATED

Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240529091628.3666379-1-ruanjinjie@huawei.com
kernel/irq/debugfs.c
kernel/irq/internals.h
kernel/irq/irqdomain.c

index aae0402507ed746a54650d7b9ddc356a4efcc0fb..c6ffb97966bed4b91e581b086cd3ac35c3987f26 100644 (file)
@@ -9,14 +9,8 @@
 
 static struct dentry *irq_dir;
 
-struct irq_bit_descr {
-       unsigned int    mask;
-       char            *name;
-};
-#define BIT_MASK_DESCR(m)      { .mask = m, .name = #m }
-
-static void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int state,
-                               const struct irq_bit_descr *sd, int size)
+void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int state,
+                        const struct irq_bit_descr *sd, int size)
 {
        int i;
 
index ed28059e984980ff756a410adb452c8a00b948e5..fe0272cd84a51a24d8f295148a5670020829a2fa 100644 (file)
@@ -501,6 +501,16 @@ static inline struct irq_data *irqd_get_parent_data(struct irq_data *irqd)
 #ifdef CONFIG_GENERIC_IRQ_DEBUGFS
 #include <linux/debugfs.h>
 
+struct irq_bit_descr {
+       unsigned int    mask;
+       char            *name;
+};
+
+#define BIT_MASK_DESCR(m)      { .mask = m, .name = #m }
+
+void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int state,
+                        const struct irq_bit_descr *sd, int size);
+
 void irq_add_debugfs_entry(unsigned int irq, struct irq_desc *desc);
 static inline void irq_remove_debugfs_entry(struct irq_desc *desc)
 {
index aadc8891cc166f40632556f4903b35c940b12f33..d937231a0865d6d9a4ca72564a936b1872e767d9 100644 (file)
@@ -1932,13 +1932,26 @@ static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq
 
 static struct dentry *domain_dir;
 
-static void
-irq_domain_debug_show_one(struct seq_file *m, struct irq_domain *d, int ind)
+static const struct irq_bit_descr irqdomain_flags[] = {
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_HIERARCHY),
+       BIT_MASK_DESCR(IRQ_DOMAIN_NAME_ALLOCATED),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_IPI_PER_CPU),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_IPI_SINGLE),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_ISOLATED_MSI),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_NO_MAP),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI_PARENT),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI_DEVICE),
+       BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_NONCORE),
+};
+
+static void irq_domain_debug_show_one(struct seq_file *m, struct irq_domain *d, int ind)
 {
        seq_printf(m, "%*sname:   %s\n", ind, "", d->name);
        seq_printf(m, "%*ssize:   %u\n", ind + 1, "", d->revmap_size);
        seq_printf(m, "%*smapped: %u\n", ind + 1, "", d->mapcount);
        seq_printf(m, "%*sflags:  0x%08x\n", ind +1 , "", d->flags);
+       irq_debug_show_bits(m, ind, d->flags, irqdomain_flags, ARRAY_SIZE(irqdomain_flags));
        if (d->ops && d->ops->debug_show)
                d->ops->debug_show(m, d, NULL, ind + 1);
 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY