Commit 3e452e63 authored by Ulf Hansson's avatar Ulf Hansson Committed by Rafael J. Wysocki
Browse files

ARM: cpuidle: Convert to use cpuidle_register|unregister()



The only reason that remains, to why the ARM cpuidle driver calls
cpuidle_register_driver(), is to avoid printing an error message in case
another driver already have been registered for the CPU. This seems a bit
silly, but more importantly, if that is a common scenario, perhaps we
should change cpuidle_register() accordingly instead.

In either case, let's consolidate the code, by converting to use
cpuidle_register|unregister(), which also avoids the unnecessary allocation
of the struct cpuidle_device.

Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Reviewed-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 763f191a
Loading
Loading
Loading
Loading
+3 −27
Original line number Diff line number Diff line
@@ -82,7 +82,6 @@ static int __init arm_idle_init_cpu(int cpu)
{
	int ret;
	struct cpuidle_driver *drv;
	struct cpuidle_device *dev;

	drv = kmemdup(&arm_idle_driver, sizeof(*drv), GFP_KERNEL);
	if (!drv)
@@ -119,33 +118,12 @@ static int __init arm_idle_init_cpu(int cpu)
		goto out_kfree_drv;
	}

	ret = cpuidle_register_driver(drv);
	if (ret) {
		if (ret != -EBUSY)
			pr_err("Failed to register cpuidle driver\n");
	ret = cpuidle_register(drv, NULL);
	if (ret)
		goto out_kfree_drv;
	}

	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	if (!dev) {
		ret = -ENOMEM;
		goto out_unregister_drv;
	}
	dev->cpu = cpu;

	ret = cpuidle_register_device(dev);
	if (ret) {
		pr_err("Failed to register cpuidle device for CPU %d\n",
		       cpu);
		goto out_kfree_dev;
	}

	return 0;

out_kfree_dev:
	kfree(dev);
out_unregister_drv:
	cpuidle_unregister_driver(drv);
out_kfree_drv:
	kfree(drv);
	return ret;
@@ -176,9 +154,7 @@ out_fail:
	while (--cpu >= 0) {
		dev = per_cpu(cpuidle_devices, cpu);
		drv = cpuidle_get_cpu_driver(dev);
		cpuidle_unregister_device(dev);
		cpuidle_unregister_driver(drv);
		kfree(dev);
		cpuidle_unregister(drv);
		kfree(drv);
	}