s390/vdso: replace stck with stcke
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 29 Aug 2014 10:44:40 +0000 (12:44 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 9 Sep 2014 06:53:27 +0000 (08:53 +0200)
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>
arch/s390/kernel/vdso32/clock_gettime.S
arch/s390/kernel/vdso32/gettimeofday.S
arch/s390/kernel/vdso64/clock_gettime.S
arch/s390/kernel/vdso64/gettimeofday.S

index 7cf18f8d4cb4fc9d281169ed8dee675f4c68b6be..4e20a9365bb799144eb00cdd6cf3b19eb46e22f2 100644 (file)
@@ -30,8 +30,8 @@ __kernel_clock_gettime:
 1:     l       %r4,__VDSO_UPD_COUNT+4(%r5)     /* load update counter */
        tml     %r4,0x0001                      /* pending update ? loop */
        jnz     1b
-       stck    24(%r15)                        /* Store TOD clock */
-       lm      %r0,%r1,24(%r15)
+       stcke   24(%r15)                        /* Store TOD clock */
+       lm      %r0,%r1,25(%r15)
        s       %r0,__VDSO_XTIME_STAMP(%r5)     /* TOD - cycle_last */
        sl      %r1,__VDSO_XTIME_STAMP+4(%r5)
        brc     3,2f
@@ -72,8 +72,8 @@ __kernel_clock_gettime:
 11:    l       %r4,__VDSO_UPD_COUNT+4(%r5)     /* load update counter */
        tml     %r4,0x0001                      /* pending update ? loop */
        jnz     11b
-       stck    24(%r15)                        /* Store TOD clock */
-       lm      %r0,%r1,24(%r15)
+       stcke   24(%r15)                        /* Store TOD clock */
+       lm      %r0,%r1,25(%r15)
        s       %r0,__VDSO_XTIME_STAMP(%r5)     /* TOD - cycle_last */
        sl      %r1,__VDSO_XTIME_STAMP+4(%r5)
        brc     3,12f
index fd621a950f7c70e917ea6ca44bb4a5fd5b9869ab..60def5f562db532e4c014687e38dcefdf1344383 100644 (file)
@@ -29,8 +29,8 @@ __kernel_gettimeofday:
        l       %r4,__VDSO_UPD_COUNT+4(%r5)     /* load update counter */
        tml     %r4,0x0001                      /* pending update ? loop */
        jnz     1b
-       stck    24(%r15)                        /* Store TOD clock */
-       lm      %r0,%r1,24(%r15)
+       stcke   24(%r15)                        /* Store TOD clock */
+       lm      %r0,%r1,25(%r15)
        s       %r0,__VDSO_XTIME_STAMP(%r5)     /* TOD - cycle_last */
        sl      %r1,__VDSO_XTIME_STAMP+4(%r5)
        brc     3,3f
index 3f34e09db5f4d4d0e5f7a12b9e3acb89a72a6773..4add40b78ed5571ca962f094947ed9e2d0e52c54 100644 (file)
@@ -33,10 +33,10 @@ __kernel_clock_gettime:
 0:     lg      %r4,__VDSO_UPD_COUNT(%r5)       /* load update counter */
        tmll    %r4,0x0001                      /* pending update ? loop */
        jnz     0b
-       stck    48(%r15)                        /* Store TOD clock */
+       stcke   48(%r15)                        /* Store TOD clock */
        lgf     %r2,__VDSO_TK_SHIFT(%r5)        /* Timekeeper shift */
        lg      %r0,__VDSO_WTOM_SEC(%r5)
-       lg      %r1,48(%r15)
+       lg      %r1,49(%r15)
        sg      %r1,__VDSO_XTIME_STAMP(%r5)     /* TOD - cycle_last */
        msgf    %r1,__VDSO_TK_MULT(%r5)         /*  * tk->mult */
        alg     %r1,__VDSO_WTOM_NSEC(%r5)
@@ -58,9 +58,9 @@ __kernel_clock_gettime:
 5:     lg      %r4,__VDSO_UPD_COUNT(%r5)       /* load update counter */
        tmll    %r4,0x0001                      /* pending update ? loop */
        jnz     5b
-       stck    48(%r15)                        /* Store TOD clock */
+       stcke   48(%r15)                        /* Store TOD clock */
        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 */
        msgf    %r1,__VDSO_TK_MULT(%r5)         /*  * tk->mult */
        alg     %r1,__VDSO_XTIME_NSEC(%r5)      /*  + tk->xtime_nsec */
index d0860d1d0cccfafe86320a07380ea14ddff1a284..7a344995a97fd21246de5554f09674449db8f2fd 100644 (file)
@@ -28,8 +28,8 @@ __kernel_gettimeofday:
        lg      %r4,__VDSO_UPD_COUNT(%r5)       /* load update counter */
        tmll    %r4,0x0001                      /* pending update ? loop */
        jnz     0b
-       stck    48(%r15)                        /* Store TOD clock */
-       lg      %r1,48(%r15)
+       stcke   48(%r15)                        /* Store TOD clock */
+       lg      %r1,49(%r15)
        sg      %r1,__VDSO_XTIME_STAMP(%r5)     /* TOD - cycle_last */
        msgf    %r1,__VDSO_TK_MULT(%r5)         /*  * tk->mult */
        alg     %r1,__VDSO_XTIME_NSEC(%r5)      /*  + tk->xtime_nsec */