Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1715372 > unrolled thread

[GIT PULL][PATCH 0/6] Timekeeping queue for 4.14

Started byJohn Stultz <john.stultz@linaro.org>
First post2017-08-18 21:00 +0200
Last post2017-08-18 21:00 +0200
Articles 5 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [GIT PULL][PATCH 0/6] Timekeeping queue for 4.14 John Stultz <john.stultz@linaro.org> - 2017-08-18 21:00 +0200
    [PATCH 5/6] timekeeping: Use proper timekeeper for debug code John Stultz <john.stultz@linaro.org> - 2017-08-18 21:00 +0200
    [PATCH 1/6] kselftests: timers: freq-step: Define ADJ_SETOFFSET if device has older kernel headers John Stultz <john.stultz@linaro.org> - 2017-08-18 21:00 +0200
    [PATCH 4/6] kselftests: timers: set-timer-lat: Add one-shot timer test cases John Stultz <john.stultz@linaro.org> - 2017-08-18 21:00 +0200
    [PATCH 2/6] kselftests: timers: freq-step: Fix build warning John Stultz <john.stultz@linaro.org> - 2017-08-18 21:00 +0200

#1715372 — [GIT PULL][PATCH 0/6] Timekeeping queue for 4.14

FromJohn Stultz <john.stultz@linaro.org>
Date2017-08-18 21:00 +0200
Subject[GIT PULL][PATCH 0/6] Timekeeping queue for 4.14
Message-ID<ufUEV-7yR-3@gated-at.bofh.it>
Thomas, Ingo,
  Just wanted to send along my current time queue for 4.14.

Most of it is actually ksefltest related, so if you'd prefer I
can send those through Shuah. 

Let me know if you have any feedback or objections.

thanks
-john

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org

The following changes since commit 5771a8c08880cdca3bfb4a3fc6d309d6bba20877:

  Linux v4.13-rc1 (2017-07-15 15:22:10 -0700)

are available in the git repository at:

  https://git.linaro.org/people/john.stultz/linux.git fortglx/4.14/time

for you to fetch changes up to 47b4a457e4cc816b3fdd2ee55c65fda8ea6de051:

  alarmtimer: Fix unavailable wake-up source in sysfs (2017-08-17 12:15:10 -0700)

----------------------------------------------------------------

Geert Uytterhoeven (1):
  alarmtimer: Fix unavailable wake-up source in sysfs

Greg Hackmann (2):
  kselftests: timers: set-timer-lat: Tweak reporting when timer fires
    early
  kselftests: timers: set-timer-lat: Add one-shot timer test cases

John Stultz (2):
  kselftests: timers: freq-step: Define ADJ_SETOFFSET if device has
    older kernel headers
  kselftests: timers: freq-step: Fix build warning

Stafford Horne (1):
  timekeeping: Use proper timekeeper for debug code

 kernel/time/alarmtimer.c                       |  11 ++-
 kernel/time/timekeeping.c                      |   2 +-
 tools/testing/selftests/timers/freq-step.c     |   8 +-
 tools/testing/selftests/timers/set-timer-lat.c | 103 +++++++++++++++++++++----
 4 files changed, 106 insertions(+), 18 deletions(-)

-- 
2.7.4

[toc] | [next] | [standalone]


#1715374 — [PATCH 5/6] timekeeping: Use proper timekeeper for debug code

FromJohn Stultz <john.stultz@linaro.org>
Date2017-08-18 21:00 +0200
Subject[PATCH 5/6] timekeeping: Use proper timekeeper for debug code
Message-ID<ufUEV-7yR-11@gated-at.bofh.it>
In reply to#1715372
From: Stafford Horne <shorne@gmail.com>

When CONFIG_DEBUG_TIMEKEEPING is enabled the timekeeping_check_update()
function will update status like last_warning and underflow_seen on the
timekeeper.

If there are issues found this state is used to rate limit the warnings
that get printed.

This rate limiting doesn't really really work if stored in real_tk as
the shadow timekeeper is overwritten onto real_tk at the end of every
update_wall_time() call, resetting last_warning and other statuses.

Fix rate limiting by using the shadow_timekeeper for
timekeeping_check_update().

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Fixes: commit 57d05a93ada7 ("time: Rework debugging variables so they aren't global")
Signed-off-by: Stafford Horne <shorne@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 kernel/time/timekeeping.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index cedafa0..8f58669 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -2066,7 +2066,7 @@ void update_wall_time(void)
 		goto out;
 
 	/* Do some additional sanity checking */
-	timekeeping_check_update(real_tk, offset);
+	timekeeping_check_update(tk, offset);
 
 	/*
 	 * With NO_HZ we may have to accumulate many cycle_intervals
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1715379 — [PATCH 1/6] kselftests: timers: freq-step: Define ADJ_SETOFFSET if device has older kernel headers

FromJohn Stultz <john.stultz@linaro.org>
Date2017-08-18 21:00 +0200
Subject[PATCH 1/6] kselftests: timers: freq-step: Define ADJ_SETOFFSET if device has older kernel headers
Message-ID<ufUEW-7yR-23@gated-at.bofh.it>
In reply to#1715372
On some systems, the kernel headers haven't been updated to include
ADJ_SETOFFSET, so define it in the test if needed.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 tools/testing/selftests/timers/freq-step.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/testing/selftests/timers/freq-step.c b/tools/testing/selftests/timers/freq-step.c
index e8c6183..934a308 100644
--- a/tools/testing/selftests/timers/freq-step.c
+++ b/tools/testing/selftests/timers/freq-step.c
@@ -33,6 +33,10 @@
 #define MAX_FREQ_ERROR 10e-6
 #define MAX_STDDEV 1000e-9
 
+#ifndef ADJ_SETOFFSET
+  #define ADJ_SETOFFSET 0x0100
+#endif
+
 struct sample {
 	double offset;
 	double time;
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1715380 — [PATCH 4/6] kselftests: timers: set-timer-lat: Add one-shot timer test cases

FromJohn Stultz <john.stultz@linaro.org>
Date2017-08-18 21:00 +0200
Subject[PATCH 4/6] kselftests: timers: set-timer-lat: Add one-shot timer test cases
Message-ID<ufUEW-7yR-31@gated-at.bofh.it>
In reply to#1715372
From: Greg Hackmann <ghackmann@google.com>

These testcases are motivated by a recent alarmtimer regression, which
caused one-shot CLOCK_{BOOTTIME,REALTIME}_ALARM timers to become
periodic timers.

The new testcases are very similar to the existing testcases for
repeating timers.  But rather than waiting for 5 alarms, they wait for 5
seconds and verify that the alarm fired exactly once.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: Greg Hackmann <ghackmann@google.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 tools/testing/selftests/timers/set-timer-lat.c | 86 ++++++++++++++++++++++----
 1 file changed, 73 insertions(+), 13 deletions(-)

diff --git a/tools/testing/selftests/timers/set-timer-lat.c b/tools/testing/selftests/timers/set-timer-lat.c
index 10c2e18..15434da 100644
--- a/tools/testing/selftests/timers/set-timer-lat.c
+++ b/tools/testing/selftests/timers/set-timer-lat.c
@@ -20,6 +20,7 @@
  */
 
 
+#include <errno.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <time.h>
@@ -122,17 +123,17 @@ void sigalarm(int signo)
 		max_latency_ns = delta_ns;
 }
 
-void describe_timer(int flags)
+void describe_timer(int flags, int interval)
 {
-	printf("%-22s %s ",
+	printf("%-22s %s %s ",
 			clockstring(clock_id),
-			flags ? "ABSTIME":"RELTIME");
+			flags ? "ABSTIME":"RELTIME",
+			interval ? "PERIODIC":"ONE-SHOT");
 }
 
-int do_timer(int clock_id, int flags)
+int setup_timer(int clock_id, int flags, int interval, timer_t *tm1)
 {
 	struct sigevent se;
-	timer_t tm1;
 	struct itimerspec its1, its2;
 	int err;
 
@@ -146,7 +147,7 @@ int do_timer(int clock_id, int flags)
 	alarmcount = 0;
 	timer_fired_early = 0;
 
-	err = timer_create(clock_id, &se, &tm1);
+	err = timer_create(clock_id, &se, tm1);
 	if (err) {
 		if ((clock_id == CLOCK_REALTIME_ALARM) ||
 		    (clock_id == CLOCK_BOOTTIME_ALARM)) {
@@ -167,19 +168,23 @@ int do_timer(int clock_id, int flags)
 		its1.it_value.tv_sec = TIMER_SECS;
 		its1.it_value.tv_nsec = 0;
 	}
-	its1.it_interval.tv_sec = TIMER_SECS;
+	its1.it_interval.tv_sec = interval;
 	its1.it_interval.tv_nsec = 0;
 
-	err = timer_settime(tm1, flags, &its1, &its2);
+	err = timer_settime(*tm1, flags, &its1, &its2);
 	if (err) {
 		printf("%s - timer_settime() failed\n", clockstring(clock_id));
 		return -1;
 	}
 
-	while (alarmcount < 5)
-		sleep(1);
+	return 0;
+}
 
-	describe_timer(flags);
+int check_timer_latency(int flags, int interval)
+{
+	int err = 0;
+
+	describe_timer(flags, interval);
 	printf("timer fired early: %7d : ", timer_fired_early);
 	if (!timer_fired_early) {
 		printf("[OK]\n");
@@ -188,10 +193,9 @@ int do_timer(int clock_id, int flags)
 		err = -1;
 	}
 
-	describe_timer(flags);
+	describe_timer(flags, interval);
 	printf("max latency: %10lld ns : ", max_latency_ns);
 
-	timer_delete(tm1);
 	if (max_latency_ns < UNRESONABLE_LATENCY) {
 		printf("[OK]\n");
 	} else {
@@ -201,6 +205,60 @@ int do_timer(int clock_id, int flags)
 	return err;
 }
 
+int check_alarmcount(int flags, int interval)
+{
+	describe_timer(flags, interval);
+	printf("count: %19d : ", alarmcount);
+	if (alarmcount == 1) {
+		printf("[OK]\n");
+		return 0;
+	}
+	printf("[FAILED]\n");
+	return -1;
+}
+
+int do_timer(int clock_id, int flags)
+{
+	timer_t tm1;
+	const int interval = TIMER_SECS;
+	int err;
+
+	err = setup_timer(clock_id, flags, interval, &tm1);
+	if (err)
+		return err;
+
+	while (alarmcount < 5)
+		sleep(1);
+
+	timer_delete(tm1);
+	return check_timer_latency(flags, interval);
+}
+
+int do_timer_oneshot(int clock_id, int flags)
+{
+	timer_t tm1;
+	const int interval = 0;
+	struct timeval timeout;
+	fd_set fds;
+	int err;
+
+	err = setup_timer(clock_id, flags, interval, &tm1);
+	if (err)
+		return err;
+
+	memset(&timeout, 0, sizeof(timeout));
+	timeout.tv_sec = 5;
+	FD_ZERO(&fds);
+	do {
+		err = select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
+	} while (err == -1 && errno == EINTR);
+
+	timer_delete(tm1);
+	err = check_timer_latency(flags, interval);
+	err |= check_alarmcount(flags, interval);
+	return err;
+}
+
 int main(void)
 {
 	struct sigaction act;
@@ -226,6 +284,8 @@ int main(void)
 
 		ret |= do_timer(clock_id, TIMER_ABSTIME);
 		ret |= do_timer(clock_id, 0);
+		ret |= do_timer_oneshot(clock_id, TIMER_ABSTIME);
+		ret |= do_timer_oneshot(clock_id, 0);
 	}
 	if (ret)
 		return ksft_exit_fail();
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1715382 — [PATCH 2/6] kselftests: timers: freq-step: Fix build warning

FromJohn Stultz <john.stultz@linaro.org>
Date2017-08-18 21:00 +0200
Subject[PATCH 2/6] kselftests: timers: freq-step: Fix build warning
Message-ID<ufUEW-7yR-39@gated-at.bofh.it>
In reply to#1715372
Fixes the following build warning:
freq-step.c: In function ‘main’:
freq-step.c:271:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

By returning the return values from ksft_success/fail.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Miroslav Lichvar <mlichvar@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: linux-kselftest@vger.kernel.org
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 tools/testing/selftests/timers/freq-step.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/timers/freq-step.c b/tools/testing/selftests/timers/freq-step.c
index 934a308..926828e 100644
--- a/tools/testing/selftests/timers/freq-step.c
+++ b/tools/testing/selftests/timers/freq-step.c
@@ -266,7 +266,7 @@ int main(int argc, char **argv)
 	set_frequency(0.0);
 
 	if (fails)
-		ksft_exit_fail();
+		return ksft_exit_fail();
 
-	ksft_exit_pass();
+	return ksft_exit_pass();
 }
-- 
2.7.4

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web