aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/platform_hypercall.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-09-22 15:24:03 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-09-22 15:24:03 +0100
commit755af07edba1768cefdc33851b70fc21bc17e0f6 (patch)
tree93726c2d9f64fac39d5f28895ef9a4bf0d2e5c0b /xen/arch/x86/platform_hypercall.c
parent23f36ed6ff84de351caab8903b9909ec22e5d294 (diff)
downloadxen-755af07edba1768cefdc33851b70fc21bc17e0f6.tar.gz
xen-755af07edba1768cefdc33851b70fc21bc17e0f6.tar.bz2
xen-755af07edba1768cefdc33851b70fc21bc17e0f6.zip
x86/cpufreq: don't use static array for large per-CPU data structures
... as this is rather wasteful when Xen is configured to support many CPUs but is running on systems having only a few. Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/arch/x86/platform_hypercall.c')
-rw-r--r--xen/arch/x86/platform_hypercall.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c
index bb36f8943b..72c6648deb 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -380,8 +380,19 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xen_platform_op_t) u_xenpf_op)
ret = -EINVAL;
break;
}
- pmpt = &processor_pminfo[cpuid];
- pxpt = &processor_pminfo[cpuid].perf;
+ pmpt = processor_pminfo[cpuid];
+ if ( !pmpt )
+ {
+ pmpt = xmalloc(struct processor_pminfo);
+ if ( !pmpt )
+ {
+ ret = -ENOMEM;
+ break;
+ }
+ memset(pmpt, 0, sizeof(*pmpt));
+ processor_pminfo[cpuid] = pmpt;
+ }
+ pxpt = &pmpt->perf;
pmpt->acpi_id = xenpmpt->id;
pmpt->id = cpuid;