All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vegard Nossum <vegard.nossum@gmail.com>,
	stable@kernel.org, Nick Piggin <npiggin@suse.de>,
	Pekka Enberg <penberg@cs.helsinki.fi>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: fix lazy vmap purging (use-after-free error)
Date: Mon, 23 Feb 2009 19:37:12 -0800	[thread overview]
Message-ID: <20090224033712.GA7173@linux.vnet.ibm.com> (raw)
In-Reply-To: <200902241423.21091.nickpiggin@yahoo.com.au>

On Tue, Feb 24, 2009 at 02:23:19PM +1100, Nick Piggin wrote:
> On Tuesday 24 February 2009 07:43:59 Paul E. McKenney wrote:
> > On Mon, Feb 23, 2009 at 08:33:51PM +0100, Ingo Molnar wrote:
> > > * Andrew Morton <akpm@linux-foundation.org> wrote:
> > > > On Mon, 23 Feb 2009 08:17:26 -0800 "Paul E. McKenney" 
> <paulmck@linux.vnet.ibm.com> wrote:
> > > > > On Tue, Feb 24, 2009 at 12:29:36AM +1100, Nick Piggin wrote:
> > > > > > On Monday 23 February 2009 16:17:09 Paul E. McKenney wrote:
> > > > > > > The boot CPU runs in the context of its idle thread during
> > > > > > > boot-up. During this time, idle_cpu(0) will always return
> > > > > > > nonzero, which will fool Classic and Hierarchical RCU into
> > > > > > > deciding that a large chunk of the boot-up sequence is a big long
> > > > > > > quiescent state.  This in turn causes RCU to prematurely end
> > > > > > > grace periods during this time.
> > > > > > >
> > > > > > > This patch creates a new global variable that is set to 1 just
> > > > > > > before the boot CPU first enters the scheduler, after which the
> > > > > > > idle task really is idle.
> > > > > >
> > > > > > Nice work all (btw. if this patch goes in rather than using
> > > > > > system_state, then please make the variable __read_mostly).
> > > > >
> > > > > Hmmm...  I misread this and made system_state be __read_mostly.  Let
> > > > > me know if this is bad, easy to fix if needed.
> > > >
> > > > Please don't use system_state.  The whole thing is just bad
> > > > design. It's a global variable, breaks encapsulation, creates
> > > > interactions etc. CS-101 stuff.
> > >
> > > ok, i've removed the patch - Paul, would you mind to re-send
> > > your original flag solution, with it marked __read_mostly and
> > > with the extern declarations put into a suitable header file?
> > >
> > > Paul, incidentally, this very minute i tracked down that the
> > > patch is also causing boot lockups in -tip testing. I havent yet
> > > fully debugged it, but a question comes immediately: if there's
> > > no grace periods during bootup, wont rcu_sync() & friends just
> > > hang indefinitely?
> >
> > Ouch!!!  Indeed they would.
> >
> > > More thought is needed.
> >
> > One fix would be to sprinkle calls to rcu_qsctr_inc() through the
> > boot process.  But a much better approach would be for me to make
> > synchronize_rcu() check this same flag, and simply return if called
> > during early boot.  The rationale for this is that there is but a single
> > CPU during early boot, so tinyrcu.c's optimization can be used.  ;-)
> 
> Well can you simply return if called if num_online_cpus() == 1, regardless
> of the state of boot?

Yep!

And that is indeed what I do in http://lkml.org/lkml/2009/2/23/305.

						Thanx, Paul

> > Out of both paranoia and self defense, I would check num_online_cpus()
> > in my proposed call into RCU.  ;-)
> >
> > Seem reasonable?  And does synchronize_sched() also need the UP-only
> > optimization?
> 

  reply	other threads:[~2009-02-24  3:37 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-20 13:41 [PATCH] mm: fix lazy vmap purging (use-after-free error) Vegard Nossum
2009-02-20 13:50 ` Ingo Molnar
2009-02-20 13:58   ` Pekka Enberg
2009-02-20 14:01   ` Ingo Molnar
2009-02-20 14:18     ` Pekka Enberg
2009-02-20 15:41       ` Paul E. McKenney
2009-02-20 14:51     ` Vegard Nossum
2009-02-20 15:46       ` Paul E. McKenney
2009-02-20 16:04         ` Ingo Molnar
2009-02-20 16:44           ` Paul E. McKenney
2009-02-20 17:14             ` Ingo Molnar
2009-02-20 17:25               ` Paul E. McKenney
2009-02-20 23:51         ` Vegard Nossum
2009-02-21  1:40           ` Paul E. McKenney
2009-02-21  9:30             ` Vegard Nossum
2009-02-21 17:47               ` Paul E. McKenney
2009-02-21 18:08                 ` Vegard Nossum
2009-02-21 18:33                   ` Paul E. McKenney
2009-02-21 18:37                   ` Vegard Nossum
2009-02-22  3:00                     ` Paul E. McKenney
2009-02-23  5:17                       ` Paul E. McKenney
2009-02-23  8:24                         ` Vegard Nossum
2009-02-23 15:39                           ` Paul E. McKenney
2009-02-23  9:07                         ` Ingo Molnar
2009-02-23  9:17                           ` Andrew Morton
2009-02-23  9:27                             ` Ingo Molnar
2009-02-23 15:56                               ` Paul E. McKenney
2009-02-23 13:29                         ` Nick Piggin
2009-02-23 16:17                           ` Paul E. McKenney
2009-02-23 17:20                             ` Ingo Molnar
2009-02-23 19:10                             ` Andrew Morton
2009-02-23 19:30                               ` Paul E. McKenney
2009-02-23 19:59                                 ` Andrew Morton
2009-02-23 20:12                                   ` Paul E. McKenney
2009-02-23 20:30                                     ` Andrew Morton
2009-02-23 19:33                               ` Ingo Molnar
2009-02-23 20:04                                 ` Andrew Morton
2009-02-23 20:09                                   ` Ingo Molnar
2009-02-23 20:44                                   ` Paul E. McKenney
2009-02-23 20:43                                 ` Paul E. McKenney
2009-02-24  3:23                                   ` Nick Piggin
2009-02-24  3:37                                     ` Paul E. McKenney [this message]
2009-02-21 19:21                 ` Vegard Nossum
2009-02-20 16:01       ` Ingo Molnar
2009-02-20 16:49         ` Paul E. McKenney
2009-02-20 15:56     ` 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=20090224033712.GA7173@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=npiggin@suse.de \
    --cc=penberg@cs.helsinki.fi \
    --cc=stable@kernel.org \
    --cc=vegard.nossum@gmail.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.