lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 258/477] selftests/timens: handle a case when alarm clocks are not supported
    Date
    From: Andrei Vagin <avagin@gmail.com>

    [ Upstream commit 558ae0355a91c7d28fdf4c0011bee6ebb5118632 ]

    This can happen if a testing node doesn't have RTC (real time clock)
    hardware or it doesn't support alarms.

    Fixes: 61c57676035d ("selftests/timens: Add Time Namespace test for supported clocks")
    Acked-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Reported-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Signed-off-by: Andrei Vagin <avagin@gmail.com>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/testing/selftests/timens/clock_nanosleep.c | 2 +-
    tools/testing/selftests/timens/timens.c | 2 +-
    tools/testing/selftests/timens/timens.h | 13 ++++++++++++-
    tools/testing/selftests/timens/timer.c | 5 +++++
    tools/testing/selftests/timens/timerfd.c | 5 +++++
    5 files changed, 24 insertions(+), 3 deletions(-)

    diff --git a/tools/testing/selftests/timens/clock_nanosleep.c b/tools/testing/selftests/timens/clock_nanosleep.c
    index 8e7b7c72ef65f..72d41b955fb22 100644
    --- a/tools/testing/selftests/timens/clock_nanosleep.c
    +++ b/tools/testing/selftests/timens/clock_nanosleep.c
    @@ -119,7 +119,7 @@ int main(int argc, char *argv[])

    ksft_set_plan(4);

    - check_config_posix_timers();
    + check_supported_timers();

    if (unshare_timens())
    return 1;
    diff --git a/tools/testing/selftests/timens/timens.c b/tools/testing/selftests/timens/timens.c
    index 098be7c83be3e..52b6a1185f52a 100644
    --- a/tools/testing/selftests/timens/timens.c
    +++ b/tools/testing/selftests/timens/timens.c
    @@ -155,7 +155,7 @@ int main(int argc, char *argv[])

    nscheck();

    - check_config_posix_timers();
    + check_supported_timers();

    ksft_set_plan(ARRAY_SIZE(clocks) * 2);

    diff --git a/tools/testing/selftests/timens/timens.h b/tools/testing/selftests/timens/timens.h
    index e09e7e39bc52f..d4fc52d471462 100644
    --- a/tools/testing/selftests/timens/timens.h
    +++ b/tools/testing/selftests/timens/timens.h
    @@ -14,15 +14,26 @@
    #endif

    static int config_posix_timers = true;
    +static int config_alarm_timers = true;

    -static inline void check_config_posix_timers(void)
    +static inline void check_supported_timers(void)
    {
    + struct timespec ts;
    +
    if (timer_create(-1, 0, 0) == -1 && errno == ENOSYS)
    config_posix_timers = false;
    +
    + if (clock_gettime(CLOCK_BOOTTIME_ALARM, &ts) == -1 && errno == EINVAL)
    + config_alarm_timers = false;
    }

    static inline bool check_skip(int clockid)
    {
    + if (!config_alarm_timers && clockid == CLOCK_BOOTTIME_ALARM) {
    + ksft_test_result_skip("CLOCK_BOOTTIME_ALARM isn't supported\n");
    + return true;
    + }
    +
    if (config_posix_timers)
    return false;

    diff --git a/tools/testing/selftests/timens/timer.c b/tools/testing/selftests/timens/timer.c
    index 96dba11ebe446..5e7f0051bd7be 100644
    --- a/tools/testing/selftests/timens/timer.c
    +++ b/tools/testing/selftests/timens/timer.c
    @@ -22,6 +22,9 @@ int run_test(int clockid, struct timespec now)
    timer_t fd;
    int i;

    + if (check_skip(clockid))
    + return 0;
    +
    for (i = 0; i < 2; i++) {
    struct sigevent sevp = {.sigev_notify = SIGEV_NONE};
    int flags = 0;
    @@ -74,6 +77,8 @@ int main(int argc, char *argv[])

    nscheck();

    + check_supported_timers();
    +
    ksft_set_plan(3);

    clock_gettime(CLOCK_MONOTONIC, &mtime_now);
    diff --git a/tools/testing/selftests/timens/timerfd.c b/tools/testing/selftests/timens/timerfd.c
    index eff1ec5ff215b..9edd43d6b2c13 100644
    --- a/tools/testing/selftests/timens/timerfd.c
    +++ b/tools/testing/selftests/timens/timerfd.c
    @@ -28,6 +28,9 @@ int run_test(int clockid, struct timespec now)
    long long elapsed;
    int fd, i;

    + if (check_skip(clockid))
    + return 0;
    +
    if (tclock_gettime(clockid, &now))
    return pr_perror("clock_gettime(%d)", clockid);

    @@ -81,6 +84,8 @@ int main(int argc, char *argv[])

    nscheck();

    + check_supported_timers();
    +
    ksft_set_plan(3);

    clock_gettime(CLOCK_MONOTONIC, &mtime_now);
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:34    [W:4.465 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site