From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
netfilter-devel@vger.kernel.org, mingo@elte.hu,
akpm@linux-foundation.org, torvalds@linux-foundation.org,
davem@davemloft.net, dada1@cosmosbay.com, zbr@ioremap.net,
jeff.chua.linux@gmail.com, paulus@samba.org, jengelh@medozas.de,
r000n@r000n.net, benh@kernel.crashing.org,
mathieu.desnoyers@polymtl.ca
Subject: Re: [PATCH RFC] v7 expedited "big hammer" RCU grace periods
Date: Tue, 26 May 2009 21:30:01 -0700 [thread overview]
Message-ID: <20090527043001.GD6882@linux.vnet.ibm.com> (raw)
In-Reply-To: <4A1C9DFF.70708@cn.fujitsu.com>
On Wed, May 27, 2009 at 09:57:19AM +0800, Lai Jiangshan wrote:
> Paul E. McKenney wrote:
> >
> > I am concerned about the following sequence of events:
> >
> > o synchronize_sched_expedited() disables preemption, thus blocking
> > offlining operations.
> >
> > o CPU 1 starts offlining CPU 0. It acquires the CPU-hotplug lock,
> > and proceeds, and is now waiting for preemption to be enabled.
> >
> > o synchronize_sched_expedited() disables preemption, sees
> > that CPU 0 is online, so initializes and queues a request,
> > does a wake-up-process(), and finally does a preempt_enable().
> >
> > o CPU 0 is currently running a high-priority real-time process,
> > so the wakeup does not immediately happen.
> >
> > o The offlining process completes, including the kthread_stop()
> > to the migration task.
> >
> > o The migration task wakes up, sees kthread_should_stop(),
> > and so exits without checking its queue.
> >
> > o synchronize_sched_expedited() waits forever for CPU 0 to respond.
> >
> > I suppose that one way to handle this would be to check for the CPU
> > going offline before doing the wait_for_completion(), but I am concerned
> > about races affecting this check as well.
> >
> > Or is there something in the CPU-offline process that makes the above
> > sequence of events impossible?
> >
> > Thanx, Paul
> >
> >
>
> I realized this, I wrote this:
> >
> > The coupling of synchronize_sched_expedited() and migration_req
> > is largely increased:
> >
> > 1) The offline cpu's per_cpu(rcu_migration_req, cpu) is handled.
> > See migration_call::CPU_DEAD
>
> synchronize_sched_expedited() will not wait for CPU#0, because
> migration_call()::case CPU_DEAD wakes up the requestors.
>
> migration_call()
> {
> ...
> case CPU_DEAD:
> case CPU_DEAD_FROZEN:
> ...
> /*
> * No need to migrate the tasks: it was best-effort if
> * they didn't take sched_hotcpu_mutex. Just wake up
> * the requestors.
> */
> spin_lock_irq(&rq->lock);
> while (!list_empty(&rq->migration_queue)) {
> struct migration_req *req;
>
> req = list_entry(rq->migration_queue.next,
> struct migration_req, list);
> list_del_init(&req->list);
> spin_unlock_irq(&rq->lock);
> complete(&req->done);
> spin_lock_irq(&rq->lock);
> }
> spin_unlock_irq(&rq->lock);
> ...
> ...
> }
>
> My approach depend on the requestors are waked up at any case.
> migration_call() does it for us but the coupling is largely
> increased.
OK, good point! I do need to think about this.
In the meantime, where do you see a need to run
synchronize_sched_expedited() from within a hotplug CPU notifier?
Thanx, Paul
next prev parent reply other threads:[~2009-05-27 4:30 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-22 19:05 [PATCH RFC] v7 expedited "big hammer" RCU grace periods Paul E. McKenney
2009-05-25 6:35 ` Lai Jiangshan
2009-05-25 16:44 ` Paul E. McKenney
2009-05-26 1:03 ` Lai Jiangshan
2009-05-26 1:28 ` Paul E. McKenney
2009-05-26 15:46 ` Paul E. McKenney
2009-05-26 16:41 ` Mathieu Desnoyers
2009-05-26 18:13 ` Paul E. McKenney
2009-05-27 1:47 ` Mathieu Desnoyers
2009-05-27 4:27 ` Paul E. McKenney
2009-05-27 14:45 ` Mathieu Desnoyers
2009-05-28 23:52 ` Paul E. McKenney
2009-05-27 1:57 ` Lai Jiangshan
2009-05-27 4:30 ` Paul E. McKenney [this message]
2009-05-27 5:37 ` Lai Jiangshan
2009-05-29 0:08 ` Paul E. McKenney
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=20090527043001.GD6882@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=dada1@cosmosbay.com \
--cc=davem@davemloft.net \
--cc=jeff.chua.linux@gmail.com \
--cc=jengelh@medozas.de \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=paulus@samba.org \
--cc=r000n@r000n.net \
--cc=torvalds@linux-foundation.org \
--cc=zbr@ioremap.net \
/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.