mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Pekka Enberg <penberg@kernel.org>, Ingo Molnar <mingo@elte.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Jens Axboe <axboe@kernel.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	werner <w.landgraf@ru.ru>, "H. Peter Anvin" <hpa@zytor.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Christoph Lameter <cl@linux.com>
Subject: Re: [block IO crash] Re: 2.6.39-rc5-git2 boot crashs
Date: Wed, 4 May 2011 15:20:22 +0200	[thread overview]
Message-ID: <20110504132022.GA17294@htj.dyndns.org> (raw)
In-Reply-To: <alpine.LFD.2.02.1105041417330.3005@ionos>

Hello,

On Wed, May 04, 2011 at 03:00:37PM +0200, Thomas Gleixner wrote:
> On Wed, 4 May 2011, Tejun Heo wrote:
> > > > And that code runs with preemption enabled. So when the task gets
> > > > preempted _BEFORE_ it has actuallty written back the data, then the
> > > > race window is wide open.
> > 
> > Hmmm... if it's a race caused by preemtion enabled where it shouldn't
> > be, it's most likely the wrong type of this_cpu_cmpxchg_double() being
> > used in SLUB?  ie. __this_cpu_cmpxchg_double() where it should have
> > been this_cpu_cmpxchg_double()?  Christoph?
> 
> No, the problem is that ELAN prevents the cmpxchg8b, but keeps
> CONFIG_CMPXCHG_LOCAL=y which then results in the unprotected code for
> the following reason:
...
> So the question is whether CMPXCHG_LOCAL for x86 wants to depend on
> X86_CMPXCHG64.
> 
> The other solution is to use irqsafe_cpu_cmpxchg_double() instead of
> this_cpu_cmpxchg_double() in slub.c. 

I think this is the root cause.  CMPXCHG_LOCAL is an optimization
flag, indicating that the processor provides fast local cmpxchg, it
doesn't say anything about local synchronization properties and if the
code required irq exclusion, it should have used
irqsafe_cpu_cmpxchg_double() whether the processor supports it
natively or not, so there's the bug.  Pekka, can you please change the
offending cmpxchg_double() to irqsafe variant?

As for CMPXCHG_LOCAL being set spuriously, maybe introduce
CMPXCHG_DOUBLE_LOCAL?  I don't know.  It's pretty nasty to implement
different high-level code paths depending on CPU features.  We can't
even determine whether the feature will be actually available at
compile time.  But, then again, it might incur noticeable slowdown for
cases where the generic implementation is used.  Has anyone measured
the difference against before the whole this_cpu conversion?

Thanks.

-- 
tejun

  reply	other threads:[~2011-05-04 13:20 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-02 22:28 werner
2011-05-02 23:24 ` Linus Torvalds
     [not found]   ` <web-516990066@zbackend1.aha.ru>
2011-05-03 15:22     ` Linus Torvalds
2011-05-03 19:08       ` Ingo Molnar
2011-05-03 20:17         ` Linus Torvalds
2011-05-03 20:20           ` H. Peter Anvin
2011-05-03 20:50             ` Ingo Molnar
2011-05-03 21:45               ` Linus Torvalds
2011-05-03 22:01                 ` H. Peter Anvin
2011-05-04  7:19                 ` Borislav Petkov
2011-05-04  7:38                   ` Ingo Molnar
2011-05-04  7:55                     ` Borislav Petkov
2011-05-04  8:35           ` [block IO crash] " Ingo Molnar
2011-05-04  9:52             ` Thomas Gleixner
2011-05-04 10:19               ` Ingo Molnar
2011-05-04 10:25                 ` Ingo Molnar
2011-05-04 10:33                   ` Ingo Molnar
2011-05-04 12:37                     ` Ingo Molnar
2011-05-04 12:36                   ` Ingo Molnar
2011-05-04 11:11                 ` Thomas Gleixner
2011-05-04 11:16                   ` Pekka Enberg
2011-05-04 11:27                     ` Tejun Heo
2011-05-04 12:51                       ` Pekka Enberg
2011-05-04 12:57                         ` Ingo Molnar
2011-05-04 13:02                           ` Thomas Gleixner
2011-05-04 13:00                       ` Thomas Gleixner
2011-05-04 13:20                         ` Tejun Heo [this message]
2011-05-04 14:10                           ` Thomas Gleixner
2011-05-04 14:14                             ` Ingo Molnar
2011-05-04 14:36                               ` [PATCH] slub: Fix the lockless code on 32-bit platforms with no 64-bit cmpxchg Ingo Molnar
2011-05-04 14:42                                 ` Christoph Lameter
2011-05-04 16:30                                 ` Ingo Molnar
2011-05-04 21:52                                 ` Ben Greear
2011-05-04 22:00                                   ` Linus Torvalds
2011-05-04 22:22                                     ` Ben Greear
2011-05-04 14:19                             ` [block IO crash] Re: 2.6.39-rc5-git2 boot crashs Christoph Lameter
2011-05-04 14:25                             ` Tejun Heo
2011-05-04 14:35                               ` Christoph Lameter
2011-05-04 15:20                                 ` Ingo Molnar
2011-05-04 14:46                               ` Thomas Gleixner
2011-05-04 15:00                                 ` Christoph Lameter
2011-05-04 15:13                                   ` Linus Torvalds
2011-05-04 15:28                                     ` Christoph Lameter
2011-05-04 15:37                                       ` Pekka Enberg
2011-05-04 15:53                                         ` Linus Torvalds
2011-05-04 18:20                                           ` Linus Torvalds
2011-05-04 18:49                                             ` Christoph Lameter
2011-05-04 19:07                                               ` Linus Torvalds
2011-05-04 19:30                                                 ` Christoph Lameter
2011-05-04 19:38                                                   ` Linus Torvalds
2011-05-04 20:04                                                     ` Christoph Lameter
2011-05-04 20:21                                                       ` Valdis.Kletnieks
2011-05-04 20:32                                                         ` Christoph Lameter
2011-05-04 20:49                                                           ` Ingo Molnar
2011-05-04 21:06                                                       ` Linus Torvalds
2011-05-04 21:19                                                         ` Linus Torvalds
2011-05-04 21:40                                                           ` Thomas Gleixner
2011-05-05  9:54                                                             ` Tejun Heo
2011-05-05 10:18                                                               ` Ingo Molnar
2011-05-05 10:45                                                               ` Thomas Gleixner
2011-05-05 18:20                                                               ` Christoph Lameter
2011-05-05 19:13                                                                 ` Ingo Molnar
2011-05-05 19:53                                                               ` werner
2011-05-05 20:09                                                                 ` Christoph Lameter
2011-05-05 21:12                                                                   ` werner
2011-05-05 22:27                                                                     ` Thomas Gleixner
     [not found]                                             ` <web-518008166@zbackend1.aha.ru>
     [not found]                                               ` <web-518059420@zbackend1.aha.ru>
     [not found]                                                 ` <20110505060204.GA28015@elte.hu>
2011-05-05  6:46                                                   ` werner
2011-05-04 15:37                                       ` [block IO crash] " Linus Torvalds
2011-05-04 16:08                                         ` Christoph Lameter
2011-05-04 16:50                                     ` Ingo Molnar
2011-05-04 17:12                                       ` Thomas Gleixner
2011-05-04 15:41                                   ` Pekka Enberg
2011-05-04 13:22                         ` Ingo Molnar
2011-05-04 14:21                         ` Christoph Lameter
2011-05-04 14:04                     ` Christoph Lameter
2011-05-04 14:07                       ` Tejun Heo
2011-05-04 14:21                       ` Thomas Gleixner
2011-05-04 10:13             ` Ingo Molnar
2011-05-04 10:41               ` Ingo Molnar
2011-05-04 10:45                 ` Ingo Molnar
2011-05-04 11:06                   ` Ingo Molnar
2011-05-04 12:37                     ` Ingo Molnar
2011-05-04 12:47                       ` Ingo Molnar

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=20110504132022.GA17294@htj.dyndns.org \
    --to=tj@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=cl@linux.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=penberg@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=w.landgraf@ru.ru \
    /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

Powered by JetHome