diff options
-rw-r--r-- | include/linux/irq.h | 5 | ||||
-rw-r--r-- | kernel/irq/proc.c | 20 |
2 files changed, 12 insertions, 13 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h index c13f23dee286..1022c5d42546 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -61,6 +61,8 @@ struct hw_interrupt_type { typedef struct hw_interrupt_type hw_irq_controller; +struct proc_dir_entry; + /* * This is the "IRQ descriptor", which contains various information * about the irq, including what kind of hardware handling it has, @@ -83,6 +85,9 @@ struct irq_desc { #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE) unsigned int move_irq; /* need to re-target IRQ dest */ #endif +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *dir; +#endif } ____cacheline_aligned; extern struct irq_desc irq_desc[NR_IRQS]; diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 847b98a611e0..f60b85b61e8b 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -12,15 +12,10 @@ #include "internals.h" -static struct proc_dir_entry *root_irq_dir, *irq_dir[NR_IRQS]; +static struct proc_dir_entry *root_irq_dir; #ifdef CONFIG_SMP -/* - * The /proc/irq/<irq>/smp_affinity values: - */ -static struct proc_dir_entry *smp_affinity_entry[NR_IRQS]; - #ifdef CONFIG_GENERIC_PENDING_IRQ void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) { @@ -102,7 +97,7 @@ void register_handler_proc(unsigned int irq, struct irqaction *action) { char name [MAX_NAMELEN]; - if (!irq_dir[irq] || action->dir || !action->name || + if (!irq_desc[irq].dir || action->dir || !action->name || !name_unique(irq, action)) return; @@ -110,7 +105,7 @@ void register_handler_proc(unsigned int irq, struct irqaction *action) snprintf(name, MAX_NAMELEN, "%s", action->name); /* create /proc/irq/1234/handler/ */ - action->dir = proc_mkdir(name, irq_dir[irq]); + action->dir = proc_mkdir(name, irq_desc[irq].dir); } #undef MAX_NAMELEN @@ -123,21 +118,21 @@ void register_irq_proc(unsigned int irq) if (!root_irq_dir || (irq_desc[irq].chip == &no_irq_type) || - irq_dir[irq]) + irq_desc[irq].dir) return; memset(name, 0, MAX_NAMELEN); sprintf(name, "%d", irq); /* create /proc/irq/1234 */ - irq_dir[irq] = proc_mkdir(name, root_irq_dir); + irq_desc[irq].dir = proc_mkdir(name, root_irq_dir); #ifdef CONFIG_SMP { struct proc_dir_entry *entry; /* create /proc/irq/<irq>/smp_affinity */ - entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]); + entry = create_proc_entry("smp_affinity", 0600, irq_desc[irq].dir); if (entry) { entry->nlink = 1; @@ -145,7 +140,6 @@ void register_irq_proc(unsigned int irq) entry->read_proc = irq_affinity_read_proc; entry->write_proc = irq_affinity_write_proc; } - smp_affinity_entry[irq] = entry; } #endif } @@ -155,7 +149,7 @@ void register_irq_proc(unsigned int irq) void unregister_handler_proc(unsigned int irq, struct irqaction *action) { if (action->dir) - remove_proc_entry(action->dir->name, irq_dir[irq]); + remove_proc_entry(action->dir->name, irq_desc[irq].dir); } void init_irq_proc(void) |