Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 070b7be6 authored by Martin Schwidefsky's avatar Martin Schwidefsky
Browse files

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: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 369e8c35
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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
+4 −4
Original line number Diff line number Diff line
@@ -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 */
+2 −2
Original line number Diff line number Diff line
@@ -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 */