mirror of https://gitee.com/openkylin/linux.git
openrisc: use scratch regs in atomic syscall
The function sys_or1k_atomic was using call-saved registers without restoring their value before returning. This is a faux pas: either we need to restore their values or use scratch regs; the latter is less code so that's the route this patch takes. Thanks to David Hennerström for doing most of the heavy-lifting in tracking this one down. Reported-by: Davd Hennerström <david.hennerstrom@aacmicrotec.com> Signed-off-by: Jonas Bonn <jonas@southpole.se>
This commit is contained in:
parent
7b903e6c02
commit
207e715ff1
|
@ -1117,10 +1117,10 @@ ENTRY(sys_rt_sigreturn)
|
|||
ENTRY(sys_or1k_atomic)
|
||||
/* FIXME: This ignores r3 and always does an XCHG */
|
||||
DISABLE_INTERRUPTS(r17,r19)
|
||||
l.lwz r30,0(r4)
|
||||
l.lwz r28,0(r5)
|
||||
l.sw 0(r4),r28
|
||||
l.sw 0(r5),r30
|
||||
l.lwz r29,0(r4)
|
||||
l.lwz r27,0(r5)
|
||||
l.sw 0(r4),r27
|
||||
l.sw 0(r5),r29
|
||||
ENABLE_INTERRUPTS(r17)
|
||||
l.jr r9
|
||||
l.or r11,r0,r0
|
||||
|
|
Loading…
Reference in New Issue