aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri Sivanich <sivanich@sgi.com>2010-03-11 17:08:56 -0500
committerThomas Gleixner <tglx@linutronix.de>2010-03-24 09:10:03 -0400
commit92d6b71ab906be706f3679353b30a8d2c3831144 (patch)
tree2b82cc7f065f947f4a6430e0de3bc63a4870907d
parent220bf991b0366cc50a94feede3d7341fa5710ee4 (diff)
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>
-rw-r--r--Documentation/filesystems/proc.txt4
-rw-r--r--kernel/irq/proc.c23
2 files changed, 27 insertions, 0 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index a4f30faa4f1f..6507d2ae5236 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -566,6 +566,10 @@ The default_smp_affinity mask applies to all non-active IRQs, which are the
566IRQs which have not yet been allocated/activated, and hence which lack a 566IRQs which have not yet been allocated/activated, and hence which lack a
567/proc/irq/[0-9]* directory. 567/proc/irq/[0-9]* directory.
568 568
569The node file on an SMP system shows the node to which the device using the IRQ
570reports itself as being attached. This hardware locality information does not
571include information about any possible driver locality preference.
572
569prof_cpu_mask specifies which CPUs are to be profiled by the system wide 573prof_cpu_mask specifies which CPUs are to be profiled by the system wide
570profiler. Default value is ffffffff (all cpus). 574profiler. Default value is ffffffff (all cpus).
571 575
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c
index 6f50eccc79c0..e346e08f5c34 100644
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -146,6 +146,26 @@ static const struct file_operations default_affinity_proc_fops = {
146 .release = single_release, 146 .release = single_release,
147 .write = default_affinity_write, 147 .write = default_affinity_write,
148}; 148};
149
150static 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
158static 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
163static 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#endif 169#endif
150 170
151static int irq_spurious_proc_show(struct seq_file *m, void *v) 171static int irq_spurious_proc_show(struct seq_file *m, void *v)
@@ -230,6 +250,9 @@ void register_irq_proc(unsigned int irq, struct irq_desc *desc)
230 /* create /proc/irq/<irq>/smp_affinity */ 250 /* create /proc/irq/<irq>/smp_affinity */
231 proc_create_data("smp_affinity", 0600, desc->dir, 251 proc_create_data("smp_affinity", 0600, desc->dir,
232 &irq_affinity_proc_fops, (void *)(long)irq); 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#endif 256#endif
234 257
235 proc_create_data("spurious", 0444, desc->dir, 258 proc_create_data("spurious", 0444, desc->dir,