s390/vdso: ectg gettime support for CLOCK_THREAD_CPUTIME_ID

The code to use the ECTG instruction to calculate the cputime for the
current thread is currently used only for the per-thread CPU-clock
with the clockid -2 (PID=0, VIRT=1). Use the same code for the clockid
CLOCK_THREAD_CPUTIME_ID to speed up the more common clockid as well.

Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Martin Schwidefsky 2013-12-02 14:54:56 +01:00
parent 06aae6834e
commit b5e64b3de7
3 changed files with 7 additions and 2 deletions

View File

@ -72,6 +72,7 @@ int main(void)
/* constants used by the vdso */ /* constants used by the vdso */
DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME); DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME);
DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC); DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC);
DEFINE(__CLOCK_THREAD_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID);
DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
BLANK(); BLANK();
/* idle data offsets */ /* idle data offsets */

View File

@ -23,7 +23,9 @@ __kernel_clock_getres:
je 0f je 0f
cghi %r2,__CLOCK_MONOTONIC cghi %r2,__CLOCK_MONOTONIC
je 0f je 0f
cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ cghi %r2,__CLOCK_THREAD_CPUTIME_ID
je 0f
cghi %r2,-2 /* Per-thread CPUCLOCK with PID=0, VIRT=1 */
jne 2f jne 2f
larl %r5,_vdso_data larl %r5,_vdso_data
icm %r0,15,__LC_ECTG_OK(%r5) icm %r0,15,__LC_ECTG_OK(%r5)

View File

@ -22,7 +22,9 @@ __kernel_clock_gettime:
larl %r5,_vdso_data larl %r5,_vdso_data
cghi %r2,__CLOCK_REALTIME cghi %r2,__CLOCK_REALTIME
je 4f je 4f
cghi %r2,-2 /* CLOCK_THREAD_CPUTIME_ID for this thread */ cghi %r2,__CLOCK_THREAD_CPUTIME_ID
je 9f
cghi %r2,-2 /* Per-thread CPUCLOCK with PID=0, VIRT=1 */
je 9f je 9f
cghi %r2,__CLOCK_MONOTONIC cghi %r2,__CLOCK_MONOTONIC
jne 12f jne 12f