public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: Keith Owens <kaos@sgi•com>
To: mita@miraclelinux•com (Akinobu Mita)
Cc: linux-mips@linux-mips•org, linux-ia64@vger•kernel.org,
	Ian Molton <spyro@f2s•com>, Andi Kleen <ak@suse•de>,
	David Howells <dhowells@redhat•com>,
	linuxppc-dev@ozlabs•org, Greg Ungerer <gerg@uclinux•org>,
	sparclinux@vger•kernel.org,
	Miles Bader <uclinux-v850@lsi•nec.co.jp>,
	Yoshinori Sato <ysato@users•sourceforge.jp>,
	Hirokazu Takata <takata@linux-m32r•org>,
	linuxsh-dev@lists•sourceforge.net,
	Linus Torvalds <torvalds@osdl•org>,
	Ivan Kokshaysky <ink@jurassic•park.msu.ru>,
	Richard Henderson <rth@twiddle•net>,
	Chris Zankel <chris@zankel•net>,
	dev-etrax@axis•com, ultralinux@vger•kernel.org,
	linux-m68k@lists•linux-m68k.org, linux-kernel@vger•kernel.org,
	linuxsh-shmedia-dev@lists•sourceforge.net, linux390@de•ibm.com,
	Russell King <rmk@arm•linux.org.uk>,
	parisc-linux@parisc-linux•org
Subject: Re: [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h
Date: Wed, 25 Jan 2006 22:54:43 +1100	[thread overview]
Message-ID: <24086.1138190083@ocs3.ocs.com.au> (raw)
In-Reply-To: Your message of "Wed, 25 Jan 2006 20:32:06 +0900." <20060125113206.GD18584@miraclelinux.com>

Akinobu Mita (on Wed, 25 Jan 2006 20:32:06 +0900) wrote:
>o generic {,test_and_}{set,clear,change}_bit() (atomic bitops)
...
>+static __inline__ void set_bit(int nr, volatile unsigned long *addr)
>+{
>+	unsigned long mask = BITOP_MASK(nr);
>+	unsigned long *p = ((unsigned long *)addr) + BITOP_WORD(nr);
>+	unsigned long flags;
>+
>+	_atomic_spin_lock_irqsave(p, flags);
>+	*p  |= mask;
>+	_atomic_spin_unlock_irqrestore(p, flags);
>+}

Be very, very careful about using these generic *_bit() routines if the
architecture supports non-maskable interrupts.

NMI events can occur at any time, including when interrupts have been
disabled by *_irqsave().  So you can get NMI events occurring while a
*_bit fucntion is holding a spin lock.  If the NMI handler also wants
to do bit manipulation (and they do) then you can get a deadlock
between the original caller of *_bit() and the NMI handler.

Doing any work that requires spinlocks in an NMI handler is just asking
for deadlock problems.  The generic *_bit() routines add a hidden
spinlock behind what was previously a safe operation.  I would even say
that any arch that supports any type of NMI event _must_ define its own
bit routines that do not rely on your _atomic_spin_lock_irqsave() and
its hash of spinlocks.

  reply	other threads:[~2006-01-25 12:20 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-25 11:26 [PATCH 0/6] RFC: use include/asm-generic/bitops.h Akinobu Mita
2006-01-25 11:28 ` [PATCH 1/6] {set,clear,test}_bit() related cleanup Akinobu Mita
2006-01-26 16:14   ` Pavel Machek
2006-01-26 16:47     ` Russell King
2006-01-26 19:14     ` Paul Jackson
2006-01-25 11:30 ` [PATCH 2/6] use non atomic operations for minix_*_bit() and ext2_*_bit() Akinobu Mita
2006-01-25 11:32 ` [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Akinobu Mita
2006-01-25 11:54   ` Keith Owens [this message]
2006-01-26  2:13     ` Akinobu Mita
2006-01-25 20:02   ` Russell King
2006-01-25 23:25     ` Ian Molton
2006-01-26  0:06     ` Richard Henderson
2006-01-26  4:34       ` Edgar Toernig
2006-01-26 17:30         ` Richard Henderson
2006-01-26  8:55       ` Russell King
2006-01-26 16:18         ` [parisc-linux] " Grant Grundler
2006-01-26 16:30           ` Nicolas Pitre
2006-01-26 16:40           ` Russell King
2006-01-26 23:04             ` Grant Grundler
2006-01-26 23:03               ` Russell King
2006-01-29  7:12                 ` Stuart Brady
2006-01-30  4:03                   ` David S. Miller
2006-01-30 17:06                   ` Ralf Baechle
2006-01-30 19:50                     ` Stuart Brady
2006-01-30 23:02                       ` David S. Miller
2006-01-27  0:28               ` [parisc-linux] Re: [PATCH 3/6] C-language equivalents of John David Anglin
2006-01-27 12:51   ` [PATCH 3/6] C-language equivalents of include/asm-*/bitops.h Hirokazu Takata
2006-01-30  3:29     ` Akinobu Mita
2006-01-25 11:34 ` [PATCH 5/6] fix warning on test_ti_thread_flag() Akinobu Mita
2006-01-25 12:28   ` Geert Uytterhoeven
2006-01-25 22:28   ` Paul Mackerras
2006-01-26  0:04     ` David S. Miller
2006-01-25 11:35 ` [PATCH 6/6] remove unused generic bitops in include/linux/bitops.h Akinobu Mita
     [not found] ` <20060125113336.GE18584@miraclelinux.com>
2006-01-26  1:49   ` [PATCH 4/6] use include/asm-generic/bitops for each architecture Akinobu Mita
2006-01-27 13:04     ` Hirokazu Takata
2006-01-30  3:15       ` Akinobu Mita

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=24086.1138190083@ocs3.ocs.com.au \
    --to=kaos@sgi$(echo .)com \
    --cc=ak@suse$(echo .)de \
    --cc=chris@zankel$(echo .)net \
    --cc=dev-etrax@axis$(echo .)com \
    --cc=dhowells@redhat$(echo .)com \
    --cc=gerg@uclinux$(echo .)org \
    --cc=ink@jurassic$(echo .)park.msu.ru \
    --cc=linux-ia64@vger$(echo .)kernel.org \
    --cc=linux-kernel@vger$(echo .)kernel.org \
    --cc=linux-m68k@lists$(echo .)linux-m68k.org \
    --cc=linux-mips@linux-mips$(echo .)org \
    --cc=linux390@de$(echo .)ibm.com \
    --cc=linuxppc-dev@ozlabs$(echo .)org \
    --cc=linuxsh-dev@lists$(echo .)sourceforge.net \
    --cc=linuxsh-shmedia-dev@lists$(echo .)sourceforge.net \
    --cc=mita@miraclelinux$(echo .)com \
    --cc=parisc-linux@parisc-linux$(echo .)org \
    --cc=rmk@arm$(echo .)linux.org.uk \
    --cc=rth@twiddle$(echo .)net \
    --cc=sparclinux@vger$(echo .)kernel.org \
    --cc=spyro@f2s$(echo .)com \
    --cc=takata@linux-m32r$(echo .)org \
    --cc=torvalds@osdl$(echo .)org \
    --cc=uclinux-v850@lsi$(echo .)nec.co.jp \
    --cc=ultralinux@vger$(echo .)kernel.org \
    --cc=ysato@users$(echo .)sourceforge.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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