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 |
