From: Edward Falk <efalk@google.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] Fix x86_64 _spin_lock_irqsave()
Date: Wed, 23 Aug 2006 19:57:01 -0700 [thread overview]
Message-ID: <44ED157D.6050607@google.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 279 bytes --]
Add spin_lock_string_flags and _raw_spin_lock_flags() to
asm-x86_64/spinlock.h so that _spin_lock_irqsave() has the same
semantics on x86_64 as it does on i386 and does *not* have interrupts
disabled while it is waiting for the lock.
This fix is courtesy of Michael Davidson
[-- Attachment #2: 2012926.patch --]
[-- Type: text/plain, Size: 1665 bytes --]
Change 2012926 by md@md-test on 2006/01/23 18:28:12
Add spin_lock_string_flags and _raw_spin_lock_flags() to
asm-x86_64/spinlock.h so that _spin_lock_irqsave() has the
same semantics on x86_64 as it does on i386 and does *not*
have interrupts disabled while it is waiting for the lock.
PRESUBMIT=passed
R=mbligh mikew
OCL=2010261
diff -uprN linux-2.6.17/include/asm-x86_64/spinlock.h 2012926/include/asm-x86_64/spinlock.h
--- linux-2.6.17/include/asm-x86_64/spinlock.h 2006-06-17 18:49:35.000000000 -0700
+++ 2012926/include/asm-x86_64/spinlock.h 2006-07-12 16:09:50.000000000 -0700
@@ -32,6 +32,23 @@
"jmp 1b\n" \
LOCK_SECTION_END
+#define __raw_spin_lock_string_flags \
+ "\n1:\t" \
+ "lock ; decb %0\n\t" \
+ "js 2f\n\t" \
+ LOCK_SECTION_START("") \
+ "2:\t" \
+ "test $0x200, %1\n\t" \
+ "jz 3f\n\t" \
+ "sti\n\t" \
+ "3:\t" \
+ "rep;nop\n\t" \
+ "cmpb $0, %0\n\t" \
+ "jle 3b\n\t" \
+ "cli\n\t" \
+ "jmp 1b\n" \
+ LOCK_SECTION_END
+
#define __raw_spin_unlock_string \
"movl $1,%0" \
:"=m" (lock->slock) : : "memory"
@@ -43,8 +60,6 @@ static inline void __raw_spin_lock(raw_s
:"=m" (lock->slock) : : "memory");
}
-#define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock)
-
static inline int __raw_spin_trylock(raw_spinlock_t *lock)
{
int oldval;
@@ -57,6 +72,13 @@ static inline int __raw_spin_trylock(raw
return oldval > 0;
}
+static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags)
+{
+ __asm__ __volatile__(
+ __raw_spin_lock_string_flags
+ :"=m" (lock->slock) : "r" (flags) : "memory");
+}
+
static inline void __raw_spin_unlock(raw_spinlock_t *lock)
{
__asm__ __volatile__(
next reply other threads:[~2006-08-24 2:57 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-24 2:57 Edward Falk [this message]
2006-08-24 3:10 ` [PATCH] Fix x86_64 _spin_lock_irqsave() Nick Piggin
2006-08-24 4:48 ` Andrew Morton
2006-08-24 15:53 ` Martin Bligh
2006-08-26 7:52 ` Keith Owens
2006-08-24 6:45 ` Andi Kleen
2006-08-24 11:04 ` Suleiman Souhlal
2006-08-24 11:13 ` Arjan van de Ven
2006-08-24 11:32 ` Andi Kleen
2006-08-24 12:33 ` Suleiman Souhlal
2006-08-24 13:21 ` Arjan van de Ven
2006-08-24 13:44 ` Suleiman Souhlal
2006-08-25 4:38 ` Andrew Morton
2006-08-25 5:33 ` Nick Piggin
2006-08-25 6:21 ` Andi Kleen
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=44ED157D.6050607@google.com \
--to=efalk@google.com \
--cc=linux-kernel@vger.kernel.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 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.