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>
This commit is contained in:
Dimitri Sivanich 2010-03-11 14:08:56 -08:00 committed by Thomas Gleixner
parent 220bf991b0
commit 92d6b71ab9
2 changed files with 27 additions and 0 deletions

View File

@ -566,6 +566,10 @@ The default_smp_affinity mask applies to all non-active IRQs, which are the
IRQs which have not yet been allocated/activated, and hence which lack a IRQs which have not yet been allocated/activated, and hence which lack a
/proc/irq/[0-9]* directory. /proc/irq/[0-9]* directory.
The node file on an SMP system shows the node to which the device using the IRQ
reports itself as being attached. This hardware locality information does not
include information about any possible driver locality preference.
prof_cpu_mask specifies which CPUs are to be profiled by the system wide prof_cpu_mask specifies which CPUs are to be profiled by the system wide
profiler. Default value is ffffffff (all cpus). profiler. Default value is ffffffff (all cpus).

View File

@ -146,6 +146,26 @@ static const struct file_operations default_affinity_proc_fops = {
.release = single_release, .release = single_release,
.write = default_affinity_write, .write = default_affinity_write,
}; };
static int irq_node_proc_show(struct seq_file *m, void *v)
{
struct irq_desc *desc = irq_to_desc((long) m->private);
seq_printf(m, "%d\n", desc->node);
return 0;
}
static int irq_node_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, irq_node_proc_show, PDE(inode)->data);
}
static const struct file_operations irq_node_proc_fops = {
.open = irq_node_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
#endif #endif
static int irq_spurious_proc_show(struct seq_file *m, void *v) static 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)
/* create /proc/irq/<irq>/smp_affinity */ /* create /proc/irq/<irq>/smp_affinity */
proc_create_data("smp_affinity", 0600, desc->dir, proc_create_data("smp_affinity", 0600, desc->dir,
&irq_affinity_proc_fops, (void *)(long)irq); &irq_affinity_proc_fops, (void *)(long)irq);
proc_create_data("node", 0444, desc->dir,
&irq_node_proc_fops, (void *)(long)irq);
#endif #endif
proc_create_data("spurious", 0444, desc->dir, proc_create_data("spurious", 0444, desc->dir,