From: Keir Fraser Date: Mon, 22 Sep 2008 14:56:12 +0000 (+0100) Subject: x86: fix powernow X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14101^2~38 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8d71a294c15ab64df95b48246d63b5060635f394;p=xen.git x86: fix powernow ... by allocating the necessary cpufreq_policy structures. Signed-off-by: Jan Beulich --- diff --git a/xen/arch/x86/acpi/cpufreq/powernow.c b/xen/arch/x86/acpi/cpufreq/powernow.c index accf120f11..9d9897be61 100644 --- a/xen/arch/x86/acpi/cpufreq/powernow.c +++ b/xen/arch/x86/acpi/cpufreq/powernow.c @@ -283,9 +283,27 @@ int powernow_cpufreq_init(void) /* setup cpufreq infrastructure */ for_each_online_cpu(i) { - cpufreq_cpu_policy[i]->cpu = i; - - ret = powernow_cpufreq_cpu_init(cpufreq_cpu_policy[i]); + struct cpufreq_policy *policy = cpufreq_cpu_policy[i]; + + if (!policy) { + unsigned int firstcpu; + + firstcpu = first_cpu(processor_pminfo[i]->perf.shared_cpu_map); + if (i == firstcpu) { + policy = xmalloc(struct cpufreq_policy); + if (!policy) { + ret = -ENOMEM; + goto cpufreq_init_out; + } + memset(policy, 0, sizeof(struct cpufreq_policy)); + policy->cpu = i; + } else + policy = cpufreq_cpu_policy[firstcpu]; + cpu_set(i, policy->cpus); + cpufreq_cpu_policy[i] = policy; + } + + ret = powernow_cpufreq_cpu_init(policy); if (ret) goto cpufreq_init_out; }