From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul Mackerras <paulus@samba.org>,
linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Ingo Molnar <mingo@kernel.org>, Oleg Nesterov <oleg@redhat.com>,
Tejun Heo <tj@kernel.org>, Michel Lespinasse <walken@google.com>,
ego@linux.vnet.ibm.com, Thomas Gleixner <tglx@linutronix.de>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Subject: Re: Deadlock between cpu_hotplug_begin and cpu_add_remove_lock
Date: Tue, 28 Jan 2014 20:06:34 +0530 [thread overview]
Message-ID: <52E7C072.80704@linux.vnet.ibm.com> (raw)
In-Reply-To: <87wqhq1ewm.fsf@rustcorp.com.au>
On 01/24/2014 04:31 AM, Rusty Russell wrote:
> "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> writes:
>> On 01/23/2014 07:59 AM, Rusty Russell wrote:
>>> "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> writes:
>>>> On 01/22/2014 02:00 PM, Srivatsa S. Bhat wrote:
>>>>> Hi Paul,
>>>
>>> I find an old patch for register_allcpu_notifier(), but the "bool
>>> replay_history" should be eliminated (always true): it's too weird.
>>>
>>
>> Sorry, I didn't get this part. Why do you say that replay_history
>> will always be true?
>
> OK, let me start again and try to explain myself properly:
>
> register_cpu_notifier is a bad API. It's hard to get right because:
> 1) You need to loop over online (or present) cpus once before you call
> it.
> 2) You have to beware the race between the loop and registration, but
> much example code happens at boot time where it doesn't matter,
> so random author is likely to copy that and have a race.
> 3) You have two paths doing the same thing: the loop which is run on
> every machine (cpu hotplug or not), and the notifier callback which
> is run far less rarely.
>
> What we actually *want* is a routine which will reliably call for every
> current and future CPU, and then there are very few places which should
> use the current register_cpu_notifier().
>
> ie. halfway between register_cpu_notifier() (too racy) and
> register_allcpu_notifier() (too simplified).
>
> Let's call it register_cpu_callback / unregister_cpu_callback?
>
Thanks a lot for the detailed and profound explanation! It makes perfect
sense to me now.
>> By the way, I'm still tempted to try out the simpler-looking alternative
>> idea of exporting cpu_maps_update_begin() and cpu_maps_update_done()
>> and then mandating that the callers do:
>>
>> cpu_maps_update_begin();
>> for_each_online_cpu(cpu) {
>> ...
>> }
>>
>> __register_cpu_notifier(); // this doesn't take the add_remove_lock
>> cpu_maps_update_done();
>
> Sure, fix this one for -stable. But let's create an idiom we can be
> proud of for the longer term.
>
Ok, that sounds good, will work on that.
Thank you very much!
Regards,
Srivatsa S. Bhat
prev parent reply other threads:[~2014-01-28 14:41 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-22 5:52 Deadlock between cpu_hotplug_begin and cpu_add_remove_lock Paul Mackerras
2014-01-22 8:30 ` Srivatsa S. Bhat
2014-01-22 9:16 ` Srivatsa S. Bhat
2014-01-22 19:18 ` Oleg Nesterov
2014-01-22 19:58 ` Srivatsa S. Bhat
2014-01-23 17:02 ` Oleg Nesterov
2014-01-28 14:32 ` Srivatsa S. Bhat
2014-01-23 2:29 ` Rusty Russell
2014-01-23 5:36 ` Srivatsa S. Bhat
2014-01-23 23:01 ` Rusty Russell
2014-01-28 14:36 ` Srivatsa S. Bhat [this message]
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=52E7C072.80704@linux.vnet.ibm.com \
--to=srivatsa.bhat@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=ego@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=rusty@rustcorp.com.au \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=walken@google.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.