diff options
Diffstat (limited to 'arch/x86/oprofile/nmi_int.c')
-rw-r--r-- | arch/x86/oprofile/nmi_int.c | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index cc48d3fde545..3f90289410e6 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -218,8 +218,8 @@ static int nmi_setup(void) | |||
218 | } | 218 | } |
219 | 219 | ||
220 | } | 220 | } |
221 | on_each_cpu(nmi_save_registers, NULL, 0, 1); | 221 | on_each_cpu(nmi_save_registers, NULL, 1); |
222 | on_each_cpu(nmi_cpu_setup, NULL, 0, 1); | 222 | on_each_cpu(nmi_cpu_setup, NULL, 1); |
223 | nmi_enabled = 1; | 223 | nmi_enabled = 1; |
224 | return 0; | 224 | return 0; |
225 | } | 225 | } |
@@ -269,12 +269,13 @@ static void nmi_cpu_shutdown(void *dummy) | |||
269 | 269 | ||
270 | static void nmi_shutdown(void) | 270 | static void nmi_shutdown(void) |
271 | { | 271 | { |
272 | struct op_msrs *msrs = &__get_cpu_var(cpu_msrs); | 272 | struct op_msrs *msrs = &get_cpu_var(cpu_msrs); |
273 | nmi_enabled = 0; | 273 | nmi_enabled = 0; |
274 | on_each_cpu(nmi_cpu_shutdown, NULL, 0, 1); | 274 | on_each_cpu(nmi_cpu_shutdown, NULL, 1); |
275 | unregister_die_notifier(&profile_exceptions_nb); | 275 | unregister_die_notifier(&profile_exceptions_nb); |
276 | model->shutdown(msrs); | 276 | model->shutdown(msrs); |
277 | free_msrs(); | 277 | free_msrs(); |
278 | put_cpu_var(cpu_msrs); | ||
278 | } | 279 | } |
279 | 280 | ||
280 | static void nmi_cpu_start(void *dummy) | 281 | static void nmi_cpu_start(void *dummy) |
@@ -285,7 +286,7 @@ static void nmi_cpu_start(void *dummy) | |||
285 | 286 | ||
286 | static int nmi_start(void) | 287 | static int nmi_start(void) |
287 | { | 288 | { |
288 | on_each_cpu(nmi_cpu_start, NULL, 0, 1); | 289 | on_each_cpu(nmi_cpu_start, NULL, 1); |
289 | return 0; | 290 | return 0; |
290 | } | 291 | } |
291 | 292 | ||
@@ -297,7 +298,7 @@ static void nmi_cpu_stop(void *dummy) | |||
297 | 298 | ||
298 | static void nmi_stop(void) | 299 | static void nmi_stop(void) |
299 | { | 300 | { |
300 | on_each_cpu(nmi_cpu_stop, NULL, 0, 1); | 301 | on_each_cpu(nmi_cpu_stop, NULL, 1); |
301 | } | 302 | } |
302 | 303 | ||
303 | struct op_counter_config counter_config[OP_MAX_COUNTER]; | 304 | struct op_counter_config counter_config[OP_MAX_COUNTER]; |
@@ -368,20 +369,34 @@ static int __init ppro_init(char **cpu_type) | |||
368 | { | 369 | { |
369 | __u8 cpu_model = boot_cpu_data.x86_model; | 370 | __u8 cpu_model = boot_cpu_data.x86_model; |
370 | 371 | ||
371 | if (cpu_model == 14) | 372 | switch (cpu_model) { |
373 | case 0 ... 2: | ||
374 | *cpu_type = "i386/ppro"; | ||
375 | break; | ||
376 | case 3 ... 5: | ||
377 | *cpu_type = "i386/pii"; | ||
378 | break; | ||
379 | case 6 ... 8: | ||
380 | *cpu_type = "i386/piii"; | ||
381 | break; | ||
382 | case 9: | ||
383 | *cpu_type = "i386/p6_mobile"; | ||
384 | break; | ||
385 | case 10 ... 13: | ||
386 | *cpu_type = "i386/p6"; | ||
387 | break; | ||
388 | case 14: | ||
372 | *cpu_type = "i386/core"; | 389 | *cpu_type = "i386/core"; |
373 | else if (cpu_model == 15 || cpu_model == 23) | 390 | break; |
391 | case 15: case 23: | ||
392 | *cpu_type = "i386/core_2"; | ||
393 | break; | ||
394 | case 26: | ||
374 | *cpu_type = "i386/core_2"; | 395 | *cpu_type = "i386/core_2"; |
375 | else if (cpu_model > 0xd) | 396 | break; |
397 | default: | ||
398 | /* Unknown */ | ||
376 | return 0; | 399 | return 0; |
377 | else if (cpu_model == 9) { | ||
378 | *cpu_type = "i386/p6_mobile"; | ||
379 | } else if (cpu_model > 5) { | ||
380 | *cpu_type = "i386/piii"; | ||
381 | } else if (cpu_model > 2) { | ||
382 | *cpu_type = "i386/pii"; | ||
383 | } else { | ||
384 | *cpu_type = "i386/ppro"; | ||
385 | } | 400 | } |
386 | 401 | ||
387 | model = &op_ppro_spec; | 402 | model = &op_ppro_spec; |