From: Tejun Heo <tj@kernel.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Rik van Riel <riel@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/1] stop_machine: Remove stop_cpus_lock and lg_double_lock/unlock()
Date: Mon, 23 Nov 2015 16:53:39 -0500 [thread overview]
Message-ID: <20151123215339.GF19072@mtj.duckdns.org> (raw)
In-Reply-To: <20151121181148.GA433@redhat.com>
Hello, Oleg.
On Sat, Nov 21, 2015 at 07:11:48PM +0100, Oleg Nesterov wrote:
> stop_two_cpus() and stop_cpus() use stop_cpus_lock to avoid the deadlock,
> we need to ensure that the stopper functions can't be queued "backwards"
> from one another. This doesn't look nice; if we use lglock then we do not
> really need stopper->lock, cpu_stop_queue_work() could use lg_local_lock()
> under local_irq_save().
Yeah, removing stopper->lock would be nice.
> OTOH it would be even better to avoid lglock in stop_machine.c and remove
> lg_double_lock(). This patch adds "bool stop_cpus_in_progress" set/cleared
> by queue_stop_cpus_work(), and changes cpu_stop_queue_two_works() to busy
> wait until it is cleared.
>
> queue_stop_cpus_work() sets stop_cpus_in_progress = T lockless, but after
> it queues a work on CPU1 it must be visible to stop_two_cpus(CPU1, CPU2)
> which checks it under the same lock. And since stop_two_cpus() holds the
> 2nd lock too, queue_stop_cpus_work() can not clear stop_cpus_in_progress
> if it is also going to queue a work on CPU2, it needs to take that 2nd
> lock to do this.
Isn't this a lot more subtler than the other direction? Unless
there's a clear performance advantage to removing stopper->lock, using
lglock for both stop_two and stop_machine seems like an
easier-to-follow approach to me.
Thanks.
--
tejun
next prev parent reply other threads:[~2015-11-23 21:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-21 18:11 [PATCH v2 0/1] " Oleg Nesterov
2015-11-21 18:11 ` [PATCH v2 1/1] " Oleg Nesterov
2015-11-23 21:53 ` Tejun Heo [this message]
2015-11-24 9:51 ` Peter Zijlstra
2015-11-24 14:50 ` Tejun Heo
2016-09-22 14:05 ` [tip:locking/core] " tip-bot for Oleg Nesterov
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=20151123215339.GF19072@mtj.duckdns.org \
--to=tj@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=tglx@linutronix.de \
/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
all inboxes | Powered by JetHome®