[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 4 Apr 2018 10:50:02 +0200
From: Daniel Lezcano <daniel.lezcano@...aro.org>
To: Viresh Kumar <viresh.kumar@...aro.org>
Cc: edubezval@...il.com, kevin.wangtao@...aro.org, leo.yan@...aro.org,
vincent.guittot@...aro.org, amit.kachhap@...il.com,
linux-kernel@...r.kernel.org, javi.merino@...nel.org,
rui.zhang@...el.com, daniel.thompson@...aro.org,
linux-pm@...r.kernel.org
Subject: Re: [PATCH V2 6/7] thermal/drivers/cpu_cooling: Introduce the cpu
idle cooling driver
On 26/02/2018 05:30, Viresh Kumar wrote:
[ ... ]
>>>> +
>>>> + for_each_possible_cpu(cpu) {
>>>> + cpumask = topology_core_cpumask(cpu);
>>>> +
>>>> + cct = per_cpu_ptr(&cpuidle_cooling_tsk, cpu);
>>>> +
>>>> + /*
>>>> + * This condition makes the first cpu belonging to the
>>>> + * cluster to create a cooling device and allocates
>>>> + * the structure. Others CPUs belonging to the same
>>>> + * cluster will just increment the refcount on the
>>>> + * cooling device structure and initialize it.
>>>> + */
>>>> + if (cpu == cpumask_first(cpumask)) {
>>>
>>> Your function still have few assumptions of cpu numbering and it will
>>> break in few cases. What if the CPUs on a big Little system (4x4) are
>>> present in this order: B L L L L B B B ??
>>>
>>> This configuration can happen if CPUs in DT are marked as: 0-3 LITTLE,
>>> 4-7 big and a big CPU is used by the boot loader to bring up Linux.
>>
>> Ok, how can I sort it out ?
>
> I would do something like this:
>
> cpumask_copy(possible, cpu_possible_mask);
>
> while (!cpumask_empty(possible)) {
> first = cpumask_first(possible);
> cpumask = topology_core_cpumask(first);
> cpumask_andnot(possible, possible, cpumask);
>
> allocate_cooling_dev(first); //This is most of this function in your patch.
>
> while (!cpumask_empty(cpumask)) {
> temp = cpumask_first(possible);
> //rest init "temp"
> cpumask_clear_cpu(temp, cpumask);
> }
>
> //Everything done, register cooling device for cpumask.
> }
Mmh, that sounds very complex. May be it is simpler to count the number
of cluster and initialize the idle_cdev for each cluster and then go for
this loop with the cluster cpumask.
--
<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
Powered by blists - more mailing lists