Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

authored by

Ulf Hansson and committed by
Rafael J. Wysocki
3e452e63 763f191a

+3 -27
+3 -27
drivers/cpuidle/cpuidle-arm.c
··· 82 82 { 83 83 int ret; 84 84 struct cpuidle_driver *drv; 85 - struct cpuidle_device *dev; 86 85 87 86 drv = kmemdup(&arm_idle_driver, sizeof(*drv), GFP_KERNEL); 88 87 if (!drv) ··· 118 119 goto out_kfree_drv; 119 120 } 120 121 121 - ret = cpuidle_register_driver(drv); 122 - if (ret) { 123 - if (ret != -EBUSY) 124 - pr_err("Failed to register cpuidle driver\n"); 122 + ret = cpuidle_register(drv, NULL); 123 + if (ret) 125 124 goto out_kfree_drv; 126 - } 127 - 128 - dev = kzalloc(sizeof(*dev), GFP_KERNEL); 129 - if (!dev) { 130 - ret = -ENOMEM; 131 - goto out_unregister_drv; 132 - } 133 - dev->cpu = cpu; 134 - 135 - ret = cpuidle_register_device(dev); 136 - if (ret) { 137 - pr_err("Failed to register cpuidle device for CPU %d\n", 138 - cpu); 139 - goto out_kfree_dev; 140 - } 141 125 142 126 return 0; 143 127 144 - out_kfree_dev: 145 - kfree(dev); 146 - out_unregister_drv: 147 - cpuidle_unregister_driver(drv); 148 128 out_kfree_drv: 149 129 kfree(drv); 150 130 return ret; ··· 154 176 while (--cpu >= 0) { 155 177 dev = per_cpu(cpuidle_devices, cpu); 156 178 drv = cpuidle_get_cpu_driver(dev); 157 - cpuidle_unregister_device(dev); 158 - cpuidle_unregister_driver(drv); 159 - kfree(dev); 179 + cpuidle_unregister(drv); 160 180 kfree(drv); 161 181 } 162 182