aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2014-08-29 06:44:40 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2014-09-09 02:53:27 -0400
commit070b7be633dc33c0899e8c934b4d5fad046b06e8 (patch)
tree4aa06300e711c8079754745e34852ac12c4dbfbf
parent369e8c355383143964290b6a706eb6639ae3588c (diff)
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>
-rw-r--r--arch/s390/kernel/vdso32/clock_gettime.S8
-rw-r--r--arch/s390/kernel/vdso32/gettimeofday.S4
-rw-r--r--arch/s390/kernel/vdso64/clock_gettime.S8
-rw-r--r--arch/s390/kernel/vdso64/gettimeofday.S4
4 files changed, 12 insertions, 12 deletions
diff --git a/arch/s390/kernel/vdso32/clock_gettime.S b/arch/s390/kernel/vdso32/clock_gettime.S
index 7cf18f8d4cb4..4e20a9365bb7 100644
--- a/arch/s390/kernel/vdso32/clock_gettime.S
+++ b/arch/s390/kernel/vdso32/clock_gettime.S
@@ -30,8 +30,8 @@ __kernel_clock_gettime:
301: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ 301: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
31 tml %r4,0x0001 /* pending update ? loop */ 31 tml %r4,0x0001 /* pending update ? loop */
32 jnz 1b 32 jnz 1b
33 stck 24(%r15) /* Store TOD clock */ 33 stcke 24(%r15) /* Store TOD clock */
34 lm %r0,%r1,24(%r15) 34 lm %r0,%r1,25(%r15)
35 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 35 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
36 sl %r1,__VDSO_XTIME_STAMP+4(%r5) 36 sl %r1,__VDSO_XTIME_STAMP+4(%r5)
37 brc 3,2f 37 brc 3,2f
@@ -72,8 +72,8 @@ __kernel_clock_gettime:
7211: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ 7211: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
73 tml %r4,0x0001 /* pending update ? loop */ 73 tml %r4,0x0001 /* pending update ? loop */
74 jnz 11b 74 jnz 11b
75 stck 24(%r15) /* Store TOD clock */ 75 stcke 24(%r15) /* Store TOD clock */
76 lm %r0,%r1,24(%r15) 76 lm %r0,%r1,25(%r15)
77 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 77 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
78 sl %r1,__VDSO_XTIME_STAMP+4(%r5) 78 sl %r1,__VDSO_XTIME_STAMP+4(%r5)
79 brc 3,12f 79 brc 3,12f
diff --git a/arch/s390/kernel/vdso32/gettimeofday.S b/arch/s390/kernel/vdso32/gettimeofday.S
index fd621a950f7c..60def5f562db 100644
--- a/arch/s390/kernel/vdso32/gettimeofday.S
+++ b/arch/s390/kernel/vdso32/gettimeofday.S
@@ -29,8 +29,8 @@ __kernel_gettimeofday:
29 l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ 29 l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */
30 tml %r4,0x0001 /* pending update ? loop */ 30 tml %r4,0x0001 /* pending update ? loop */
31 jnz 1b 31 jnz 1b
32 stck 24(%r15) /* Store TOD clock */ 32 stcke 24(%r15) /* Store TOD clock */
33 lm %r0,%r1,24(%r15) 33 lm %r0,%r1,25(%r15)
34 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 34 s %r0,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
35 sl %r1,__VDSO_XTIME_STAMP+4(%r5) 35 sl %r1,__VDSO_XTIME_STAMP+4(%r5)
36 brc 3,3f 36 brc 3,3f
diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S
index 3f34e09db5f4..4add40b78ed5 100644
--- a/arch/s390/kernel/vdso64/clock_gettime.S
+++ b/arch/s390/kernel/vdso64/clock_gettime.S
@@ -33,10 +33,10 @@ __kernel_clock_gettime:
330: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ 330: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
34 tmll %r4,0x0001 /* pending update ? loop */ 34 tmll %r4,0x0001 /* pending update ? loop */
35 jnz 0b 35 jnz 0b
36 stck 48(%r15) /* Store TOD clock */ 36 stcke 48(%r15) /* Store TOD clock */
37 lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */ 37 lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
38 lg %r0,__VDSO_WTOM_SEC(%r5) 38 lg %r0,__VDSO_WTOM_SEC(%r5)
39 lg %r1,48(%r15) 39 lg %r1,49(%r15)
40 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 40 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
41 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */ 41 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
42 alg %r1,__VDSO_WTOM_NSEC(%r5) 42 alg %r1,__VDSO_WTOM_NSEC(%r5)
@@ -58,9 +58,9 @@ __kernel_clock_gettime:
585: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ 585: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
59 tmll %r4,0x0001 /* pending update ? loop */ 59 tmll %r4,0x0001 /* pending update ? loop */
60 jnz 5b 60 jnz 5b
61 stck 48(%r15) /* Store TOD clock */ 61 stcke 48(%r15) /* Store TOD clock */
62 lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */ 62 lgf %r2,__VDSO_TK_SHIFT(%r5) /* Timekeeper shift */
63 lg %r1,48(%r15) 63 lg %r1,49(%r15)
64 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 64 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
65 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */ 65 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
66 alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */ 66 alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */
diff --git a/arch/s390/kernel/vdso64/gettimeofday.S b/arch/s390/kernel/vdso64/gettimeofday.S
index d0860d1d0ccc..7a344995a97f 100644
--- a/arch/s390/kernel/vdso64/gettimeofday.S
+++ b/arch/s390/kernel/vdso64/gettimeofday.S
@@ -28,8 +28,8 @@ __kernel_gettimeofday:
28 lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ 28 lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */
29 tmll %r4,0x0001 /* pending update ? loop */ 29 tmll %r4,0x0001 /* pending update ? loop */
30 jnz 0b 30 jnz 0b
31 stck 48(%r15) /* Store TOD clock */ 31 stcke 48(%r15) /* Store TOD clock */
32 lg %r1,48(%r15) 32 lg %r1,49(%r15)
33 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */ 33 sg %r1,__VDSO_XTIME_STAMP(%r5) /* TOD - cycle_last */
34 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */ 34 msgf %r1,__VDSO_TK_MULT(%r5) /* * tk->mult */
35 alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */ 35 alg %r1,__VDSO_XTIME_NSEC(%r5) /* + tk->xtime_nsec */