提交 f4125cfd 编写于 作者: J John David Anglin 提交者: Helge Deller

parisc: Avoid trashing sr2 and sr3 in LWS code

There is no need to trash sr2 and sr3 in the Light-weight syscall (LWS).  sr2
already points to kernel space (it's zero in userspace, otherwise syscalls
wouldn't work), and since the LWS code is executed in userspace, we can simply
ignore to preload sr3.
Signed-off-by: NJohn David Anglin <dave.anglin@bell.net>
Signed-off-by: NHelge Deller <deller@gmx.de>
上级 6f63d0f6
...@@ -474,11 +474,6 @@ lws_start: ...@@ -474,11 +474,6 @@ lws_start:
comiclr,>> __NR_lws_entries, %r20, %r0 comiclr,>> __NR_lws_entries, %r20, %r0
b,n lws_exit_nosys b,n lws_exit_nosys
/* WARNING: Trashing sr2 and sr3 */
mfsp %sr7,%r1 /* get userspace into sr3 */
mtsp %r1,%sr3
mtsp %r0,%sr2 /* get kernel space into sr2 */
/* Load table start */ /* Load table start */
ldil L%lws_table, %r1 ldil L%lws_table, %r1
ldo R%lws_table(%r1), %r28 /* Scratch use of r28 */ ldo R%lws_table(%r1), %r28 /* Scratch use of r28 */
...@@ -627,9 +622,9 @@ cas_action: ...@@ -627,9 +622,9 @@ cas_action:
stw %r1, 4(%sr2,%r20) stw %r1, 4(%sr2,%r20)
#endif #endif
/* The load and store could fail */ /* The load and store could fail */
1: ldw,ma 0(%sr3,%r26), %r28 1: ldw,ma 0(%r26), %r28
sub,<> %r28, %r25, %r0 sub,<> %r28, %r25, %r0
2: stw,ma %r24, 0(%sr3,%r26) 2: stw,ma %r24, 0(%r26)
/* Free lock */ /* Free lock */
stw,ma %r20, 0(%sr2,%r20) stw,ma %r20, 0(%sr2,%r20)
#if ENABLE_LWS_DEBUG #if ENABLE_LWS_DEBUG
...@@ -706,9 +701,9 @@ lws_compare_and_swap_2: ...@@ -706,9 +701,9 @@ lws_compare_and_swap_2:
nop nop
/* 8bit load */ /* 8bit load */
4: ldb 0(%sr3,%r25), %r25 4: ldb 0(%r25), %r25
b cas2_lock_start b cas2_lock_start
5: ldb 0(%sr3,%r24), %r24 5: ldb 0(%r24), %r24
nop nop
nop nop
nop nop
...@@ -716,9 +711,9 @@ lws_compare_and_swap_2: ...@@ -716,9 +711,9 @@ lws_compare_and_swap_2:
nop nop
/* 16bit load */ /* 16bit load */
6: ldh 0(%sr3,%r25), %r25 6: ldh 0(%r25), %r25
b cas2_lock_start b cas2_lock_start
7: ldh 0(%sr3,%r24), %r24 7: ldh 0(%r24), %r24
nop nop
nop nop
nop nop
...@@ -726,9 +721,9 @@ lws_compare_and_swap_2: ...@@ -726,9 +721,9 @@ lws_compare_and_swap_2:
nop nop
/* 32bit load */ /* 32bit load */
8: ldw 0(%sr3,%r25), %r25 8: ldw 0(%r25), %r25
b cas2_lock_start b cas2_lock_start
9: ldw 0(%sr3,%r24), %r24 9: ldw 0(%r24), %r24
nop nop
nop nop
nop nop
...@@ -737,14 +732,14 @@ lws_compare_and_swap_2: ...@@ -737,14 +732,14 @@ lws_compare_and_swap_2:
/* 64bit load */ /* 64bit load */
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
10: ldd 0(%sr3,%r25), %r25 10: ldd 0(%r25), %r25
11: ldd 0(%sr3,%r24), %r24 11: ldd 0(%r24), %r24
#else #else
/* Load new value into r22/r23 - high/low */ /* Load new value into r22/r23 - high/low */
10: ldw 0(%sr3,%r25), %r22 10: ldw 0(%r25), %r22
11: ldw 4(%sr3,%r25), %r23 11: ldw 4(%r25), %r23
/* Load new value into fr4 for atomic store later */ /* Load new value into fr4 for atomic store later */
12: flddx 0(%sr3,%r24), %fr4 12: flddx 0(%r24), %fr4
#endif #endif
cas2_lock_start: cas2_lock_start:
...@@ -794,30 +789,30 @@ cas2_action: ...@@ -794,30 +789,30 @@ cas2_action:
ldo 1(%r0),%r28 ldo 1(%r0),%r28
/* 8bit CAS */ /* 8bit CAS */
13: ldb,ma 0(%sr3,%r26), %r29 13: ldb,ma 0(%r26), %r29
sub,= %r29, %r25, %r0 sub,= %r29, %r25, %r0
b,n cas2_end b,n cas2_end
14: stb,ma %r24, 0(%sr3,%r26) 14: stb,ma %r24, 0(%r26)
b cas2_end b cas2_end
copy %r0, %r28 copy %r0, %r28
nop nop
nop nop
/* 16bit CAS */ /* 16bit CAS */
15: ldh,ma 0(%sr3,%r26), %r29 15: ldh,ma 0(%r26), %r29
sub,= %r29, %r25, %r0 sub,= %r29, %r25, %r0
b,n cas2_end b,n cas2_end
16: sth,ma %r24, 0(%sr3,%r26) 16: sth,ma %r24, 0(%r26)
b cas2_end b cas2_end
copy %r0, %r28 copy %r0, %r28
nop nop
nop nop
/* 32bit CAS */ /* 32bit CAS */
17: ldw,ma 0(%sr3,%r26), %r29 17: ldw,ma 0(%r26), %r29
sub,= %r29, %r25, %r0 sub,= %r29, %r25, %r0
b,n cas2_end b,n cas2_end
18: stw,ma %r24, 0(%sr3,%r26) 18: stw,ma %r24, 0(%r26)
b cas2_end b cas2_end
copy %r0, %r28 copy %r0, %r28
nop nop
...@@ -825,22 +820,22 @@ cas2_action: ...@@ -825,22 +820,22 @@ cas2_action:
/* 64bit CAS */ /* 64bit CAS */
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
19: ldd,ma 0(%sr3,%r26), %r29 19: ldd,ma 0(%r26), %r29
sub,*= %r29, %r25, %r0 sub,*= %r29, %r25, %r0
b,n cas2_end b,n cas2_end
20: std,ma %r24, 0(%sr3,%r26) 20: std,ma %r24, 0(%r26)
copy %r0, %r28 copy %r0, %r28
#else #else
/* Compare first word */ /* Compare first word */
19: ldw,ma 0(%sr3,%r26), %r29 19: ldw,ma 0(%r26), %r29
sub,= %r29, %r22, %r0 sub,= %r29, %r22, %r0
b,n cas2_end b,n cas2_end
/* Compare second word */ /* Compare second word */
20: ldw,ma 4(%sr3,%r26), %r29 20: ldw,ma 4(%r26), %r29
sub,= %r29, %r23, %r0 sub,= %r29, %r23, %r0
b,n cas2_end b,n cas2_end
/* Perform the store */ /* Perform the store */
21: fstdx %fr4, 0(%sr3,%r26) 21: fstdx %fr4, 0(%r26)
copy %r0, %r28 copy %r0, %r28
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册