Re: [PATCH 12/16] cpuidle: coupled: Convert to hotplug state machine

From: Daniel Lezcano
Date: Tue Aug 23 2016 - 10:25:02 EST


On 08/18/2016 02:57 PM, Sebastian Andrzej Siewior wrote:
> Install the callbacks via the state machine.
>
> Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
> Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Cc: linux-pm@xxxxxxxxxxxxxxx
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---

[ ... ]

> -
> 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