[LTP] [s390x vDSO Bug?] clock_gettime(CLOCK_MONOTONIC_RAW, ...) gets abnormal ts value

Li Wang liwang@redhat.com
Tue Mar 23 07:21:52 CET 2021


Hi linux-s390 experts,

We observed that LTP/clock_gettime04 always FAIL on s390x with
kernel-v5.12-rc3.
To simply show the problem, I rewrite the LTP reproducer as a simple C
below.
Maybe it's a new bug introduced from the kernel-5.12 series branch?

PASS:
------------
# uname -r
5.11.0-*.s390x

# grep TIME_NS /boot/config-5.11.0-*.s390x
no TIME_NS enabled

## ./test-timer
vdso_ts_nsec = 898169901815, vdso_ts.tv_sec = 898, vdso_ts.tv_nsec =
169901815
sys_ts_nsec  = 898169904269, sys_ts.tv_sec  = 898, sys_ts.tv_nsec  =
169904269
===> PASS

FAIL:
----------
# uname -r
5.12.0-0.rc3.*.s390x

# grep TIME_NS /boot/config-5.12.0-0.rc3.s390x
CONFIG_TIME_NS=y
CONFIG_GENERIC_VDSO_TIME_NS=y

# ./test-timer
vdso_ts_nsec = 4484351380985507, vdso_ts.tv_sec = 4484351, vdso_ts.tv_nsec
= 380985507
sys_ts_nsec  = 1446923235377, sys_ts.tv_sec  = 1446, sys_ts.tv_nsec  =
923235377
===> FAIL


# cat test-timer.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
#include <sys/time.h>
#include <asm/unistd_64.h>

long long ts_to_ns(struct timespec ts)
{
        return (ts.tv_sec * 1000000000 + ts.tv_nsec);
}

int main(void)
{
        long long vdso_ts_nsec, sys_ts_nsec;

        struct timespec vdso_ts, sys_ts;

        clock_gettime(CLOCK_MONOTONIC_RAW, &vdso_ts); //vdso way
        syscall(__NR_clock_gettime, CLOCK_MONOTONIC_RAW, &sys_ts);

        vdso_ts_nsec = ts_to_ns(vdso_ts);
        sys_ts_nsec  = ts_to_ns(sys_ts);


        printf("vdso_ts_nsec = %lld, vdso_ts.tv_sec = %ld, vdso_ts.tv_nsec
= %ld\n", vdso_ts_nsec, vdso_ts.tv_sec, vdso_ts.tv_nsec);
        printf("sys_ts_nsec  = %lld, sys_ts.tv_sec  = %ld, sys_ts.tv_nsec
 = %ld\n", sys_ts_nsec, sys_ts.tv_sec, sys_ts.tv_nsec);

        if ((vdso_ts_nsec - sys_ts_nsec) > 1000000)
                printf("===> FAIL\n");
        else
                printf("===> PASS\n");

        return 0;
}

-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20210323/05629b65/attachment.htm>


More information about the ltp mailing list