spinlock: bug fix in spinlock code

Using ebx will truncate the high 32bit part of 64bit virtual address.
So using rbx instead of ebx.

Signed-off-by: Zheng, Gen <gen.zheng@intel.com>
Reviewed-by: Yakui, Zhao <yakui.zhao@intel.com>
This commit is contained in:
Zheng, Gen 2018-04-12 13:57:05 +08:00 committed by lijinxia
parent 81b26dacc4
commit 1eb3854555

View File

@ -69,13 +69,13 @@ static inline int spinlock_release(spinlock_t *lock)
.macro spinlock_obtain lock .macro spinlock_obtain lock
movl $1, % eax movl $1, % eax
lea \lock, % ebx lea \lock, % rbx
lock xaddl % eax, SYNC_SPINLOCK_HEAD_OFFSET(%ebx) lock xaddl % eax, SYNC_SPINLOCK_HEAD_OFFSET(%rbx)
cmpl % eax, SYNC_SPINLOCK_TAIL_OFFSET(%ebx) cmpl % eax, SYNC_SPINLOCK_TAIL_OFFSET(%rbx)
jz 1f jz 1f
2 : 2 :
pause pause
cmpl % eax, SYNC_SPINLOCK_TAIL_OFFSET(%ebx) cmpl % eax, SYNC_SPINLOCK_TAIL_OFFSET(%rbx)
jnz 2b jnz 2b
1 : 1 :
.endm .endm
@ -83,8 +83,8 @@ static inline int spinlock_release(spinlock_t *lock)
#define spinlock_obtain(x) spinlock_obtain lock = (x) #define spinlock_obtain(x) spinlock_obtain lock = (x)
.macro spinlock_release lock .macro spinlock_release lock
lea \lock, % ebx lea \lock, % rbx
lock incl SYNC_SPINLOCK_TAIL_OFFSET(%ebx) lock incl SYNC_SPINLOCK_TAIL_OFFSET(%rbx)
.endm .endm
#define spinlock_release(x) spinlock_release lock = (x) #define spinlock_release(x) spinlock_release lock = (x)