public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Mikulas Patocka <mpatocka@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	jejb@parisc-linux.org, deller@gmx.de,
	John David Anglin <dave.anglin@bell.net>,
	linux-parisc@vger.kernel.org, linux-kernel@vger.kernel.org,
	chegu_vinod@hp.com, paulmck@linux.vnet.ibm.com,
	Waiman.Long@hp.com, tglx@linutronix.de, riel@redhat.com,
	akpm@linux-foundation.org, davidlohr@hp.com, hpa@zytor.com,
	andi@firstfloor.org, aswin@hp.com, scott.norton@hp.com,
	Jason Low <jason.low2@hp.com>
Subject: Re: [PATCH] fix a race condition in cancelable mcs spinlocks
Date: Sun, 1 Jun 2014 21:20:26 +0200	[thread overview]
Message-ID: <20140601192026.GE16155@laptop.programming.kicks-ass.net> (raw)
In-Reply-To: <alpine.LRH.2.02.1406011342470.20831@file01.intranet.prod.int.rdu2.redhat.com>

On Sun, Jun 01, 2014 at 01:53:11PM -0400, Mikulas Patocka wrote:
> PA-RISC doesn't have xchg or cmpxchg atomic instructions like other
> processors. It only has ldcw and ldcd instructions that load a word (or
> doubleword) from memory and atomically store zero at the same location.
> These instructions can only be used to implement spinlocks, direct
> implementation of other atomic operations is impossible.
> 
> Consequently, Linux xchg and cmpxchg functions are implemented in such a
> way that they hash the address, use the hash to index a spinlock, take the
> spinlock, perform the xchg or cmpxchg operation non-atomically and drop
> the spinlock.
> 
> If you write to some variable with ACCESS_ONCE and use cmpxchg or xchg at
> the same time, you break it. ACCESS_ONCE doesn't take the hashed spinlock,
> so, in this case, cmpxchg or xchg isn't really atomic at all.

And this is really the first place in the kernel that breaks like this?
I've been using xchg() and cmpxchg() without such consideration for
quite a while.

Doesn't sparc32 have similarly broken atomic ops?

Ideally, if we really want to preserve such broken-ness, we'd add some
debugging infrastructure to detect such nonsense.

> This patch fixes the bug by introducing a new type atomic_pointer_t 
> (backed by atomic_long_t) and replacing the offending pointer with it. 
> atomic_long_set takes the hashed spinlock, so it avoids the race 
> condition.

So I hate that twice, once since xchg() and cmpxchg() do not share the
atomic_ prefix, its inappropriate and misleading here, and secondly,
non of this is specific to pointers, xchg() and cmpxchg() take any
(naturally aligned) 'native' size type.


  reply	other threads:[~2014-06-01 19:20 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-01 17:53 [PATCH] fix a race condition in cancelable mcs spinlocks Mikulas Patocka
2014-06-01 19:20 ` Peter Zijlstra [this message]
2014-06-01 20:46   ` John David Anglin
2014-06-01 21:30     ` Peter Zijlstra
2014-06-01 21:46       ` Paul E. McKenney
2014-06-02  9:19       ` Mikulas Patocka
2014-06-02 13:24         ` Paul E. McKenney
2014-06-02 15:57           ` Mikulas Patocka
2014-06-02 16:39             ` Paul E. McKenney
2014-06-02 19:56       ` James Bottomley
2014-06-03  7:56         ` Peter Zijlstra
2014-06-04 12:53           ` Mikulas Patocka
2014-06-02 13:58     ` Mikulas Patocka
2014-06-02 14:02       ` Mikulas Patocka
2014-06-02 15:39         ` John David Anglin
2014-06-02 10:34   ` Mikulas Patocka
2014-06-02 14:14 ` Waiman Long
2014-06-02 15:27   ` Jason Low
2014-06-02 16:00 ` [PATCH v2] introduce atomic_pointer to " Mikulas Patocka
2014-06-02 16:25   ` Peter Zijlstra
2014-06-02 16:30     ` Peter Zijlstra
2014-06-02 16:46       ` Paul E. McKenney
2014-06-02 17:33       ` Waiman Long
2014-06-02 20:05         ` Peter Zijlstra
2014-06-02 20:22           ` Linus Torvalds
2014-06-02 21:02             ` Paul E. McKenney
2014-06-02 21:12               ` Linus Torvalds
2014-06-02 22:08                 ` Paul E. McKenney
2014-06-02 22:44                   ` Eric Dumazet
2014-06-02 23:17                     ` Paul E. McKenney
2014-06-02 23:53                       ` Eric Dumazet
2014-06-03  0:28                         ` Paul E. McKenney
2014-06-02 22:55                   ` Linus Torvalds
2014-06-03 16:48                     ` Paul E. McKenney
2014-06-03  7:54             ` Peter Zijlstra
2014-06-02 20:24           ` James Bottomley
2014-06-02 16:43     ` Paul E. McKenney
2014-06-02 17:14       ` James Bottomley
2014-06-02 17:29       ` Waiman Long
2014-06-02 17:09     ` Linus Torvalds
2014-06-02 17:12       ` Davidlohr Bueso
2014-06-02 17:42         ` Waiman Long
2014-06-02 20:46       ` Mikulas Patocka
2014-06-02 20:53         ` Linus Torvalds
2014-06-02 21:12           ` Mikulas Patocka
2014-06-03  7:36             ` Peter Zijlstra
2014-06-03 11:14               ` Mikulas Patocka
2014-06-03 13:24                 ` Peter Zijlstra
2014-06-03 14:18                   ` Mikulas Patocka
2014-06-03 14:07               ` Paul E. McKenney
2014-06-03 15:09                 ` Peter Zijlstra
2014-06-03 15:56                   ` Paul E. McKenney
2014-06-03  7:20         ` Peter Zijlstra
2014-06-02 21:03       ` Paul E. McKenney
2014-06-06 15:06       ` Peter Zijlstra
2014-06-06 15:15         ` Paul E. McKenney
2014-06-06 15:42         ` Davidlohr Bueso
2014-06-02 16:50   ` Jason Low
2014-06-02 17:03     ` Paul E. McKenney
2014-06-02 17:25     ` Waiman Long
2014-06-02 17:38       ` H. Peter Anvin

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=20140601192026.GE16155@laptop.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=Waiman.Long@hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=aswin@hp.com \
    --cc=chegu_vinod@hp.com \
    --cc=dave.anglin@bell.net \
    --cc=davidlohr@hp.com \
    --cc=deller@gmx.de \
    --cc=hpa@zytor.com \
    --cc=jason.low2@hp.com \
    --cc=jejb@parisc-linux.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=mpatocka@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=riel@redhat.com \
    --cc=scott.norton@hp.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    /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