70 lines
2.3 KiB
Diff
70 lines
2.3 KiB
Diff
|
From: Dimitri Sivanich <sivanich@sgi.com>
|
||
|
Subject: Expose the irq_desc node as /proc/irq/*/node.
|
||
|
References: bnc#566745, fate#306952
|
||
|
Patch-mainline: not yet
|
||
|
|
||
|
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>
|
||
|
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||
|
Signed-off-by: Rafael J. Wysocki <rjw@suse.de>
|
||
|
---
|
||
|
|
||
|
Documentation/filesystems/proc.txt | 4 ++++
|
||
|
kernel/irq/proc.c | 23 +++++++++++++++++++++++
|
||
|
2 files changed, 27 insertions(+)
|
||
|
|
||
|
--- a/Documentation/filesystems/proc.txt
|
||
|
+++ b/Documentation/filesystems/proc.txt
|
||
|
@@ -566,6 +566,10 @@ The default_smp_affinity mask applies to
|
||
|
IRQs which have not yet been allocated/activated, and hence which lack a
|
||
|
/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
|
||
|
profiler. Default value is ffffffff (all cpus).
|
||
|
|
||
|
--- a/kernel/irq/proc.c
|
||
|
+++ b/kernel/irq/proc.c
|
||
|
@@ -146,6 +146,26 @@ static const struct file_operations defa
|
||
|
.release = single_release,
|
||
|
.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
|
||
|
|
||
|
static int irq_spurious_proc_show(struct seq_file *m, void *v)
|
||
|
@@ -230,6 +250,9 @@ void register_irq_proc(unsigned int irq,
|
||
|
/* create /proc/irq/<irq>/smp_affinity */
|
||
|
proc_create_data("smp_affinity", 0600, desc->dir,
|
||
|
&irq_affinity_proc_fops, (void *)(long)irq);
|
||
|
+
|
||
|
+ proc_create_data("node", 0444, desc->dir,
|
||
|
+ &irq_node_proc_fops, (void *)(long)irq);
|
||
|
#endif
|
||
|
|
||
|
proc_create_data("spurious", 0444, desc->dir,
|