cpufreq: P state stats aren't available if there is no cpufreq driver
authorDavid Vrabel <david.vrabel@citrix.com>
Fri, 3 Aug 2012 07:50:28 +0000 (09:50 +0200)
committerDavid Vrabel <david.vrabel@citrix.com>
Fri, 3 Aug 2012 07:50:28 +0000 (09:50 +0200)
If there is no cpufreq driver (e.g., with an AMD Opteron 8212) then
reading the P state statistics causes a deadlock as an uninitialized
spinlock is locked in do_get_pm_info(). The spinlock is initialized in
cpufreq_statistic_init() which is not called if cpufreq_driver == NULL.

Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Committed-by: Jan Beulich <jbeulich@suse.com>
xen/drivers/acpi/pmstat.c

index 8788f01f7038c79e3d612cb2a29dfaf726fee433..698711e38a53aa6f7fa3cea5ff3dcac582d8e62f 100644 (file)
@@ -66,6 +66,8 @@ int do_get_pm_info(struct xen_sysctl_get_pmstat *op)
     case PMSTAT_PX:
         if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) )
             return -ENODEV;
+        if ( !cpufreq_driver )
+            return -ENODEV;
         if ( !pmpt || !(pmpt->perf.init & XEN_PX_INIT) )
             return -EINVAL;
         break;