On 08/18/2016 02:57 PM, Sebastian Andrzej Siewior wrote:
> Install the callbacks via the state machine.
> 
> Cc: "Rafael J. Wysocki" <[email protected]>
> Cc: Daniel Lezcano <[email protected]>
> Cc: [email protected]
> Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
> ---

[ ... ]

> -
>       mutex_lock(&cpuidle_lock);
>  
>       dev = per_cpu(cpuidle_devices, cpu);
>       if (!dev || !dev->coupled)
>               goto out;
>  
> -     switch (action & ~CPU_TASKS_FROZEN) {
> -     case CPU_UP_PREPARE:
> -     case CPU_DOWN_PREPARE:
> -             cpuidle_coupled_prevent_idle(dev->coupled);
> -             break;
> -     case CPU_ONLINE:
> -     case CPU_DEAD:
> -             cpuidle_coupled_update_online_cpus(dev->coupled);
> -             /* Fall through */
> -     case CPU_UP_CANCELED:
> -     case CPU_DOWN_FAILED:
> -             cpuidle_coupled_allow_idle(dev->coupled);
> -             break;
> -     }
> -
> +     cpuidle_coupled_update_online_cpus(dev->coupled);
> +     cpuidle_coupled_allow_idle(dev->coupled);
>  out:
>       mutex_unlock(&cpuidle_lock);
> -     return NOTIFY_OK;
> +     return 0;

You can remove the useless label 'out':

if (dev && dev->coupled) {
        cpuidle_coupled_update_online_cpus(dev->coupled);
        cpuidle_coupled_allow_idle(dev->coupled);
}

>  }
>  
> -static struct notifier_block cpuidle_coupled_cpu_notifier = {
> -     .notifier_call = cpuidle_coupled_cpu_notify,
> -};
> +static int coupled_cpu_up_prepare(unsigned int cpu)
> +{
> +     struct cpuidle_device *dev;
> +
> +     mutex_lock(&cpuidle_lock);
> +
> +     dev = per_cpu(cpuidle_devices, cpu);
> +     if (!dev || !dev->coupled)
> +             goto out;
> +
> +     cpuidle_coupled_prevent_idle(dev->coupled);
> +out:
> +     mutex_unlock(&cpuidle_lock);
> +     return 0;

Same comment here.

> +}
>  
>  static int __init cpuidle_coupled_init(void)
>  {
> -     return register_cpu_notifier(&cpuidle_coupled_cpu_notifier);
> +     int ret;
> +
> +     ret = cpuhp_setup_state_nocalls(CPUHP_CPUIDLE_COUPLED_PREPARE,
> +                                     "CPUIDLE_COUPLED_PREPARE",
> +                                     coupled_cpu_up_prepare,
> +                                     coupled_cpu_online);
> +     if (ret)
> +             goto err;

There is nothing to undo here.

        if (ret)
                return ret;

> +     ret = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN,
> +                                     "CPUIDLE_COUPLED_ONLINE",
> +                                     coupled_cpu_online,
> +                                     coupled_cpu_up_prepare);
> +     if (ret < 0)
> +             goto err;

        if (ret)
                cpuhp_remove_state_nocalls(
                        CPUHP_CPUIDLE_COUPLED_PREPARE);
                
        return ret;

> +     return 0;
> +err:
> +     cpuhp_remove_state_nocalls(CPUHP_CPUIDLE_COUPLED_PREPARE);
> +     return ret;

  ^^^^^ zaaap !



-- 
 <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

Reply via email to