On 14/10/2011 08:24, "Jan Beulich" <JBeulich@suse.com> wrote:
> This fixes an actual bug (failure to exit from a function after an
> allocation failure), an inconsistency (not removing the cpufreq_dom
> list member upon failure), and a latent bug (not clearing the current
> governor upon governor initialization failure when there was no old
> one; latent because the only current code path leading to this
> situation frees the policy upon failure and hence the governor not
> getting cleared is benign).
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
> --- a/xen/drivers/cpufreq/cpufreq.c
> +++ b/xen/drivers/cpufreq/cpufreq.c
> @@ -176,8 +176,10 @@ int cpufreq_add_cpu(unsigned int cpu)
>
> if (!domexist || hw_all) {
> policy = xzalloc(struct cpufreq_policy);
> - if (!policy)
> + if (!policy) {
> ret = -ENOMEM;
> + goto err0;
> + }
>
> policy->cpu = cpu;
> per_cpu(cpufreq_cpu_policy, cpu) = policy;
> @@ -186,7 +188,7 @@ int cpufreq_add_cpu(unsigned int cpu)
> if (ret) {
> xfree(policy);
> per_cpu(cpufreq_cpu_policy, cpu) = NULL;
> - return ret;
> + goto err0;
> }
> if (cpufreq_verbose)
> printk("CPU %u initialization completed\n", cpu);
> @@ -243,7 +245,7 @@ err1:
> cpufreq_driver->exit(policy);
> xfree(policy);
> }
> -
> +err0:
> if (cpus_empty(cpufreq_dom->map)) {
> list_del(&cpufreq_dom->node);
> xfree(cpufreq_dom);
> --- a/xen/drivers/cpufreq/utility.c
> +++ b/xen/drivers/cpufreq/utility.c
> @@ -458,8 +458,8 @@ int __cpufreq_set_policy(struct cpufreq_
> data->governor->name);
>
> /* new governor failed, so re-start old one */
> + data->governor = old_gov;
> if (old_gov) {
> - data->governor = old_gov;
> __cpufreq_governor(data, CPUFREQ_GOV_START);
> printk(KERN_WARNING "Still stay at %s
governor\n",
> data->governor->name);
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel