x86/atomic changes for v3.4
Subsystems (2)
Linus,
Please pull the latest x86-atomic-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-atomic-for-linus
HEAD: cb8095bba6d24118135a5683a956f4f4fb5f17bb x86: atomic64 assembly improvements
Thanks,
Ingo
------------------>
Jan Beulich (2):
x86: Adjust asm constraints in atomic64 wrappers
x86: atomic64 assembly improvements
arch/x86/include/asm/alternative.h | 6 ++ arch/x86/include/asm/atomic64_32.h | 146 +++++++++++++++++++---------------- arch/x86/lib/atomic64_32.c | 59 +-------------- arch/x86/lib/atomic64_386_32.S | 6 +- arch/x86/lib/atomic64_cx8_32.S | 29 +++----- 5 files changed, 101 insertions(+), 145 deletions(-)
arch/x86/include/asm/alternative.h +6 -0
@@ -145,6 +145,12 @@ static inline int alternatives_text_reserved(void *start, void *end)*/ #define ASM_OUTPUT2(a...) a +/* +* use this macro if you need clobbers but no inputs in +* alternative_{input,io,call}() +*/ +#define ASM_NO_INPUT_CLOBBER(clbr...) "i" (0) : clbr +struct paravirt_patch_site ;#ifdef CONFIG_PARAVIRT void apply_paravirt(struct paravirt_patch_site *start,
arch/x86/include/asm/atomic64_32.h +79 -67
247 lines not on this page · raw message
arch/x86/lib/atomic64_32.c +2 -57
61 lines not on this page · raw message
arch/x86/lib/atomic64_386_32.S +3 -3
@@ -137,13 +137,13 @@ BEGIN(dec_return) RET_ENDP #undef v -#define v %ecx +#define v %esi BEGIN(add_unless) - addl %eax, %esi + addl %eax, %ecx adcl %edx, %edi addl (v), %eax adcl 4(v), %edx - cmpl %eax, %esi + cmpl %eax, %ecx je 3f 1: movl %eax, (v)
arch/x86/lib/atomic64_cx8_32.S +11 -18
@@ -55,8 +55,6 @@ ENDPROC(atomic64_set_cx8) ENTRY(atomic64_xchg_cx8) CFI_STARTPROC - movl %ebx, %eax - movl %ecx, %edx 1: LOCK_PREFIX cmpxchg8b (%esi)
@@ -78,7 +76,7 @@ ENTRY(atomic64_\func\()_return_cx8) movl %edx, %edi movl %ecx, %ebp - read64 %ebp + read64 %ecx 1: movl %eax, %ebx movl %edx, %ecx
@@ -159,23 +157,22 @@ ENTRY(atomic64_add_unless_cx8) SAVE ebx /* these just push these two parameters on the stack */ SAVE edi - SAVE esi + SAVE ecx - movl %ecx, %ebp - movl %eax, %esi + movl %eax, %ebp movl %edx, %edi - read64 %ebp + read64 %esi 1: cmpl %eax, 0(%esp) je 4f 2: movl %eax, %ebx movl %edx, %ecx - addl %esi, %ebx + addl %ebp, %ebx adcl %edi, %ecx LOCK_PREFIX - cmpxchg8b (%ebp) + cmpxchg8b (%esi) jne 1b movl $1, %eax
@@ -199,13 +196,13 @@ ENTRY(atomic64_inc_not_zero_cx8) read64 %esi 1: - testl %eax, %eax - je 4f -2: + movl %eax, %ecx + orl %edx, %ecx + jz 3f movl %eax, %ebx - movl %edx, %ecx + xorl %ecx, %ecx addl $1, %ebx - adcl $0, %ecx + adcl %edx, %ecx LOCK_PREFIX cmpxchg8b (%esi) jne 1b
@@ -214,9 +211,5 @@ ENTRY(atomic64_inc_not_zero_cx8) 3: RESTORE ebx ret -4: - testl %edx, %edx - jne 2b - jmp 3b CFI_ENDPROC ENDPROC(atomic64_inc_not_zero_cx8)