Commit 92d6b71ab906be706f3679353b30a8d2c3831144
Committed by
Thomas Gleixner
1 parent
220bf991b0
Exists in
master
and in
7 other branches
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 |
kernel/irq/proc.c
... | ... | @@ -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, |