diff options
Diffstat (limited to 'arch/x86/kernel/cpu/proc.c')
-rw-r--r-- | arch/x86/kernel/cpu/proc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c index 879a0f789b1..2d42b414b77 100644 --- a/arch/x86/kernel/cpu/proc.c +++ b/arch/x86/kernel/cpu/proc.c | |||
@@ -85,12 +85,13 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
85 | /* nothing */ | 85 | /* nothing */ |
86 | }; | 86 | }; |
87 | struct cpuinfo_x86 *c = v; | 87 | struct cpuinfo_x86 *c = v; |
88 | int i, n = c - cpu_data; | 88 | int i, n = 0; |
89 | int fpu_exception; | 89 | int fpu_exception; |
90 | 90 | ||
91 | #ifdef CONFIG_SMP | 91 | #ifdef CONFIG_SMP |
92 | if (!cpu_online(n)) | 92 | if (!cpu_online(n)) |
93 | return 0; | 93 | return 0; |
94 | n = c->cpu_index; | ||
94 | #endif | 95 | #endif |
95 | seq_printf(m, "processor\t: %d\n" | 96 | seq_printf(m, "processor\t: %d\n" |
96 | "vendor_id\t: %s\n" | 97 | "vendor_id\t: %s\n" |
@@ -175,11 +176,15 @@ static int show_cpuinfo(struct seq_file *m, void *v) | |||
175 | 176 | ||
176 | static void *c_start(struct seq_file *m, loff_t *pos) | 177 | static void *c_start(struct seq_file *m, loff_t *pos) |
177 | { | 178 | { |
178 | return *pos < NR_CPUS ? cpu_data + *pos : NULL; | 179 | if (*pos == 0) /* just in case, cpu 0 is not the first */ |
180 | *pos = first_cpu(cpu_possible_map); | ||
181 | if ((*pos) < NR_CPUS && cpu_possible(*pos)) | ||
182 | return &cpu_data(*pos); | ||
183 | return NULL; | ||
179 | } | 184 | } |
180 | static void *c_next(struct seq_file *m, void *v, loff_t *pos) | 185 | static void *c_next(struct seq_file *m, void *v, loff_t *pos) |
181 | { | 186 | { |
182 | ++*pos; | 187 | *pos = next_cpu(*pos, cpu_possible_map); |
183 | return c_start(m, pos); | 188 | return c_start(m, pos); |
184 | } | 189 | } |
185 | static void c_stop(struct seq_file *m, void *v) | 190 | static void c_stop(struct seq_file *m, void *v) |