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


Groups > linux.kernel > #1426975 > unrolled thread

[GIT PULL][PATCH 0/6] Timekeeping changes for tip/timers/core

Started byJohn Stultz <john.stultz@linaro.org>
First post2016-06-20 22:00 +0200
Last post2016-06-20 22:00 +0200
Articles 4 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [GIT PULL][PATCH 0/6] Timekeeping changes for tip/timers/core John Stultz <john.stultz@linaro.org> - 2016-06-20 22:00 +0200
    [PATCH 5/6] time: Avoid timespec in udelay_test John Stultz <john.stultz@linaro.org> - 2016-06-20 22:00 +0200
    [PATCH 2/6] timekeeping: Fix 1ns/tick drift with GENERIC_TIME_VSYSCALL_OLD John Stultz <john.stultz@linaro.org> - 2016-06-20 22:00 +0200
    [PATCH 3/6] alarmtimer: Fix comments describing structure fields John Stultz <john.stultz@linaro.org> - 2016-06-20 22:00 +0200

#1426975 — [GIT PULL][PATCH 0/6] Timekeeping changes for tip/timers/core

FromJohn Stultz <john.stultz@linaro.org>
Date2016-06-20 22:00 +0200
Subject[GIT PULL][PATCH 0/6] Timekeeping changes for tip/timers/core
Message-ID<rMdwt-44L-11@gated-at.bofh.it>
Hey Thomas, Ingo,
  Here is my current queue of timekeeping changes for 4.8.
Most of them are small cleanups and core y2038 changes.

Let me know if you have any objections.

thanks
-john

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>

You can also grab it via a pull:

The following changes since commit af8c34ce6ae32addda3788d54a7e340cad22516b:

  Linux 4.7-rc2 (2016-06-05 14:31:26 -0700)

are available in the git repository at:

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

for you to fetch changes up to 7c71feb0a6766c7c3a262e3cc33ae231f3953cb6:

  timer: Avoid using timespec (2016-06-20 12:47:33 -0700)

----------------------------------------------------------------
Arnd Bergmann (2):
  time: Avoid timespec in udelay_test
  timer: Avoid using timespec

Deepa Dinamani (1):
  time: Add time64_to_tm()

Minfei Huang (1):
  clocksource: Make clocksource insert entry more efficient

Pratyush Patel (1):
  alarmtimer: Fix comments describing structure fields

Thomas Graziadei (1):
  timekeeping: Fix 1ns/tick drift with GENERIC_TIME_VSYSCALL_OLD

 include/linux/alarmtimer.h |  6 +++---
 include/linux/time.h       | 15 ++++++++++++++-
 kernel/time/alarmtimer.c   |  1 -
 kernel/time/clocksource.c  |  8 +++++---
 kernel/time/test_udelay.c  | 16 ++++++++--------
 kernel/time/timeconv.c     | 11 ++++++-----
 kernel/time/timekeeping.c  | 10 ++++++----
 kernel/time/timer_stats.c  |  6 +++---
 8 files changed, 45 insertions(+), 28 deletions(-)

-- 
1.9.1

[toc] | [next] | [standalone]


#1426978 — [PATCH 5/6] time: Avoid timespec in udelay_test

FromJohn Stultz <john.stultz@linaro.org>
Date2016-06-20 22:00 +0200
Subject[PATCH 5/6] time: Avoid timespec in udelay_test
Message-ID<rMdwt-44L-25@gated-at.bofh.it>
In reply to#1426975
From: Arnd Bergmann <arnd@arndb.de>

udelay_test_single() uses ktime_get_ts() to get two timespec values
and calculate the difference between them, while udelay_test_show()
uses the same to printk() the current monotonic time.

Both of these are y2038 safe on all machines, but we want to
get rid of struct timespec anyway, so this converts the code to
use ktime_get_ns() and ktime_get_ts64() respectively.

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 kernel/time/test_udelay.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/kernel/time/test_udelay.c b/kernel/time/test_udelay.c
index e622ba3..b0928ab 100644
--- a/kernel/time/test_udelay.c
+++ b/kernel/time/test_udelay.c
@@ -43,13 +43,13 @@ static int udelay_test_single(struct seq_file *s, int usecs, uint32_t iters)
 	int allowed_error_ns = usecs * 5;
 
 	for (i = 0; i < iters; ++i) {
-		struct timespec ts1, ts2;
+		s64 kt1, kt2;
 		int time_passed;
 
-		ktime_get_ts(&ts1);
+		kt1 = ktime_get_ns();
 		udelay(usecs);
-		ktime_get_ts(&ts2);
-		time_passed = timespec_to_ns(&ts2) - timespec_to_ns(&ts1);
+		kt2 = ktime_get_ns();
+		time_passed = kt2 - kt1;
 
 		if (i == 0 || time_passed < min)
 			min = time_passed;
@@ -87,11 +87,11 @@ static int udelay_test_show(struct seq_file *s, void *v)
 	if (usecs > 0 && iters > 0) {
 		return udelay_test_single(s, usecs, iters);
 	} else if (usecs == 0) {
-		struct timespec ts;
+		struct timespec64 ts;
 
-		ktime_get_ts(&ts);
-		seq_printf(s, "udelay() test (lpj=%ld kt=%ld.%09ld)\n",
-				loops_per_jiffy, ts.tv_sec, ts.tv_nsec);
+		ktime_get_ts64(&ts);
+		seq_printf(s, "udelay() test (lpj=%ld kt=%lld.%09ld)\n",
+				loops_per_jiffy, (s64)ts.tv_sec, ts.tv_nsec);
 		seq_puts(s, "usage:\n");
 		seq_puts(s, "echo USECS [ITERS] > " DEBUGFS_FILENAME "\n");
 		seq_puts(s, "cat " DEBUGFS_FILENAME "\n");
-- 
1.9.1

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


#1426979 — [PATCH 2/6] timekeeping: Fix 1ns/tick drift with GENERIC_TIME_VSYSCALL_OLD

FromJohn Stultz <john.stultz@linaro.org>
Date2016-06-20 22:00 +0200
Subject[PATCH 2/6] timekeeping: Fix 1ns/tick drift with GENERIC_TIME_VSYSCALL_OLD
Message-ID<rMdwu-44L-31@gated-at.bofh.it>
In reply to#1426975
From: Thomas Graziadei <thomas.graziadei@omicronenergy.com>

The user notices the problem in a raw and real time drift, calling
clock_gettime with CLOCK_REALTIME / CLOCK_MONOTONIC_RAW on a system
with no ntp correction taking place (no ntpd or ptp stuff running).

The problem is, that old_vsyscall_fixup adds an extra 1ns even though
xtime_nsec is already held in full nsecs and the remainder in this
case is 0. Do the rounding up buisness only if needed.

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Thomas Graziadei <thomas.graziadei@omicronenergy.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 kernel/time/timekeeping.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 479d25c..a196e08 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -480,10 +480,12 @@ static inline void old_vsyscall_fixup(struct timekeeper *tk)
 	* users are removed, this can be killed.
 	*/
 	remainder = tk->tkr_mono.xtime_nsec & ((1ULL << tk->tkr_mono.shift) - 1);
-	tk->tkr_mono.xtime_nsec -= remainder;
-	tk->tkr_mono.xtime_nsec += 1ULL << tk->tkr_mono.shift;
-	tk->ntp_error += remainder << tk->ntp_error_shift;
-	tk->ntp_error -= (1ULL << tk->tkr_mono.shift) << tk->ntp_error_shift;
+	if (remainder != 0) {
+		tk->tkr_mono.xtime_nsec -= remainder;
+		tk->tkr_mono.xtime_nsec += 1ULL << tk->tkr_mono.shift;
+		tk->ntp_error += remainder << tk->ntp_error_shift;
+		tk->ntp_error -= (1ULL << tk->tkr_mono.shift) << tk->ntp_error_shift;
+	}
 }
 #else
 #define old_vsyscall_fixup(tk)
-- 
1.9.1

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


#1426982 — [PATCH 3/6] alarmtimer: Fix comments describing structure fields

FromJohn Stultz <john.stultz@linaro.org>
Date2016-06-20 22:00 +0200
Subject[PATCH 3/6] alarmtimer: Fix comments describing structure fields
Message-ID<rMdwu-44L-43@gated-at.bofh.it>
In reply to#1426975
From: Pratyush Patel <pratyushpatel.1995@gmail.com>

Updated struct alarm and struct alarm_timer descriptions.

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Pratyush Patel <pratyushpatel.1995@gmail.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 include/linux/alarmtimer.h | 6 +++---
 kernel/time/alarmtimer.c   | 1 -
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/include/linux/alarmtimer.h b/include/linux/alarmtimer.h
index 52f3b7d..9d80312 100644
--- a/include/linux/alarmtimer.h
+++ b/include/linux/alarmtimer.h
@@ -26,10 +26,10 @@ enum alarmtimer_restart {
  * struct alarm - Alarm timer structure
  * @node:	timerqueue node for adding to the event list this value
  *		also includes the expiration time.
- * @period:	Period for recuring alarms
+ * @timer:	hrtimer used to schedule events while running
  * @function:	Function pointer to be executed when the timer fires.
- * @type:	Alarm type (BOOTTIME/REALTIME)
- * @enabled:	Flag that represents if the alarm is set to fire or not
+ * @type:	Alarm type (BOOTTIME/REALTIME).
+ * @state:	Flag that represents if the alarm is set to fire or not.
  * @data:	Internal data value.
  */
 struct alarm {
diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
index e840ed86..c3aad68 100644
--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -30,7 +30,6 @@
  * struct alarm_base - Alarm timer bases
  * @lock:		Lock for syncrhonized access to the base
  * @timerqueue:		Timerqueue head managing the list of events
- * @timer: 		hrtimer used to schedule events while running
  * @gettime:		Function to read the time correlating to the base
  * @base_clockid:	clockid for the base
  */
-- 
1.9.1

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web