[PATCH][V2] cpuidle : use percpu cpuidle in the core code

Daniel Lezcano daniel.lezcano at linaro.org
Mon Apr 2 13:46:05 UTC 2012


On 04/02/2012 03:21 PM, Srivatsa S. Bhat wrote:
> On 04/02/2012 06:18 PM, Daniel Lezcano wrote:
>
>> The usual cpuidle initialization routines are to register the
>> driver, then register a cpuidle device per cpu.
>>
>> With the device's state count default initialization with the
>> driver's state count, the code initialization remains mostly the
>> same in the different drivers.
>>
>> We can then add a new function 'cpuidle_register' where we register
>> the driver and the devices. These devices can be defined in a global
>> static variable in cpuidle.c. We will be able to factor out and
>> remove a lot of duplicate lines of code.
>>
>> As we still have some drivers, with different initialization routines,
>> we keep 'cpuidle_register_driver' and 'cpuidle_register_device' as low
>> level initialization routines to do some specific operations on the
>> cpuidle devices.
>>
>> Signed-off-by: Daniel Lezcano<daniel.lezcano at linaro.org>
>
>> +/*
>> + * cpuidle_register : register cpuidle driver and devices
>> + * Note this function must be called after smp_init.
>> + * @drv : the cpuidle driver
>> + * Returns 0 on success,<  0 otherwise
>> + */
>> +int cpuidle_register(struct cpuidle_driver *drv)
>> +{
>> +	int ret, cpu, i;
>> +	struct cpuidle_device *dev;
>> +
>> +	ret = cpuidle_register_driver(drv);
>> +	if (ret)
>> +		return ret;
>> +
>> +	for_each_online_cpu(cpu) {
>> +		dev =&per_cpu(cpuidle_device, cpu);
>> +		dev->cpu = cpu;
>> +
>> +		ret = cpuidle_register_device(dev);
>> +		if (ret)
>> +			goto out_unregister;
>> +	}
>> +
>> +out:
>> +	return ret;
>> +
>> +out_unregister:
>> +	for_each_online_cpu(i) {
>> +		if (i == cpu)
>> +			break;
>> +		dev =&per_cpu(cpuidle_device, cpu);
>
>
> 					^^^
> That must have been "i" instead of "cpu"...

Oops, right ! Good catch.

Thanks

   -- Daniel



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




More information about the linaro-dev mailing list