diff options
Diffstat (limited to 'kernel/irq/proc.c')
-rw-r--r-- | kernel/irq/proc.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index afacd6f585fa..607c7809ad01 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c | |||
@@ -12,15 +12,10 @@ | |||
12 | 12 | ||
13 | #include "internals.h" | 13 | #include "internals.h" |
14 | 14 | ||
15 | static struct proc_dir_entry *root_irq_dir, *irq_dir[NR_IRQS]; | 15 | static struct proc_dir_entry *root_irq_dir; |
16 | 16 | ||
17 | #ifdef CONFIG_SMP | 17 | #ifdef CONFIG_SMP |
18 | 18 | ||
19 | /* | ||
20 | * The /proc/irq/<irq>/smp_affinity values: | ||
21 | */ | ||
22 | static struct proc_dir_entry *smp_affinity_entry[NR_IRQS]; | ||
23 | |||
24 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 19 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
25 | void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) | 20 | void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) |
26 | { | 21 | { |
@@ -36,15 +31,15 @@ void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) | |||
36 | void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) | 31 | void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val) |
37 | { | 32 | { |
38 | set_balance_irq_affinity(irq, mask_val); | 33 | set_balance_irq_affinity(irq, mask_val); |
39 | irq_affinity[irq] = mask_val; | 34 | irq_desc[irq].affinity = mask_val; |
40 | irq_desc[irq].handler->set_affinity(irq, mask_val); | 35 | irq_desc[irq].chip->set_affinity(irq, mask_val); |
41 | } | 36 | } |
42 | #endif | 37 | #endif |
43 | 38 | ||
44 | static int irq_affinity_read_proc(char *page, char **start, off_t off, | 39 | static int irq_affinity_read_proc(char *page, char **start, off_t off, |
45 | int count, int *eof, void *data) | 40 | int count, int *eof, void *data) |
46 | { | 41 | { |
47 | int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]); | 42 | int len = cpumask_scnprintf(page, count, irq_desc[(long)data].affinity); |
48 | 43 | ||
49 | if (count - len < 2) | 44 | if (count - len < 2) |
50 | return -EINVAL; | 45 | return -EINVAL; |
@@ -59,7 +54,7 @@ static int irq_affinity_write_proc(struct file *file, const char __user *buffer, | |||
59 | unsigned int irq = (int)(long)data, full_count = count, err; | 54 | unsigned int irq = (int)(long)data, full_count = count, err; |
60 | cpumask_t new_value, tmp; | 55 | cpumask_t new_value, tmp; |
61 | 56 | ||
62 | if (!irq_desc[irq].handler->set_affinity || no_irq_affinity) | 57 | if (!irq_desc[irq].chip->set_affinity || no_irq_affinity) |
63 | return -EIO; | 58 | return -EIO; |
64 | 59 | ||
65 | err = cpumask_parse(buffer, count, new_value); | 60 | err = cpumask_parse(buffer, count, new_value); |
@@ -102,7 +97,7 @@ void register_handler_proc(unsigned int irq, struct irqaction *action) | |||
102 | { | 97 | { |
103 | char name [MAX_NAMELEN]; | 98 | char name [MAX_NAMELEN]; |
104 | 99 | ||
105 | if (!irq_dir[irq] || action->dir || !action->name || | 100 | if (!irq_desc[irq].dir || action->dir || !action->name || |
106 | !name_unique(irq, action)) | 101 | !name_unique(irq, action)) |
107 | return; | 102 | return; |
108 | 103 | ||
@@ -110,7 +105,7 @@ void register_handler_proc(unsigned int irq, struct irqaction *action) | |||
110 | snprintf(name, MAX_NAMELEN, "%s", action->name); | 105 | snprintf(name, MAX_NAMELEN, "%s", action->name); |
111 | 106 | ||
112 | /* create /proc/irq/1234/handler/ */ | 107 | /* create /proc/irq/1234/handler/ */ |
113 | action->dir = proc_mkdir(name, irq_dir[irq]); | 108 | action->dir = proc_mkdir(name, irq_desc[irq].dir); |
114 | } | 109 | } |
115 | 110 | ||
116 | #undef MAX_NAMELEN | 111 | #undef MAX_NAMELEN |
@@ -122,22 +117,22 @@ void register_irq_proc(unsigned int irq) | |||
122 | char name [MAX_NAMELEN]; | 117 | char name [MAX_NAMELEN]; |
123 | 118 | ||
124 | if (!root_irq_dir || | 119 | if (!root_irq_dir || |
125 | (irq_desc[irq].handler == &no_irq_type) || | 120 | (irq_desc[irq].chip == &no_irq_chip) || |
126 | irq_dir[irq]) | 121 | irq_desc[irq].dir) |
127 | return; | 122 | return; |
128 | 123 | ||
129 | memset(name, 0, MAX_NAMELEN); | 124 | memset(name, 0, MAX_NAMELEN); |
130 | sprintf(name, "%d", irq); | 125 | sprintf(name, "%d", irq); |
131 | 126 | ||
132 | /* create /proc/irq/1234 */ | 127 | /* create /proc/irq/1234 */ |
133 | irq_dir[irq] = proc_mkdir(name, root_irq_dir); | 128 | irq_desc[irq].dir = proc_mkdir(name, root_irq_dir); |
134 | 129 | ||
135 | #ifdef CONFIG_SMP | 130 | #ifdef CONFIG_SMP |
136 | { | 131 | { |
137 | struct proc_dir_entry *entry; | 132 | struct proc_dir_entry *entry; |
138 | 133 | ||
139 | /* create /proc/irq/<irq>/smp_affinity */ | 134 | /* create /proc/irq/<irq>/smp_affinity */ |
140 | entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]); | 135 | entry = create_proc_entry("smp_affinity", 0600, irq_desc[irq].dir); |
141 | 136 | ||
142 | if (entry) { | 137 | if (entry) { |
143 | entry->nlink = 1; | 138 | entry->nlink = 1; |
@@ -145,7 +140,6 @@ void register_irq_proc(unsigned int irq) | |||
145 | entry->read_proc = irq_affinity_read_proc; | 140 | entry->read_proc = irq_affinity_read_proc; |
146 | entry->write_proc = irq_affinity_write_proc; | 141 | entry->write_proc = irq_affinity_write_proc; |
147 | } | 142 | } |
148 | smp_affinity_entry[irq] = entry; | ||
149 | } | 143 | } |
150 | #endif | 144 | #endif |
151 | } | 145 | } |
@@ -155,7 +149,7 @@ void register_irq_proc(unsigned int irq) | |||
155 | void unregister_handler_proc(unsigned int irq, struct irqaction *action) | 149 | void unregister_handler_proc(unsigned int irq, struct irqaction *action) |
156 | { | 150 | { |
157 | if (action->dir) | 151 | if (action->dir) |
158 | remove_proc_entry(action->dir->name, irq_dir[irq]); | 152 | remove_proc_entry(action->dir->name, irq_desc[irq].dir); |
159 | } | 153 | } |
160 | 154 | ||
161 | void init_irq_proc(void) | 155 | void init_irq_proc(void) |