File tree Expand file tree Collapse file tree 2 files changed +6
-10
lines changed Expand file tree Collapse file tree 2 files changed +6
-10
lines changed Original file line number Diff line number Diff line change @@ -37,8 +37,8 @@ static inline void arch_spin_unlock(arch_spinlock_t *x)
37
37
volatile unsigned int * a ;
38
38
39
39
a = __ldcw_align (x );
40
- mb ();
41
- * a = 1 ;
40
+ /* Release with ordered store. */
41
+ __asm__ __volatile__( "stw,ma %0,0(%1)" : : "r" ( 1 ), "r" ( a ) : "memory" ) ;
42
42
}
43
43
44
44
static inline int arch_spin_trylock (arch_spinlock_t * x )
Original file line number Diff line number Diff line change @@ -640,8 +640,7 @@ cas_action:
640
640
sub ,<> %r28, %r25, %r0
641
641
2: stw %r24, 0 (%r26)
642
642
/* Free lock */
643
- sync
644
- stw %r20, 0 (%sr2,%r20)
643
+ stw,ma %r20, 0 (%sr2,%r20)
645
644
#if ENABLE_LWS_DEBUG
646
645
/* Clear thread register indicator */
647
646
stw %r0, 4 (%sr2,%r20)
@@ -655,8 +654,7 @@ cas_action:
655
654
3:
656
655
/* Error occurred on load or store */
657
656
/* Free lock */
658
- sync
659
- stw %r20, 0 (%sr2,%r20)
657
+ stw,ma %r20, 0 (%sr2,%r20)
660
658
#if ENABLE_LWS_DEBUG
661
659
stw %r0, 4 (%sr2,%r20)
662
660
#endif
@@ -857,8 +855,7 @@ cas2_action:
857
855
858
856
cas2_end:
859
857
/* Free lock */
860
- sync
861
- stw %r20, 0 (%sr2,%r20)
858
+ stw,ma %r20, 0 (%sr2,%r20)
862
859
/* Enable interrupts */
863
860
ssm PSW_SM_I, %r0
864
861
/* Return to userspace, set no error */
@@ -868,8 +865,7 @@ cas2_end:
868
865
22:
869
866
/* Error occurred on load or store */
870
867
/* Free lock */
871
- sync
872
- stw %r20, 0 (%sr2,%r20)
868
+ stw,ma %r20, 0 (%sr2,%r20)
873
869
ssm PSW_SM_I, %r0
874
870
ldo 1 (%r0),%r28
875
871
b lws_exit
You can’t perform that action at this time.
0 commit comments