s390/vdso: replace stck with stcke
If gettimeofday / clock_gettime are called multiple times in a row the STCK instruction will stall until a difference in the result is visible. This unnecessarily slows down the vdso calls, use stcke instead of stck to get rid of the stall. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
369e8c3553
commit
070b7be633
|
@ -30,8 +30,8 @@ __kernel_clock_gettime:
|
||||||
1: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
1: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
||||||
tml %r4,0x0001 /* pending update ? loop */
|
tml %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 1b
|
jnz 1b
|
||||||
stck 24(%r15) /* Store TOD clock */
|
stcke 24(%r15) /* Store TOD clock */
|
||||||
lm %r0,%r1,24(%r15)
|
lm %r0,%r1,25(%r15)
|
||||||
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
||||||
brc 3,2f
|
brc 3,2f
|
||||||
|
@ -72,8 +72,8 @@ __kernel_clock_gettime:
|
||||||
11: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
11: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
||||||
tml %r4,0x0001 /* pending update ? loop */
|
tml %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 11b
|
jnz 11b
|
||||||
stck 24(%r15) /* Store TOD clock */
|
stcke 24(%r15) /* Store TOD clock */
|
||||||
lm %r0,%r1,24(%r15)
|
lm %r0,%r1,25(%r15)
|
||||||
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
||||||
brc 3,12f
|
brc 3,12f
|
||||||
|
|
|
@ -29,8 +29,8 @@ __kernel_gettimeofday:
|
||||||
l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
|
||||||
tml %r4,0x0001 /* pending update ? loop */
|
tml %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 1b
|
jnz 1b
|
||||||
stck 24(%r15) /* Store TOD clock */
|
stcke 24(%r15) /* Store TOD clock */
|
||||||
lm %r0,%r1,24(%r15)
|
lm %r0,%r1,25(%r15)
|
||||||
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
sl %r1,__VDSO_XTIME_STAMP+4(%r5)
|
||||||
brc 3,3f
|
brc 3,3f
|
||||||
|
|
|
@ -33,10 +33,10 @@ __kernel_clock_gettime:
|
||||||
0: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
0: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
||||||
tmll %r4,0x0001 /* pending update ? loop */
|
tmll %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 0b
|
jnz 0b
|
||||||
stck 48(%r15) /* Store TOD clock */
|
stcke 48(%r15) /* Store TOD clock */
|
||||||
lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
|
lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
|
||||||
lg %r0,__VDSO_WTOM_SEC(%r5)
|
lg %r0,__VDSO_WTOM_SEC(%r5)
|
||||||
lg %r1,48(%r15)
|
lg %r1,49(%r15)
|
||||||
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
||||||
alg %r1,__VDSO_WTOM_NSEC(%r5)
|
alg %r1,__VDSO_WTOM_NSEC(%r5)
|
||||||
|
@ -58,9 +58,9 @@ __kernel_clock_gettime:
|
||||||
5: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
5: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
||||||
tmll %r4,0x0001 /* pending update ? loop */
|
tmll %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 5b
|
jnz 5b
|
||||||
stck 48(%r15) /* Store TOD clock */
|
stcke 48(%r15) /* Store TOD clock */
|
||||||
lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
|
lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
|
||||||
lg %r1,48(%r15)
|
lg %r1,49(%r15)
|
||||||
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
||||||
alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
|
alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
|
||||||
|
|
|
@ -28,8 +28,8 @@ __kernel_gettimeofday:
|
||||||
lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
|
||||||
tmll %r4,0x0001 /* pending update ? loop */
|
tmll %r4,0x0001 /* pending update ? loop */
|
||||||
jnz 0b
|
jnz 0b
|
||||||
stck 48(%r15) /* Store TOD clock */
|
stcke 48(%r15) /* Store TOD clock */
|
||||||
lg %r1,48(%r15)
|
lg %r1,49(%r15)
|
||||||
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
|
||||||
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
|
||||||
alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
|
alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
|
||||||
|
|
Loading…
Reference in New Issue