diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-08-29 06:44:40 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-09-09 02:53:27 -0400 |
commit | 070b7be633dc33c0899e8c934b4d5fad046b06e8 (patch) | |
tree | 4aa06300e711c8079754745e34852ac12c4dbfbf | |
parent | 369e8c355383143964290b6a706eb6639ae3588c (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.S | 8 | ||||
-rw-r--r-- | arch/s390/kernel/vdso32/gettimeofday.S | 4 | ||||
-rw-r--r-- | arch/s390/kernel/vdso64/clock_gettime.S | 8 | ||||
-rw-r--r-- | arch/s390/kernel/vdso64/gettimeofday.S | 4 |
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: | |||
30 | 1: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ | 30 | 1: 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: | |||
72 | 11: l %r4,__VDSO_UPD_COUNT+4(%r5) /* load update counter */ | 72 | 11: 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: | |||
33 | 0: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ | 33 | 0: 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: | |||
58 | 5: lg %r4,__VDSO_UPD_COUNT(%r5) /* load update counter */ | 58 | 5: 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 */ |