[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] cpufreq: error path fixes



On 14/10/2011 08:24, "Jan Beulich" <JBeulich@xxxxxxxx> 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@xxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- 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@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.