Commit 92d6b71ab906be706f3679353b30a8d2c3831144

Authored by Dimitri Sivanich
Committed by Thomas Gleixner
1 parent 220bf991b0

genirq: Expose irq_desc->node in proc/irq

Expose irq_desc->node as /proc/irq/*/node.

This file provides device hardware locality information for apps
desiring to include hardware locality in irq mapping decisions.

Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Showing 2 changed files with 27 additions and 0 deletions Side-by-side Diff

Documentation/filesystems/proc.txt
... ... @@ -566,6 +566,10 @@
566 566 IRQs which have not yet been allocated/activated, and hence which lack a
567 567 /proc/irq/[0-9]* directory.
568 568  
  569 +The node file on an SMP system shows the node to which the device using the IRQ
  570 +reports itself as being attached. This hardware locality information does not
  571 +include information about any possible driver locality preference.
  572 +
569 573 prof_cpu_mask specifies which CPUs are to be profiled by the system wide
570 574 profiler. Default value is ffffffff (all cpus).
571 575  
... ... @@ -146,6 +146,26 @@
146 146 .release = single_release,
147 147 .write = default_affinity_write,
148 148 };
  149 +
  150 +static int irq_node_proc_show(struct seq_file *m, void *v)
  151 +{
  152 + struct irq_desc *desc = irq_to_desc((long) m->private);
  153 +
  154 + seq_printf(m, "%d\n", desc->node);
  155 + return 0;
  156 +}
  157 +
  158 +static int irq_node_proc_open(struct inode *inode, struct file *file)
  159 +{
  160 + return single_open(file, irq_node_proc_show, PDE(inode)->data);
  161 +}
  162 +
  163 +static const struct file_operations irq_node_proc_fops = {
  164 + .open = irq_node_proc_open,
  165 + .read = seq_read,
  166 + .llseek = seq_lseek,
  167 + .release = single_release,
  168 +};
149 169 #endif
150 170  
151 171 static int irq_spurious_proc_show(struct seq_file *m, void *v)
... ... @@ -230,6 +250,9 @@
230 250 /* create /proc/irq/<irq>/smp_affinity */
231 251 proc_create_data("smp_affinity", 0600, desc->dir,
232 252 &irq_affinity_proc_fops, (void *)(long)irq);
  253 +
  254 + proc_create_data("node", 0444, desc->dir,
  255 + &irq_node_proc_fops, (void *)(long)irq);
233 256 #endif
234 257  
235 258 proc_create_data("spurious", 0444, desc->dir,