diff options
Diffstat (limited to 'drivers/char/misc.c')
-rw-r--r-- | drivers/char/misc.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 4e6fb9651a16..71c8cd7fa15f 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c | |||
@@ -67,25 +67,13 @@ extern int pmu_device_init(void); | |||
67 | #ifdef CONFIG_PROC_FS | 67 | #ifdef CONFIG_PROC_FS |
68 | static void *misc_seq_start(struct seq_file *seq, loff_t *pos) | 68 | static void *misc_seq_start(struct seq_file *seq, loff_t *pos) |
69 | { | 69 | { |
70 | struct miscdevice *p; | ||
71 | loff_t off = 0; | ||
72 | |||
73 | mutex_lock(&misc_mtx); | 70 | mutex_lock(&misc_mtx); |
74 | list_for_each_entry(p, &misc_list, list) { | 71 | return seq_list_start(&misc_list, *pos); |
75 | if (*pos == off++) | ||
76 | return p; | ||
77 | } | ||
78 | return NULL; | ||
79 | } | 72 | } |
80 | 73 | ||
81 | static void *misc_seq_next(struct seq_file *seq, void *v, loff_t *pos) | 74 | static void *misc_seq_next(struct seq_file *seq, void *v, loff_t *pos) |
82 | { | 75 | { |
83 | struct list_head *n = ((struct miscdevice *)v)->list.next; | 76 | return seq_list_next(v, &misc_list, pos); |
84 | |||
85 | ++*pos; | ||
86 | |||
87 | return (n != &misc_list) ? list_entry(n, struct miscdevice, list) | ||
88 | : NULL; | ||
89 | } | 77 | } |
90 | 78 | ||
91 | static void misc_seq_stop(struct seq_file *seq, void *v) | 79 | static void misc_seq_stop(struct seq_file *seq, void *v) |
@@ -95,7 +83,7 @@ static void misc_seq_stop(struct seq_file *seq, void *v) | |||
95 | 83 | ||
96 | static int misc_seq_show(struct seq_file *seq, void *v) | 84 | static int misc_seq_show(struct seq_file *seq, void *v) |
97 | { | 85 | { |
98 | const struct miscdevice *p = v; | 86 | const struct miscdevice *p = list_entry(v, struct miscdevice, list); |
99 | 87 | ||
100 | seq_printf(seq, "%3i %s\n", p->minor, p->name ? p->name : ""); | 88 | seq_printf(seq, "%3i %s\n", p->minor, p->name ? p->name : ""); |
101 | return 0; | 89 | return 0; |