Merge tag 'v6.8-rc4' into x86/percpu, to resolve conflicts and refresh the branch
[linux-2.6-microblaze.git] / arch / x86 / lib / cmpxchg8b_emu.S
index 873e4ef..1c96be7 100644 (file)
@@ -24,12 +24,12 @@ SYM_FUNC_START(cmpxchg8b_emu)
        pushfl
        cli
 
-       cmpl    0(%esi), %eax
+       cmpl    (%esi), %eax
        jne     .Lnot_same
        cmpl    4(%esi), %edx
        jne     .Lnot_same
 
-       movl    %ebx, 0(%esi)
+       movl    %ebx, (%esi)
        movl    %ecx, 4(%esi)
 
        orl     $X86_EFLAGS_ZF, (%esp)
@@ -38,7 +38,7 @@ SYM_FUNC_START(cmpxchg8b_emu)
        RET
 
 .Lnot_same:
-       movl    0(%esi), %eax
+       movl    (%esi), %eax
        movl    4(%esi), %edx
 
        andl    $(~X86_EFLAGS_ZF), (%esp)
@@ -53,18 +53,30 @@ EXPORT_SYMBOL(cmpxchg8b_emu)
 
 #ifndef CONFIG_UML
 
+/*
+ * Emulate 'cmpxchg8b %fs:(%rsi)'
+ *
+ * Inputs:
+ * %esi : memory location to compare
+ * %eax : low 32 bits of old value
+ * %edx : high 32 bits of old value
+ * %ebx : low 32 bits of new value
+ * %ecx : high 32 bits of new value
+ *
+ * Notably this is not LOCK prefixed and is not safe against NMIs
+ */
 SYM_FUNC_START(this_cpu_cmpxchg8b_emu)
 
        pushfl
        cli
 
-       cmpl    PER_CPU_VAR(0(%esi)), %eax
+       cmpl    __percpu (%esi), %eax
        jne     .Lnot_same2
-       cmpl    PER_CPU_VAR(4(%esi)), %edx
+       cmpl    __percpu 4(%esi), %edx
        jne     .Lnot_same2
 
-       movl    %ebx, PER_CPU_VAR(0(%esi))
-       movl    %ecx, PER_CPU_VAR(4(%esi))
+       movl    %ebx, __percpu (%esi)
+       movl    %ecx, __percpu 4(%esi)
 
        orl     $X86_EFLAGS_ZF, (%esp)
 
@@ -72,8 +84,8 @@ SYM_FUNC_START(this_cpu_cmpxchg8b_emu)
        RET
 
 .Lnot_same2:
-       movl    PER_CPU_VAR(0(%esi)), %eax
-       movl    PER_CPU_VAR(4(%esi)), %edx
+       movl    __percpu (%esi), %eax
+       movl    __percpu 4(%esi), %edx
 
        andl    $(~X86_EFLAGS_ZF), (%esp)