Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22db37ec authored by Chris Wright's avatar Chris Wright Committed by Linus Torvalds
Browse files

[PATCH] i386: rwlock.h fix smp alternatives fix



Commit 8c749327 ("i386: Remove
alternative_smp") did not actually compile on x86 with CONFIG_SMP.

This fixes the __build_read/write_lock helpers.  I've boot tested on
SMP.

[ Andi: "Oops, I think that was a quilt unrefreshed patch.  Sorry.  I
  fixed those before testing, but then still send out the old patch." ]

Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
Cc: Gerd Hoffmann <kraxel@suse.de>
Acked-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 4c153431
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -21,21 +21,21 @@
#define RW_LOCK_BIAS_STR	"0x01000000"

#define __build_read_lock_ptr(rw, helper)   \
	asm volatile(LOCK_PREFIX " ; subl $1,(%0)\n\t" \
	asm volatile(LOCK_PREFIX " subl $1,(%0)\n\t" \
			"jns 1f\n" \
			"call " helper "\n\t" \
			"1:\n" \
			:"a" (rw) : "memory")
			::"a" (rw) : "memory")

#define __build_read_lock_const(rw, helper)   \
	asm volatile(LOCK_PREFIX " ; subl $1,%0\n\t" \
	asm volatile(LOCK_PREFIX " subl $1,%0\n\t" \
			"jns 1f\n" \
			"pushl %%eax\n\t" \
			"leal %0,%%eax\n\t" \
			"call " helper "\n\t" \
			"popl %%eax\n\t" \
			"1:\n" : \
			"+m" (*(volatile int *)rw) : : "memory")
			"1:\n" \
			:"+m" (*(volatile int *)rw) : : "memory")

#define __build_read_lock(rw, helper)	do { \
						if (__builtin_constant_p(rw)) \
@@ -45,23 +45,21 @@
					} while (0)

#define __build_write_lock_ptr(rw, helper) \
	asm volatile(LOCK_PREFIX " ; subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
	asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \
			"jz 1f\n" \
			"call " helper "\n\t" \
			"1:\n", \
			"subl $" RW_LOCK_BIAS_STR ",(%0)\n\t", \
			:"a" (rw) : "memory")
			"1:\n" \
			::"a" (rw) : "memory")

#define __build_write_lock_const(rw, helper) \
	asm volatile(LOCK_PREFIX " ; subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
	asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",%0\n\t" \
			"jz 1f\n" \
			"pushl %%eax\n\t" \
			"leal %0,%%eax\n\t" \
			"call " helper "\n\t" \
			"popl %%eax\n\t" \
			"1:\n", \
			"subl $" RW_LOCK_BIAS_STR ",%0\n\t", \
			"+m" (*(volatile int *)rw) : : "memory")
			"1:\n" \
			:"+m" (*(volatile int *)rw) : : "memory")

#define __build_write_lock(rw, helper)	do { \
						if (__builtin_constant_p(rw)) \