diff options
Diffstat (limited to 'kernel/irq/proc.c')
-rw-r--r-- | kernel/irq/proc.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 692363dd591f..0832145fea97 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c | |||
@@ -136,7 +136,7 @@ out: | |||
136 | 136 | ||
137 | static int default_affinity_open(struct inode *inode, struct file *file) | 137 | static int default_affinity_open(struct inode *inode, struct file *file) |
138 | { | 138 | { |
139 | return single_open(file, default_affinity_show, NULL); | 139 | return single_open(file, default_affinity_show, PDE(inode)->data); |
140 | } | 140 | } |
141 | 141 | ||
142 | static const struct file_operations default_affinity_proc_fops = { | 142 | static const struct file_operations default_affinity_proc_fops = { |
@@ -148,18 +148,28 @@ static const struct file_operations default_affinity_proc_fops = { | |||
148 | }; | 148 | }; |
149 | #endif | 149 | #endif |
150 | 150 | ||
151 | static int irq_spurious_read(char *page, char **start, off_t off, | 151 | static int irq_spurious_proc_show(struct seq_file *m, void *v) |
152 | int count, int *eof, void *data) | ||
153 | { | 152 | { |
154 | struct irq_desc *desc = irq_to_desc((long) data); | 153 | struct irq_desc *desc = irq_to_desc((long) m->private); |
155 | return sprintf(page, "count %u\n" | 154 | |
156 | "unhandled %u\n" | 155 | seq_printf(m, "count %u\n" "unhandled %u\n" "last_unhandled %u ms\n", |
157 | "last_unhandled %u ms\n", | 156 | desc->irq_count, desc->irqs_unhandled, |
158 | desc->irq_count, | 157 | jiffies_to_msecs(desc->last_unhandled)); |
159 | desc->irqs_unhandled, | 158 | return 0; |
160 | jiffies_to_msecs(desc->last_unhandled)); | 159 | } |
160 | |||
161 | static int irq_spurious_proc_open(struct inode *inode, struct file *file) | ||
162 | { | ||
163 | return single_open(file, irq_spurious_proc_show, NULL); | ||
161 | } | 164 | } |
162 | 165 | ||
166 | static const struct file_operations irq_spurious_proc_fops = { | ||
167 | .open = irq_spurious_proc_open, | ||
168 | .read = seq_read, | ||
169 | .llseek = seq_lseek, | ||
170 | .release = single_release, | ||
171 | }; | ||
172 | |||
163 | #define MAX_NAMELEN 128 | 173 | #define MAX_NAMELEN 128 |
164 | 174 | ||
165 | static int name_unique(unsigned int irq, struct irqaction *new_action) | 175 | static int name_unique(unsigned int irq, struct irqaction *new_action) |
@@ -204,7 +214,6 @@ void register_handler_proc(unsigned int irq, struct irqaction *action) | |||
204 | void register_irq_proc(unsigned int irq, struct irq_desc *desc) | 214 | void register_irq_proc(unsigned int irq, struct irq_desc *desc) |
205 | { | 215 | { |
206 | char name [MAX_NAMELEN]; | 216 | char name [MAX_NAMELEN]; |
207 | struct proc_dir_entry *entry; | ||
208 | 217 | ||
209 | if (!root_irq_dir || (desc->chip == &no_irq_chip) || desc->dir) | 218 | if (!root_irq_dir || (desc->chip == &no_irq_chip) || desc->dir) |
210 | return; | 219 | return; |
@@ -214,6 +223,8 @@ void register_irq_proc(unsigned int irq, struct irq_desc *desc) | |||
214 | 223 | ||
215 | /* create /proc/irq/1234 */ | 224 | /* create /proc/irq/1234 */ |
216 | desc->dir = proc_mkdir(name, root_irq_dir); | 225 | desc->dir = proc_mkdir(name, root_irq_dir); |
226 | if (!desc->dir) | ||
227 | return; | ||
217 | 228 | ||
218 | #ifdef CONFIG_SMP | 229 | #ifdef CONFIG_SMP |
219 | /* create /proc/irq/<irq>/smp_affinity */ | 230 | /* create /proc/irq/<irq>/smp_affinity */ |
@@ -221,11 +232,8 @@ void register_irq_proc(unsigned int irq, struct irq_desc *desc) | |||
221 | &irq_affinity_proc_fops, (void *)(long)irq); | 232 | &irq_affinity_proc_fops, (void *)(long)irq); |
222 | #endif | 233 | #endif |
223 | 234 | ||
224 | entry = create_proc_entry("spurious", 0444, desc->dir); | 235 | proc_create_data("spurious", 0444, desc->dir, |
225 | if (entry) { | 236 | &irq_spurious_proc_fops, (void *)(long)irq); |
226 | entry->data = (void *)(long)irq; | ||
227 | entry->read_proc = irq_spurious_read; | ||
228 | } | ||
229 | } | 237 | } |
230 | 238 | ||
231 | #undef MAX_NAMELEN | 239 | #undef MAX_NAMELEN |