From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
Meelis Roos <mroos@linux.ee>,
"cpufreq@vger.kernel.org" <cpufreq@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 5/5] cpufreq: Catch double invocations of cpufreq_freq_transition_begin/end
Date: Tue, 29 Apr 2014 11:46:18 +0530 [thread overview]
Message-ID: <535F43B2.2000309@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAKohpokiy2Fvry=uTVnOCymH7Co1ka+JCFT3ndtPQBSD94Mnew@mail.gmail.com>
On 04/29/2014 10:25 AM, Viresh Kumar wrote:
> On 29 April 2014 10:21, Viresh Kumar <viresh.kumar@linaro.org> wrote:
>> Nice effort.
>>
>> On 29 April 2014 00:25, Srivatsa S. Bhat
>> <srivatsa.bhat@linux.vnet.ibm.com> wrote:
>>> Now all such drivers have been fixed, but debugging this issue was not
>>> very straight-forward (even lockdep didn't catch this). So let us add a
>>> debug infrastructure to the cpufreq core to catch such issues more easily
>>> in the future.
>>
>> BUT, I am not sure if we really need it :(
>>
>> I think we just got into the 'barrier' stuff as we had some doubts about it
>> earlier and were quite sure that nothing else could go wrong. Otherwise
>> the only problem could have been present was the second queuing
>> from the same thread. And we will surely get stuck if that happens and
>> we can't just miss that error..
>>
>>> Scenario 1: (Deadlock-free)
>>> ----------
>>>
>>> Task A Task B
>>>
>>> /* 1st freq transition */
>>> Invoke _begin() {
>>> ...
>>> ...
>>> }
>>>
>>> Change the frequency
>>>
>>> Got interrupt for successful
>>> change of frequency.
>>>
>>> /* 1st freq transition */
>>> Invoke _end() {
>>> ...
>>> ...
>>> /* 2nd freq transition */ ...
>>> Invoke _begin() { ...
>>> ... //waiting for B ...
>>> ... //to finish _end() }
>>> ...
>>> ...
>>> }
>>>
>>>
>>> This scenario is actually deadlock-free because Task A can wait inside the
>>> second call to _begin() without self-deadlocking, because it is the
>>> responsibility of Task B to finish the first sequence by invoking the
>>> corresponding _end().
>
> WTF, I was writing my mail and it just got send due to some stupid combination
> of keys :( .. Sorry.
>
No problem!
> Also, this might not work as expected. Consider this scenario:
>
> /* 1st freq transition */
> Invoke _begin() {
> ...
> ...
> }
>
> Start Change of frequency and return
> back as there is no end from same thread.
>
> /* 2nd freq transition as there is nobody stopping us */
> Invoke _begin() {
> ... //waiting for B
> ... //to finish _end()
> ...
> ...
> }
>
> Got
> interrupt for successful
> change
> of frequency.
>
> /* 1st
> freq transition */
> Invoke _end() {
> ...
> ...
> }
>
> And your patch will probably break this ?
Yes, I'm aware that this corner case doesn't work well with my debug
patch. I tried to avoid this but couldn't think of any solution.
(One big-hammer way to avoid this is to exclude this infrastructure
for all ASYNC_NOTIFICATION drivers, but I didn't want to go with that
approach, since it makes it look ugly). Do you have any better ideas
to deal with this scenario?
Also, do we really have cases in mind where a single thread does
multiple frequency transitions in one go? That too in such quick
successions? Echo's to sysfs, changing of governors from userspace etc
all do one frequency transition at a time per-task...
Regards,
Srivatsa S. Bhat
next prev parent reply other threads:[~2014-04-29 6:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-28 18:53 [PATCH v2 0/5] Cpufreq frequency serialization fixes Srivatsa S. Bhat
2014-04-28 18:54 ` [PATCH v2 1/5] cpufreq, longhaul: Fix double invocation of cpufreq_freq_transition_begin/end Srivatsa S. Bhat
2014-04-28 18:54 ` [PATCH v2 2/5] cpufreq, powernow-k6: Fix incorrect comparison with max_multipler Srivatsa S. Bhat
2014-04-28 18:54 ` [PATCH v2 3/5] cpufreq, powernow-k6: Fix double invocation of cpufreq_freq_transition_begin/end Srivatsa S. Bhat
2014-04-28 18:54 ` [PATCH v2 4/5] cpufreq, powernow-k7: " Srivatsa S. Bhat
2014-04-28 18:55 ` [PATCH v2 5/5] cpufreq: Catch double invocations " Srivatsa S. Bhat
2014-04-29 4:51 ` Viresh Kumar
2014-04-29 4:55 ` Viresh Kumar
2014-04-29 6:16 ` Srivatsa S. Bhat [this message]
2014-04-29 6:49 ` Viresh Kumar
2014-04-29 7:35 ` Srivatsa S. Bhat
2014-04-29 8:04 ` Viresh Kumar
2014-04-29 8:10 ` Srivatsa S. Bhat
2014-04-29 6:08 ` Srivatsa S. Bhat
2014-04-28 20:57 ` [PATCH v2 0/5] Cpufreq frequency serialization fixes Meelis Roos
2014-04-28 23:47 ` Rafael J. Wysocki
2014-04-29 5:59 ` Srivatsa S. Bhat
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=535F43B2.2000309@linux.vnet.ibm.com \
--to=srivatsa.bhat@linux.vnet.ibm.com \
--cc=cpufreq@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mroos@linux.ee \
--cc=rjw@rjwysocki.net \
--cc=viresh.kumar@linaro.org \
/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).