From: Keir Fraser Date: Tue, 16 Sep 2008 14:54:17 +0000 (+0100) Subject: x86: also fix powernow's dom_mask X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14101^2~62 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=578f44c3e24c3f728044c24fc1b4e719166d6ba4;p=xen.git x86: also fix powernow's dom_mask Just like for the Intel/ACPI cpufreq code, powernow's dom_mask also must not be confined to the number of CPUs in the system. Signed-off-by: Jan Beulich --- diff --git a/xen/arch/x86/acpi/cpufreq/powernow.c b/xen/arch/x86/acpi/cpufreq/powernow.c index 9c21d038c1..68f50a9ab6 100644 --- a/xen/arch/x86/acpi/cpufreq/powernow.c +++ b/xen/arch/x86/acpi/cpufreq/powernow.c @@ -241,9 +241,8 @@ int powernow_cpufreq_init(void) { unsigned int i, ret = 0; unsigned int dom, max_dom = 0; - cpumask_t *pt, dom_mask; - - cpus_clear(dom_mask); + cpumask_t *pt; + unsigned long *dom_mask; for_each_online_cpu(i) { struct cpuinfo_x86 *c = &cpu_data[i]; @@ -258,20 +257,26 @@ int powernow_cpufreq_init(void) } if (ret) return ret; - cpu_set(processor_pminfo[i].perf.domain_info.domain, dom_mask); if (max_dom < processor_pminfo[i].perf.domain_info.domain) max_dom = processor_pminfo[i].perf.domain_info.domain; } max_dom++; + dom_mask = xmalloc_array(unsigned long, BITS_TO_LONGS(max_dom)); + if (!dom_mask) + return -ENOMEM; + bitmap_zero(dom_mask, max_dom); + pt = xmalloc_array(cpumask_t, max_dom); if (!pt) return -ENOMEM; memset(pt, 0, max_dom * sizeof(cpumask_t)); /* get cpumask of each psd domain */ - for_each_online_cpu(i) + for_each_online_cpu(i) { + __set_bit(processor_pminfo[i].perf.domain_info.domain, dom_mask); cpu_set(i, pt[processor_pminfo[i].perf.domain_info.domain]); + } for_each_online_cpu(i) processor_pminfo[i].perf.shared_cpu_map = @@ -289,8 +294,8 @@ int powernow_cpufreq_init(void) } /* setup ondemand cpufreq */ - for (dom=0; dom