diff options
author | Boris Ostrovsky <boris.ostrovsky@amd.com> | 2012-08-15 09:43:25 +0200 |
---|---|---|
committer | Boris Ostrovsky <boris.ostrovsky@amd.com> | 2012-08-15 09:43:25 +0200 |
commit | 81ccd147226c43dcd81ff4b53487db7e83058afd (patch) | |
tree | 6b495ace708c6d799371c73dc7d0315ccf60bf6c /xen/drivers/acpi | |
parent | dd40177c1bc86650a2be9786289ebe0397b1c0a3 (diff) | |
download | xen-81ccd147226c43dcd81ff4b53487db7e83058afd.tar.gz xen-81ccd147226c43dcd81ff4b53487db7e83058afd.tar.bz2 xen-81ccd147226c43dcd81ff4b53487db7e83058afd.zip |
acpi: Make sure valid CPU is passed to do_pm_op()
Passing invalid CPU value to do_pm_op() will cause assertion
in cpu_online().
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com>
Such checks would, at a first glance, then also be missing at the top
of various helper functions, but these check really were already
redundant with the check in do_pm_op(). Remove the redundant checks
for clarity and brevity.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Jan Beulich <jbeulich@suse.com>
Diffstat (limited to 'xen/drivers/acpi')
-rw-r--r-- | xen/drivers/acpi/pmstat.c | 21 |
1 files changed, 2 insertions, 19 deletions
diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index 698711e38a..909426901f 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -201,8 +201,6 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op) struct list_head *pos; uint32_t cpu, i, j = 0; - if ( !op || !cpu_online(op->cpuid) ) - return -EINVAL; pmpt = processor_pminfo[op->cpuid]; policy = per_cpu(cpufreq_cpu_policy, op->cpuid); @@ -305,9 +303,6 @@ static int set_cpufreq_gov(struct xen_sysctl_pm_op *op) { struct cpufreq_policy new_policy, *old_policy; - if ( !op || !cpu_online(op->cpuid) ) - return -EINVAL; - old_policy = per_cpu(cpufreq_cpu_policy, op->cpuid); if ( !old_policy ) return -EINVAL; @@ -326,8 +321,6 @@ static int set_cpufreq_para(struct xen_sysctl_pm_op *op) int ret = 0; struct cpufreq_policy *policy; - if ( !op || !cpu_online(op->cpuid) ) - return -EINVAL; policy = per_cpu(cpufreq_cpu_policy, op->cpuid); if ( !policy || !policy->governor ) @@ -404,22 +397,12 @@ static int set_cpufreq_para(struct xen_sysctl_pm_op *op) return ret; } -static int get_cpufreq_avgfreq(struct xen_sysctl_pm_op *op) -{ - if ( !op || !cpu_online(op->cpuid) ) - return -EINVAL; - - op->u.get_avgfreq = cpufreq_driver_getavg(op->cpuid, USR_GETAVG); - - return 0; -} - int do_pm_op(struct xen_sysctl_pm_op *op) { int ret = 0; const struct processor_pminfo *pmpt; - if ( !op || !cpu_online(op->cpuid) ) + if ( !op || op->cpuid >= nr_cpu_ids || !cpu_online(op->cpuid) ) return -EINVAL; pmpt = processor_pminfo[op->cpuid]; @@ -455,7 +438,7 @@ int do_pm_op(struct xen_sysctl_pm_op *op) case GET_CPUFREQ_AVGFREQ: { - ret = get_cpufreq_avgfreq(op); + op->u.get_avgfreq = cpufreq_driver_getavg(op->cpuid, USR_GETAVG); break; } |