Commit 558ae035 authored by Andrei Vagin's avatar Andrei Vagin Committed by Shuah Khan
Browse files

selftests/timens: handle a case when alarm clocks are not supported



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

Fixes: 61c57676 ("selftests/timens: Add Time Namespace test for supported clocks")
Acked-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
Reported-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
Signed-off-by: default avatarAndrei Vagin <avagin@gmail.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 5627f9cf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);

+12 −1
Original line number Diff line number Diff line
@@ -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;

+5 −0
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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);