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

Commit 1a015b56 authored by Andi Kleen's avatar Andi Kleen Committed by Andi Kleen
Browse files

[PATCH] i386: Remove const case for rwlocks



rwlocks are now out of line, so it near never triggers.  Also it was
incompatible with the new dwarf2 unwinder because it had unannotiatable
push/pops.

Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent 9a0b26e6
Loading
Loading
Loading
Loading
+2 −36
Original line number Diff line number Diff line
@@ -20,52 +20,18 @@
#define RW_LOCK_BIAS		 0x01000000
#define RW_LOCK_BIAS_STR	"0x01000000"

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

#define __build_read_lock_const(rw, helper)   \
	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")

#define __build_read_lock(rw, helper)	do { \
						if (__builtin_constant_p(rw)) \
							__build_read_lock_const(rw, helper); \
						else \
							__build_read_lock_ptr(rw, helper); \
					} while (0)

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

#define __build_write_lock_const(rw, helper) \
	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" \
			:"+m" (*(volatile int *)rw) : : "memory")

#define __build_write_lock(rw, helper)	do { \
						if (__builtin_constant_p(rw)) \
							__build_write_lock_const(rw, helper); \
						else \
							__build_write_lock_ptr(rw, helper); \
					} while (0)

#endif