From: Daniel Lezcano <daniel.lezcano@linaro.org>
To: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
linaro-dev@lists.linaro.org, linux-pm@vger.kernel.org,
pdeschrijver@nvidia.com, patches@linaro.org,
linux-acpi@vger.kernel.org, lenb@kernel.org
Subject: Re: [PATCH 4/4] cpuidle - support multiple drivers
Date: Thu, 11 Oct 2012 12:04:37 +0200 [thread overview]
Message-ID: <507699B5.3010702@linaro.org> (raw)
In-Reply-To: <2357350.9DgMVa61GL@vostro.rjw.lan>
On 10/07/2012 11:26 PM, Rafael J. Wysocki wrote:
> On Tuesday 25 of September 2012 00:43:54 Daniel Lezcano wrote:
>> With the tegra3 and the big.LITTLE [1] new architectures, several cpus
>> with different characteristics (latencies and states) can co-exists on the
>> system.
>>
>> The cpuidle framework has the limitation of handling only identical cpus.
>>
>> This patch removes this limitation by introducing the multiple driver support
>> for cpuidle.
>>
>> This option is configurable at compile time and should be enabled for the
>> architectures mentioned above. So there is no impact for the other platforms
>> if the option is disabled. The option defaults to 'n'. Note the multiple drivers
>> support is also compatible with the existing drivers, even if just one driver is
>> needed, all the cpu will be tied to this driver using an extra small chunk of
>> processor memory.
>>
>> The multiple driver support use a per-cpu driver pointer instead of a global
>> variable and the accessor to this variable are done from a cpu context.
Thanks Rafael for the review.
I took into account all your remarks for the V2.
[ cut ]
>> +static int __cpuidle_register_all_cpu_driver(struct cpuidle_driver *drv)
>> +{
>> + int ret = 0;
>> + int i, cpu;
>> +
>> + for_each_present_cpu(cpu) {
>> + ret = __cpuidle_register_driver(drv, cpu);
>> + if (!ret)
>> + continue;
>> + for (i = cpu - 1; i >= 0; i--)
> I wonder if this is going to work in all cases. For example, is there any
> guarantee that the CPU numbers start from 0 and that there are no gaps?
AFAICS, the cpumask.h is not assuming the cpu numbers start from zero
and they are contiguous.
I will fix this reverse loop, thanks for spotting this.
[ cut ]
>> void cpuidle_unregister_driver(struct cpuidle_driver *drv)
>> {
>> spin_lock(&cpuidle_driver_lock);
>> - __cpuidle_unregister_driver(drv);
>> +#ifdef CONFIG_CPU_IDLE_MULTIPLE_DRIVERS
>> + __cpuidle_unregister_all_cpu_driver(drv);
>> +#else
>> + __cpuidle_unregister_driver(drv, smp_processor_id());
>> +#endif
> I'm slightly cautious about using smp_processor_id() above.
> get_cpu()/put_cpu() is the preferred way of doing this nowadays (although
> this particular code is under the spinlock, so it should be OK).
yes, get_cpu does preempt_disable() and smp_processor_id()
As spin_lock does also preempt_disable() that should be ok.
But I changed the code to use the preferred way.
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
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-10-11 10:04 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-24 22:43 [PATCH 0/4] cpuidle - support multiple drivers at a time Daniel Lezcano
2012-09-24 22:43 ` [PATCH 1/4] cpuidle : move driver's refcount to cpuidle Daniel Lezcano
2012-09-24 22:43 ` [PATCH 2/4] cpuidle : move driver checking within the lock section Daniel Lezcano
[not found] ` <1348526634-19029-3-git-send-email-daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-10-07 20:17 ` Rafael J. Wysocki
2012-09-24 22:43 ` [PATCH 3/4] cpuidle - prepare the driver core to be multi drivers aware Daniel Lezcano
2012-09-24 22:43 ` [PATCH 4/4] cpuidle - support multiple drivers Daniel Lezcano
[not found] ` <1348526634-19029-5-git-send-email-daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2012-09-29 9:41 ` Francesco Lavra
2012-09-29 17:44 ` Daniel Lezcano
2012-09-29 22:07 ` Rafael J. Wysocki
2012-09-30 16:34 ` Daniel Lezcano
2012-10-02 2:08 ` Rafael J. Wysocki
[not found] ` <3723306.GAm1cPlZaP-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2012-10-02 12:27 ` Daniel Lezcano
2012-10-02 14:02 ` Rafael J. Wysocki
2012-10-04 14:14 ` Peter De Schrijver
2012-10-04 14:26 ` Daniel Lezcano
2012-10-04 14:34 ` Peter De Schrijver
2012-10-07 21:09 ` Rafael J. Wysocki
2012-10-07 21:26 ` Rafael J. Wysocki
2012-10-11 10:04 ` Daniel Lezcano [this message]
2012-10-11 17:21 ` Rafael J. Wysocki
2012-10-11 17:39 ` Daniel Lezcano
2012-10-04 14:16 ` [PATCH 0/4] cpuidle - support multiple drivers at a time Peter De Schrijver
2012-10-04 14:27 ` Daniel Lezcano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=507699B5.3010702@linaro.org \
--to=daniel.lezcano@linaro.org \
--cc=lenb@kernel.org \
--cc=linaro-dev@lists.linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=patches@linaro.org \
--cc=pdeschrijver@nvidia.com \
--cc=rjw@sisk.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).