Messages in this thread Patch in this message | | | Date | Sun, 31 Jul 2011 18:50:08 +0200 | From | Maarten Lankhorst <> | Subject | [PATCH] oprofile, x86: Move memory allocation to init |
| |
ppro_setup_ctrs is called on all cpu's, while init is only called once.
Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
--- Fixes oprofile on 3.0 rt6.
diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c index 94b7450..53a84fc 100644 --- a/arch/x86/oprofile/op_model_ppro.c +++ b/arch/x86/oprofile/op_model_ppro.c @@ -79,13 +79,6 @@ static void ppro_setup_ctrs(struct op_x86_model_spec const *model, u64 val; int i; - if (!reset_value) { - reset_value = kzalloc(sizeof(reset_value[0]) * num_counters, - GFP_ATOMIC); - if (!reset_value) - return; - } - if (cpu_has_arch_perfmon) { union cpuid10_eax eax; eax.full = cpuid_eax(0xa); @@ -228,7 +221,7 @@ struct op_x86_model_spec op_ppro_spec = { * the specific CPU. */ -static void arch_perfmon_setup_counters(void) +static int arch_perfmon_setup_counters(void) { union cpuid10_eax eax; @@ -246,12 +239,17 @@ static void arch_perfmon_setup_counters(void) op_arch_perfmon_spec.num_counters = num_counters; op_arch_perfmon_spec.num_controls = num_counters; + + reset_value = kzalloc(sizeof(reset_value[0]) * num_counters, + GFP_KERNEL); + if (!reset_value) + return -ENOMEM; + return 0; } static int arch_perfmon_init(struct oprofile_operations *ignore) { - arch_perfmon_setup_counters(); - return 0; + return arch_perfmon_setup_counters(); } struct op_x86_model_spec op_arch_perfmon_spec = {
| |