linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] timekeeping: cleanups
@ 2018-12-07 13:48 Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver Arnd Bergmann
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

Here are some older cleanups that for one reason or another never made
it into the mainline kernel so far:

- the arch/sh series was posted a couple of times by both
  Baolin and me, with no reply from the sh maintainers

- the vfs patch initially got some opposition when the new
  interfaces were not documented right, but that is done now.

- The remaining three patches simply remove functions that
  have been obsoleted a while ago and have lost their last
  callers now.

I'm adding these into my y2038 tree now, so they make it into
linux-next, planning to send a pull request to Thomas for the
tip tree afterwards.

       Arnd

Arnd Bergmann (8):
  sh: dreamcast: rtc: push down rtc class ops into driver
  sh: sh03: rtc: push down rtc class ops into driver
  sh: remove unused rtc_sh_get/set_time infrastructure
  sh: remove board_time_init() callback
  timekeeping: remove unused {read,update}_persistent_clock
  timekeeping: remove timespec_add/timespec_del
  vfs: replace current_kernel_time64 with ktime equivalent
  timekeeping: remove obsolete time accessors

 Documentation/sh/new-machine.txt              |  8 --
 arch/sh/boards/mach-dreamcast/Makefile        |  4 +-
 arch/sh/boards/mach-dreamcast/rtc.c           | 39 +++++++---
 arch/sh/boards/mach-dreamcast/setup.c         |  1 -
 arch/sh/boards/mach-sh03/Makefile             |  3 +-
 arch/sh/boards/mach-sh03/rtc.c                | 51 ++++++++-----
 arch/sh/boards/mach-sh03/setup.c              |  9 ---
 arch/sh/boards/of-generic.c                   |  8 --
 arch/sh/configs/dreamcast_defconfig           |  2 +
 arch/sh/configs/sh03_defconfig                |  2 +
 arch/sh/include/asm/rtc.h                     |  3 -
 arch/sh/include/mach-dreamcast/mach/sysasic.h |  1 -
 arch/sh/kernel/time.c                         | 74 +------------------
 fs/inode.c                                    |  4 +-
 include/linux/time32.h                        | 25 -------
 include/linux/timekeeping.h                   | 14 ----
 include/linux/timekeeping32.h                 | 15 ----
 kernel/time/ntp.c                             | 10 +--
 kernel/time/time.c                            | 36 ---------
 kernel/time/timekeeping.c                     | 12 +--
 20 files changed, 73 insertions(+), 248 deletions(-)

-- 
2.18.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 15:45   ` Christoph Hellwig
  2018-12-07 13:48 ` [PATCH 2/8] sh: sh03: " Arnd Bergmann
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

The dreamcast RTC support has an extra level of indirection to
provide either the old read_persistent_clock/update_persistent_clock
interface or the rtc-generic device for hctosys/systohc.

Both do the same thing here, so we can do away with the abstraction
and simply enable the RTC core code to take care of it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/sh/boards/mach-dreamcast/Makefile        |  4 +-
 arch/sh/boards/mach-dreamcast/rtc.c           | 39 +++++++++++++------
 arch/sh/boards/mach-dreamcast/setup.c         |  1 -
 arch/sh/configs/dreamcast_defconfig           |  2 +
 arch/sh/include/mach-dreamcast/mach/sysasic.h |  1 -
 5 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/arch/sh/boards/mach-dreamcast/Makefile b/arch/sh/boards/mach-dreamcast/Makefile
index 7b97546c7e5f..62b024bc2a3e 100644
--- a/arch/sh/boards/mach-dreamcast/Makefile
+++ b/arch/sh/boards/mach-dreamcast/Makefile
@@ -2,5 +2,5 @@
 # Makefile for the Sega Dreamcast specific parts of the kernel
 #
 
-obj-y	 := setup.o irq.o rtc.o
-
+obj-y	 := setup.o irq.o
+obj-$(CONFIG_RTC_DRV_GENERIC) += rtc.o
diff --git a/arch/sh/boards/mach-dreamcast/rtc.c b/arch/sh/boards/mach-dreamcast/rtc.c
index 061d65714fcc..4f168d8d2951 100644
--- a/arch/sh/boards/mach-dreamcast/rtc.c
+++ b/arch/sh/boards/mach-dreamcast/rtc.c
@@ -11,8 +11,9 @@
  */
 
 #include <linux/time.h>
-#include <asm/rtc.h>
-#include <asm/io.h>
+#include <linux/rtc.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
 
 /* The AICA RTC has an Epoch of 1/1/1950, so we must subtract 20 years (in
    seconds) to get the standard Unix Epoch when getting the time, and add
@@ -30,9 +31,10 @@
  *
  * Grabs the current RTC seconds counter and adjusts it to the Unix Epoch.
  */
-static void aica_rtc_gettimeofday(struct timespec *ts)
+static int aica_rtc_gettimeofday(struct device *dev, struct rtc_time *tm)
 {
 	unsigned long val1, val2;
+	time64_t t;
 
 	do {
 		val1 = ((__raw_readl(AICA_RTC_SECS_H) & 0xffff) << 16) |
@@ -42,10 +44,12 @@ static void aica_rtc_gettimeofday(struct timespec *ts)
 			(__raw_readl(AICA_RTC_SECS_L) & 0xffff);
 	} while (val1 != val2);
 
-	ts->tv_sec = val1 - TWENTY_YEARS;
+	/* normalize to 1970..2106 time range */
+	t = (u32)(val1 - TWENTY_YEARS);
 
-	/* Can't get nanoseconds with just a seconds counter. */
-	ts->tv_nsec = 0;
+	rtc_time64_to_tm(t, tm);
+
+	return 0;
 }
 
 /**
@@ -54,10 +58,11 @@ static void aica_rtc_gettimeofday(struct timespec *ts)
  *
  * Adjusts the given @tv to the AICA Epoch and sets the RTC seconds counter.
  */
-static int aica_rtc_settimeofday(const time_t secs)
+static int aica_rtc_settimeofday(struct device *dev, struct rtc_time *tm)
 {
 	unsigned long val1, val2;
-	unsigned long adj = secs + TWENTY_YEARS;
+	time64_t secs = rtc_tm_to_time64(tm);
+	u32 adj = secs + TWENTY_YEARS;
 
 	do {
 		__raw_writel((adj & 0xffff0000) >> 16, AICA_RTC_SECS_H);
@@ -73,9 +78,19 @@ static int aica_rtc_settimeofday(const time_t secs)
 	return 0;
 }
 
-void aica_time_init(void)
+static const struct rtc_class_ops rtc_generic_ops = {
+	.read_time = aica_rtc_gettimeofday,
+	.set_time = aica_rtc_settimeofday,
+};
+
+static int __init aica_time_init(void)
 {
-	rtc_sh_get_time = aica_rtc_gettimeofday;
-	rtc_sh_set_time = aica_rtc_settimeofday;
-}
+	struct platform_device *pdev;
+
+	pdev = platform_device_register_data(NULL, "rtc-generic", -1,
+					     &rtc_generic_ops,
+					     sizeof(rtc_generic_ops));
 
+	return PTR_ERR_OR_ZERO(pdev);
+}
+arch_initcall(aica_time_init);
diff --git a/arch/sh/boards/mach-dreamcast/setup.c b/arch/sh/boards/mach-dreamcast/setup.c
index ad1a4db72e04..672c2ad8f8d5 100644
--- a/arch/sh/boards/mach-dreamcast/setup.c
+++ b/arch/sh/boards/mach-dreamcast/setup.c
@@ -30,7 +30,6 @@
 
 static void __init dreamcast_setup(char **cmdline_p)
 {
-	board_time_init = aica_time_init;
 }
 
 static struct sh_machine_vector mv_dreamcast __initmv = {
diff --git a/arch/sh/configs/dreamcast_defconfig b/arch/sh/configs/dreamcast_defconfig
index 3f08dc54480b..1d27666c029f 100644
--- a/arch/sh/configs/dreamcast_defconfig
+++ b/arch/sh/configs/dreamcast_defconfig
@@ -70,3 +70,5 @@ CONFIG_PROC_KCORE=y
 CONFIG_TMPFS=y
 CONFIG_HUGETLBFS=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_GENERIC=y
diff --git a/arch/sh/include/mach-dreamcast/mach/sysasic.h b/arch/sh/include/mach-dreamcast/mach/sysasic.h
index 58f710e1ebc2..59effd1ed3e1 100644
--- a/arch/sh/include/mach-dreamcast/mach/sysasic.h
+++ b/arch/sh/include/mach-dreamcast/mach/sysasic.h
@@ -42,7 +42,6 @@
 /* arch/sh/boards/mach-dreamcast/irq.c */
 extern int systemasic_irq_demux(int);
 extern void systemasic_irq_init(void);
-extern void aica_time_init(void);
 
 #endif /* __ASM_SH_DREAMCAST_SYSASIC_H */
 
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/8] sh: sh03: rtc: push down rtc class ops into driver
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 3/8] sh: remove unused rtc_sh_get/set_time infrastructure Arnd Bergmann
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

The dreamcast RTC support has an extra level of indirection to
provide either the old read_persistent_clock/update_persistent_clock
interface or the rtc-generic device for hctosys/systohc.

By removing the indirection and always using the RTC_CLASS interface,
we can avoid the lossy double conversion between rtc_time and timespec,
so we end up supporting the entire range of 'year' values, and clarifying
the rtc_set_time callback.

I did not change the behavior of sh03_rtc_settimeofday(), which keeps
just updating the seconds/minutes by calling set_rtc_mmss(), this
could be improved if anyone cares. Also, the file should ideally be
moved into drivers/rtc and not use rtc-generic.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/sh/boards/mach-sh03/Makefile |  3 +-
 arch/sh/boards/mach-sh03/rtc.c    | 51 +++++++++++++++++++------------
 arch/sh/boards/mach-sh03/setup.c  |  9 ------
 arch/sh/configs/sh03_defconfig    |  2 ++
 4 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/arch/sh/boards/mach-sh03/Makefile b/arch/sh/boards/mach-sh03/Makefile
index 400306a796ec..47007a3a2fc8 100644
--- a/arch/sh/boards/mach-sh03/Makefile
+++ b/arch/sh/boards/mach-sh03/Makefile
@@ -2,4 +2,5 @@
 # Makefile for the Interface (CTP/PCI-SH03) specific parts of the kernel
 #
 
-obj-y	 := setup.o rtc.o
+obj-y	 := setup.o
+obj-$(CONFIG_RTC_DRV_GENERIC) += rtc.o
diff --git a/arch/sh/boards/mach-sh03/rtc.c b/arch/sh/boards/mach-sh03/rtc.c
index dc3d50e3b7a2..8b23ed7c201c 100644
--- a/arch/sh/boards/mach-sh03/rtc.c
+++ b/arch/sh/boards/mach-sh03/rtc.c
@@ -13,8 +13,9 @@
 #include <linux/bcd.h>
 #include <linux/rtc.h>
 #include <linux/spinlock.h>
-#include <asm/io.h>
-#include <asm/rtc.h>
+#include <linux/io.h>
+#include <linux/rtc.h>
+#include <linux/platform_device.h>
 
 #define RTC_BASE	0xb0000000
 #define RTC_SEC1	(RTC_BASE + 0)
@@ -38,7 +39,7 @@
 
 static DEFINE_SPINLOCK(sh03_rtc_lock);
 
-unsigned long get_cmos_time(void)
+static int sh03_rtc_gettimeofday(struct device *dev, struct rtc_time *tm)
 {
 	unsigned int year, mon, day, hour, min, sec;
 
@@ -75,17 +76,18 @@ unsigned long get_cmos_time(void)
 	}
 
 	spin_unlock(&sh03_rtc_lock);
-	return mktime(year, mon, day, hour, min, sec);
-}
 
-void sh03_rtc_gettimeofday(struct timespec *tv)
-{
+	tm->tm_sec  = sec;
+	tm->tm_min  = min;
+	tm->tm_hour = hour;
+	tm->tm_mday = day;
+	tm->tm_mon  = mon;
+	tm->tm_year = year - 1900;
 
-	tv->tv_sec = get_cmos_time();
-	tv->tv_nsec = 0;
+	return 0;
 }
 
-static int set_rtc_mmss(unsigned long nowtime)
+static int set_rtc_mmss(struct rtc_time *tm)
 {
 	int retval = 0;
 	int real_seconds, real_minutes, cmos_minutes;
@@ -97,8 +99,8 @@ static int set_rtc_mmss(unsigned long nowtime)
 		if (!(__raw_readb(RTC_CTL) & RTC_BUSY))
 			break;
 	cmos_minutes = (__raw_readb(RTC_MIN1) & 0xf) + (__raw_readb(RTC_MIN10) & 0xf) * 10;
-	real_seconds = nowtime % 60;
-	real_minutes = nowtime / 60;
+	real_seconds = tm->tm_sec;
+	real_minutes = tm->tm_min;
 	if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1)
 		real_minutes += 30;		/* correct for half hour time zone */
 	real_minutes %= 60;
@@ -112,22 +114,31 @@ static int set_rtc_mmss(unsigned long nowtime)
 		printk_once(KERN_NOTICE
 		       "set_rtc_mmss: can't update from %d to %d\n",
 		       cmos_minutes, real_minutes);
-		retval = -1;
+		retval = -EINVAL;
 	}
 	spin_unlock(&sh03_rtc_lock);
 
 	return retval;
 }
 
-int sh03_rtc_settimeofday(const time_t secs)
+int sh03_rtc_settimeofday(struct device *dev, struct rtc_time *tm)
 {
-	unsigned long nowtime = secs;
-
-	return set_rtc_mmss(nowtime);
+	return set_rtc_mmss(tm);
 }
 
-void sh03_time_init(void)
+static const struct rtc_class_ops rtc_generic_ops = {
+	.read_time = sh03_rtc_gettimeofday,
+	.set_time = sh03_rtc_settimeofday,
+};
+
+static int __init sh03_time_init(void)
 {
-	rtc_sh_get_time = sh03_rtc_gettimeofday;
-	rtc_sh_set_time = sh03_rtc_settimeofday;
+	struct platform_device *pdev;
+
+	pdev = platform_device_register_data(NULL, "rtc-generic", -1,
+					     &rtc_generic_ops,
+					     sizeof(rtc_generic_ops));
+
+	return PTR_ERR_OR_ZERO(pdev);
 }
+arch_initcall(sh03_time_init);
diff --git a/arch/sh/boards/mach-sh03/setup.c b/arch/sh/boards/mach-sh03/setup.c
index 85e7059a77e9..3901b6031ad5 100644
--- a/arch/sh/boards/mach-sh03/setup.c
+++ b/arch/sh/boards/mach-sh03/setup.c
@@ -22,14 +22,6 @@ static void __init init_sh03_IRQ(void)
 	plat_irq_setup_pins(IRQ_MODE_IRQ);
 }
 
-/* arch/sh/boards/sh03/rtc.c */
-void sh03_time_init(void);
-
-static void __init sh03_setup(char **cmdline_p)
-{
-	board_time_init = sh03_time_init;
-}
-
 static struct resource cf_ide_resources[] = {
 	[0] = {
 		.start  = 0x1f0,
@@ -101,6 +93,5 @@ device_initcall(sh03_devices_setup);
 
 static struct sh_machine_vector mv_sh03 __initmv = {
 	.mv_name		= "Interface (CTP/PCI-SH03)",
-	.mv_setup		= sh03_setup,
 	.mv_init_irq		= init_sh03_IRQ,
 };
diff --git a/arch/sh/configs/sh03_defconfig b/arch/sh/configs/sh03_defconfig
index 2156223405a1..489ffdfb1517 100644
--- a/arch/sh/configs/sh03_defconfig
+++ b/arch/sh/configs/sh03_defconfig
@@ -130,3 +130,5 @@ CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_DEFLATE=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
 CONFIG_CRC_CCITT=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_GENERIC=y
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/8] sh: remove unused rtc_sh_get/set_time infrastructure
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 2/8] sh: sh03: " Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 4/8] sh: remove board_time_init() callback Arnd Bergmann
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

All platforms are now converted to RTC drivers, so this has become
obsolete. The board_time_init() callback still has one caller, but
could otherwise also get killed.

This removes one more usage of the deprecated timespec structure,
which overflows in y2038.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 arch/sh/include/asm/rtc.h |  2 --
 arch/sh/kernel/time.c     | 69 ---------------------------------------
 2 files changed, 71 deletions(-)

diff --git a/arch/sh/include/asm/rtc.h b/arch/sh/include/asm/rtc.h
index c63555ee1255..fe55fbb181aa 100644
--- a/arch/sh/include/asm/rtc.h
+++ b/arch/sh/include/asm/rtc.h
@@ -4,8 +4,6 @@
 
 void time_init(void);
 extern void (*board_time_init)(void);
-extern void (*rtc_sh_get_time)(struct timespec *);
-extern int (*rtc_sh_set_time)(const time_t);
 
 #define RTC_CAP_4_DIGIT_YEAR	(1 << 0)
 
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c
index fcd5e41977d1..eb0a91270499 100644
--- a/arch/sh/kernel/time.c
+++ b/arch/sh/kernel/time.c
@@ -22,75 +22,6 @@
 #include <asm/clock.h>
 #include <asm/rtc.h>
 
-/* Dummy RTC ops */
-static void null_rtc_get_time(struct timespec *tv)
-{
-	tv->tv_sec = mktime(2000, 1, 1, 0, 0, 0);
-	tv->tv_nsec = 0;
-}
-
-static int null_rtc_set_time(const time_t secs)
-{
-	return 0;
-}
-
-void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time;
-int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time;
-
-void read_persistent_clock(struct timespec *ts)
-{
-	rtc_sh_get_time(ts);
-}
-
-#ifdef CONFIG_GENERIC_CMOS_UPDATE
-int update_persistent_clock(struct timespec now)
-{
-	return rtc_sh_set_time(now.tv_sec);
-}
-#endif
-
-static int rtc_generic_get_time(struct device *dev, struct rtc_time *tm)
-{
-	struct timespec tv;
-
-	rtc_sh_get_time(&tv);
-	rtc_time_to_tm(tv.tv_sec, tm);
-	return 0;
-}
-
-static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm)
-{
-	unsigned long secs;
-
-	rtc_tm_to_time(tm, &secs);
-	if ((rtc_sh_set_time == null_rtc_set_time) ||
-	    (rtc_sh_set_time(secs) < 0))
-		return -EOPNOTSUPP;
-
-	return 0;
-}
-
-static const struct rtc_class_ops rtc_generic_ops = {
-	.read_time = rtc_generic_get_time,
-	.set_time = rtc_generic_set_time,
-};
-
-static int __init rtc_generic_init(void)
-{
-	struct platform_device *pdev;
-
-	if (rtc_sh_get_time == null_rtc_get_time)
-		return -ENODEV;
-
-	pdev = platform_device_register_data(NULL, "rtc-generic", -1,
-					     &rtc_generic_ops,
-					     sizeof(rtc_generic_ops));
-
-
-	return PTR_ERR_OR_ZERO(pdev);
-}
-device_initcall(rtc_generic_init);
-
 void (*board_time_init)(void);
 
 static void __init sh_late_time_init(void)
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 4/8] sh: remove board_time_init() callback
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
                   ` (2 preceding siblings ...)
  2018-12-07 13:48 ` [PATCH 3/8] sh: remove unused rtc_sh_get/set_time infrastructure Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock Arnd Bergmann
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

The only remaining user of board_time_init() is the of-generic
machine, and that just calls the global timer_init() function.
Calling that one has no effect on non-DT platforms, so we can
simply call it unconditionally in place of board_time_init().

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 Documentation/sh/new-machine.txt | 8 --------
 arch/sh/boards/of-generic.c      | 8 --------
 arch/sh/include/asm/rtc.h        | 1 -
 arch/sh/kernel/time.c            | 5 +----
 4 files changed, 1 insertion(+), 21 deletions(-)

diff --git a/Documentation/sh/new-machine.txt b/Documentation/sh/new-machine.txt
index f0354164cb0e..e0961a66130b 100644
--- a/Documentation/sh/new-machine.txt
+++ b/Documentation/sh/new-machine.txt
@@ -116,7 +116,6 @@ might look something like:
  * arch/sh/boards/vapor/setup.c - Setup code for imaginary board
  */
 #include <linux/init.h>
-#include <asm/rtc.h> /* for board_time_init() */
 
 const char *get_system_type(void)
 {
@@ -132,13 +131,6 @@ int __init platform_setup(void)
 	 * this board.
 	 */
 
-  	/* 
-	 * Presume all FooTech boards have the same broken timer,
-	 * and also presume that we've defined foo_timer_init to
-	 * do something useful.
-	 */
-  	board_time_init = foo_timer_init;
-
 	/* Start-up imaginary PCI ... */
 
 	/* And whatever else ... */
diff --git a/arch/sh/boards/of-generic.c b/arch/sh/boards/of-generic.c
index cde370cad4ae..6e9786548ac6 100644
--- a/arch/sh/boards/of-generic.c
+++ b/arch/sh/boards/of-generic.c
@@ -117,18 +117,10 @@ static void __init sh_of_mem_reserve(void)
 	early_init_fdt_scan_reserved_mem();
 }
 
-static void __init sh_of_time_init(void)
-{
-	pr_info("SH generic board support: scanning for clocksource devices\n");
-	timer_probe();
-}
-
 static void __init sh_of_setup(char **cmdline_p)
 {
 	struct device_node *root;
 
-	board_time_init = sh_of_time_init;
-
 	sh_mv.mv_name = "Unknown SH model";
 	root = of_find_node_by_path("/");
 	if (root) {
diff --git a/arch/sh/include/asm/rtc.h b/arch/sh/include/asm/rtc.h
index fe55fbb181aa..69dbae2949b0 100644
--- a/arch/sh/include/asm/rtc.h
+++ b/arch/sh/include/asm/rtc.h
@@ -3,7 +3,6 @@
 #define _ASM_RTC_H
 
 void time_init(void);
-extern void (*board_time_init)(void);
 
 #define RTC_CAP_4_DIGIT_YEAR	(1 << 0)
 
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c
index eb0a91270499..8a1c6c8ab4ec 100644
--- a/arch/sh/kernel/time.c
+++ b/arch/sh/kernel/time.c
@@ -22,8 +22,6 @@
 #include <asm/clock.h>
 #include <asm/rtc.h>
 
-void (*board_time_init)(void);
-
 static void __init sh_late_time_init(void)
 {
 	/*
@@ -41,8 +39,7 @@ static void __init sh_late_time_init(void)
 
 void __init time_init(void)
 {
-	if (board_time_init)
-		board_time_init();
+	timer_probe();
 
 	clk_init();
 
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
                   ` (3 preceding siblings ...)
  2018-12-07 13:48 ` [PATCH 4/8] sh: remove board_time_init() callback Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 16:56   ` John Stultz
  2018-12-07 13:48 ` [PATCH 6/8] timekeeping: remove timespec_add/timespec_del Arnd Bergmann
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

After arch/sh has removed the last reference to these functions,
we can remove them completely and just rely on the 64-bit time_t
based versions. This cleans up a rather ugly use of __weak
functions.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/timekeeping32.h |  6 ------
 kernel/time/ntp.c             | 10 +---------
 kernel/time/timekeeping.c     | 12 ++----------
 3 files changed, 3 insertions(+), 25 deletions(-)

diff --git a/include/linux/timekeeping32.h b/include/linux/timekeeping32.h
index a502616f7e1c..0036ff314ac5 100644
--- a/include/linux/timekeeping32.h
+++ b/include/linux/timekeeping32.h
@@ -52,10 +52,4 @@ static inline void getboottime(struct timespec *ts)
 	*ts = timespec64_to_timespec(ts64);
 }
 
-/*
- * Persistent clock related interfaces
- */
-extern void read_persistent_clock(struct timespec *ts);
-extern int update_persistent_clock(struct timespec now);
-
 #endif
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index c5e0cba3b39c..e23be418d015 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -555,17 +555,9 @@ static void sync_rtc_clock(void)
 }
 
 #ifdef CONFIG_GENERIC_CMOS_UPDATE
-int __weak update_persistent_clock(struct timespec now)
-{
-	return -ENODEV;
-}
-
 int __weak update_persistent_clock64(struct timespec64 now64)
 {
-	struct timespec now;
-
-	now = timespec64_to_timespec(now64);
-	return update_persistent_clock(now);
+	return -ENODEV;
 }
 #endif
 
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 2d110c948805..eb09be4871b3 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1467,7 +1467,7 @@ u64 timekeeping_max_deferment(void)
 }
 
 /**
- * read_persistent_clock -  Return time from the persistent clock.
+ * read_persistent_clock64 -  Return time from the persistent clock.
  *
  * Weak dummy function for arches that do not yet support it.
  * Reads the time from the battery backed persistent clock.
@@ -1475,20 +1475,12 @@ u64 timekeeping_max_deferment(void)
  *
  *  XXX - Do be sure to remove it once all arches implement it.
  */
-void __weak read_persistent_clock(struct timespec *ts)
+void __weak read_persistent_clock64(struct timespec64 *ts)
 {
 	ts->tv_sec = 0;
 	ts->tv_nsec = 0;
 }
 
-void __weak read_persistent_clock64(struct timespec64 *ts64)
-{
-	struct timespec ts;
-
-	read_persistent_clock(&ts);
-	*ts64 = timespec_to_timespec64(ts);
-}
-
 /**
  * read_persistent_wall_and_boot_offset - Read persistent clock, and also offset
  *                                        from the boot.
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 6/8] timekeeping: remove timespec_add/timespec_del
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
                   ` (4 preceding siblings ...)
  2018-12-07 13:48 ` [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 16:57   ` John Stultz
  2018-12-07 13:48 ` [PATCH 7/8] vfs: replace current_kernel_time64 with ktime equivalent Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 8/8] timekeeping: remove obsolete time accessors Arnd Bergmann
  7 siblings, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

The last users were removed a while ago since everyone moved to ktime_t,
so we can remove the two unused interfaces for old timespec structures.

With those two gone, set_normalized_timespec() is also unused, so
remove that as well.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/time32.h | 25 -------------------------
 kernel/time/time.c     | 36 ------------------------------------
 2 files changed, 61 deletions(-)

diff --git a/include/linux/time32.h b/include/linux/time32.h
index 61904a6c098f..118b9977080c 100644
--- a/include/linux/time32.h
+++ b/include/linux/time32.h
@@ -96,31 +96,6 @@ static inline int timespec_compare(const struct timespec *lhs, const struct time
 	return lhs->tv_nsec - rhs->tv_nsec;
 }
 
-extern void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec);
-
-static inline struct timespec timespec_add(struct timespec lhs,
-						struct timespec rhs)
-{
-	struct timespec ts_delta;
-
-	set_normalized_timespec(&ts_delta, lhs.tv_sec + rhs.tv_sec,
-				lhs.tv_nsec + rhs.tv_nsec);
-	return ts_delta;
-}
-
-/*
- * sub = lhs - rhs, in normalized form
- */
-static inline struct timespec timespec_sub(struct timespec lhs,
-						struct timespec rhs)
-{
-	struct timespec ts_delta;
-
-	set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec,
-				lhs.tv_nsec - rhs.tv_nsec);
-	return ts_delta;
-}
-
 /*
  * Returns true if the timespec is norm, false if denorm:
  */
diff --git a/kernel/time/time.c b/kernel/time/time.c
index ad204cf6d001..532bb560252d 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -386,42 +386,6 @@ time64_t mktime64(const unsigned int year0, const unsigned int mon0,
 }
 EXPORT_SYMBOL(mktime64);
 
-/**
- * set_normalized_timespec - set timespec sec and nsec parts and normalize
- *
- * @ts:		pointer to timespec variable to be set
- * @sec:	seconds to set
- * @nsec:	nanoseconds to set
- *
- * Set seconds and nanoseconds field of a timespec variable and
- * normalize to the timespec storage format
- *
- * Note: The tv_nsec part is always in the range of
- *	0 <= tv_nsec < NSEC_PER_SEC
- * For negative values only the tv_sec field is negative !
- */
-void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec)
-{
-	while (nsec >= NSEC_PER_SEC) {
-		/*
-		 * The following asm() prevents the compiler from
-		 * optimising this loop into a modulo operation. See
-		 * also __iter_div_u64_rem() in include/linux/time.h
-		 */
-		asm("" : "+rm"(nsec));
-		nsec -= NSEC_PER_SEC;
-		++sec;
-	}
-	while (nsec < 0) {
-		asm("" : "+rm"(nsec));
-		nsec += NSEC_PER_SEC;
-		--sec;
-	}
-	ts->tv_sec = sec;
-	ts->tv_nsec = nsec;
-}
-EXPORT_SYMBOL(set_normalized_timespec);
-
 /**
  * ns_to_timespec - Convert nanoseconds to timespec
  * @nsec:       the nanoseconds value to be converted
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 7/8] vfs: replace current_kernel_time64 with ktime equivalent
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
                   ` (5 preceding siblings ...)
  2018-12-07 13:48 ` [PATCH 6/8] timekeeping: remove timespec_add/timespec_del Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 13:48 ` [PATCH 8/8] timekeeping: remove obsolete time accessors Arnd Bergmann
  7 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

current_time is the last remaining caller of current_kernel_time64(),
which is a wrapper around ktime_get_coarse_real_ts64().  This calls the
latter directly for consistency with the rest of the kernel that is moving
to the ktime_get_ family of time accessors, as now documented in
Documentation/core-api/timekeeping.rst.

An open questions is whether we may want to actually call the more
accurate ktime_get_real_ts64() for file systems that save high-resolution
timestamps in their on-disk format.  This would add a small overhead to
each update of the inode stamps but lead to inode timestamps to actually
have a usable resolution better than one jiffy (1 to 10 milliseconds
normally).  Experiments on a variety of hardware platforms show a typical
time of around 100 CPU cycles to read the cycle counter and calculate the
accurate time from that.  On old platforms without a cycle counter, this
can be signiciantly higher, up to several microseconds to access a
hardware clock, but those have become very rare by now.

I traced the original addition of the current_kernel_time() call to set
the nanosecond fields back to linux-2.5.48, where Andi Kleen added a patch
with subject "nanosecond stat timefields".  Andi explains that the
motivation was to introduce as little overhead as possible back then.  At
this time, reading the clock hardware was also more expensive when most
architectures did not have a cycle counter.

One side effect of having more accurate inode timestamp would be having to
write out the inode every time that mtime/ctime/atime get touched on most
systems, whereas many file systems today only write it when the timestamps
have changed, i.e.  at most once per jiffy unless something else changes
as well.  That change would certainly be noticed in some workloads, which
is enough reason to not do it without a good reason, regardless of the
cost of reading the time.

One thing we could still consider however would be to round the timestamps
from current_time() to multiples of NSEC_PER_JIFFY, e.g.  full
milliseconds rather than having six or seven meaningless but confusing
digits at the end of the timestamp.

Link: http://lkml.kernel.org/r/20180726130820.4174359-1-arnd@arndb.de
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 fs/inode.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/inode.c b/fs/inode.c
index 9e198f00b64c..73432e64f874 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -2146,7 +2146,9 @@ EXPORT_SYMBOL(timespec64_trunc);
  */
 struct timespec64 current_time(struct inode *inode)
 {
-	struct timespec64 now = current_kernel_time64();
+	struct timespec64 now;
+
+	ktime_get_coarse_real_ts64(&now);
 
 	if (unlikely(!inode->i_sb)) {
 		WARN(1, "current_time() called with uninitialized super_block in the inode");
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 8/8] timekeeping: remove obsolete time accessors
  2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
                   ` (6 preceding siblings ...)
  2018-12-07 13:48 ` [PATCH 7/8] vfs: replace current_kernel_time64 with ktime equivalent Arnd Bergmann
@ 2018-12-07 13:48 ` Arnd Bergmann
  2018-12-07 16:58   ` John Stultz
  7 siblings, 1 reply; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 13:48 UTC (permalink / raw)
  To: y2038
  Cc: linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato, Arnd Bergmann

There are no more remaining users of these deprecated wrappers, so
let's remove them before new users have a chance to make it in.

See Documentation/core-api/timekeeping.rst for replacements when
porting old drivers that contain calls to this function.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 include/linux/timekeeping.h   | 14 --------------
 include/linux/timekeeping32.h |  9 ---------
 2 files changed, 23 deletions(-)

diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index 29975e93fcb8..a8ab0f143ac4 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -262,18 +262,4 @@ void read_persistent_wall_and_boot_offset(struct timespec64 *wall_clock,
 					  struct timespec64 *boot_offset);
 extern int update_persistent_clock64(struct timespec64 now);
 
-/*
- * deprecated aliases, don't use in new code
- */
-#define getnstimeofday64(ts)		ktime_get_real_ts64(ts)
-
-static inline struct timespec64 current_kernel_time64(void)
-{
-	struct timespec64 ts;
-
-	ktime_get_coarse_real_ts64(&ts);
-
-	return ts;
-}
-
 #endif
diff --git a/include/linux/timekeeping32.h b/include/linux/timekeeping32.h
index 0036ff314ac5..cc59cc9e0e84 100644
--- a/include/linux/timekeeping32.h
+++ b/include/linux/timekeeping32.h
@@ -6,15 +6,6 @@
  * over time so we can remove the file here.
  */
 
-static inline void do_gettimeofday(struct timeval *tv)
-{
-	struct timespec64 now;
-
-	ktime_get_real_ts64(&now);
-	tv->tv_sec = now.tv_sec;
-	tv->tv_usec = now.tv_nsec/1000;
-}
-
 static inline unsigned long get_seconds(void)
 {
 	return ktime_get_real_seconds();
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver
  2018-12-07 13:48 ` [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver Arnd Bergmann
@ 2018-12-07 15:45   ` Christoph Hellwig
  2018-12-07 16:41     ` Arnd Bergmann
  0 siblings, 1 reply; 14+ messages in thread
From: Christoph Hellwig @ 2018-12-07 15:45 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: y2038, linux-kernel, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, John Stultz, Alexander Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato

On Fri, Dec 07, 2018 at 02:48:17PM +0100, Arnd Bergmann wrote:
> The dreamcast RTC support has an extra level of indirection to
> provide either the old read_persistent_clock/update_persistent_clock
> interface or the rtc-generic device for hctosys/systohc.

s/dreamcast/sh/ in the above sentence?  Also repeated in the other
patches.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver
  2018-12-07 15:45   ` Christoph Hellwig
@ 2018-12-07 16:41     ` Arnd Bergmann
  0 siblings, 0 replies; 14+ messages in thread
From: Arnd Bergmann @ 2018-12-07 16:41 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: y2038 Mailman List, Linux Kernel Mailing List,
	Linux FS-devel Mailing List, Linux-sh list, Baolin Wang,
	Andrew Morton, John Stultz, Al Viro, Thomas Gleixner,
	Rich Felker, Yoshinori Sato

On Fri, Dec 7, 2018 at 4:45 PM Christoph Hellwig <hch@infradead.org> wrote:
>
> On Fri, Dec 07, 2018 at 02:48:17PM +0100, Arnd Bergmann wrote:
> > The dreamcast RTC support has an extra level of indirection to
> > provide either the old read_persistent_clock/update_persistent_clock
> > interface or the rtc-generic device for hctosys/systohc.
>
> s/dreamcast/sh/ in the above sentence?  Also repeated in the other
> patches.

Right, I guess this is at least ambiguous. What I was trying to express
here is that I'm taking the indirection out for dreamcast specifically.

In the other patches, I obviously copied it wrong. Fixed now in my
branch, thanks for the review!

      Arnd

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock
  2018-12-07 13:48 ` [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock Arnd Bergmann
@ 2018-12-07 16:56   ` John Stultz
  0 siblings, 0 replies; 14+ messages in thread
From: John Stultz @ 2018-12-07 16:56 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: y2038 Mailman List, lkml, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, Alexander Viro, Thomas Gleixner, Rich Felker,
	Yoshinori Sato

On Fri, Dec 7, 2018 at 5:49 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> After arch/sh has removed the last reference to these functions,
> we can remove them completely and just rely on the 64-bit time_t
> based versions. This cleans up a rather ugly use of __weak
> functions.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  include/linux/timekeeping32.h |  6 ------
>  kernel/time/ntp.c             | 10 +---------
>  kernel/time/timekeeping.c     | 12 ++----------
>  3 files changed, 3 insertions(+), 25 deletions(-)

Acked-by: John Stultz <john.stultz@linaro.org>

thanks
-john

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 6/8] timekeeping: remove timespec_add/timespec_del
  2018-12-07 13:48 ` [PATCH 6/8] timekeeping: remove timespec_add/timespec_del Arnd Bergmann
@ 2018-12-07 16:57   ` John Stultz
  0 siblings, 0 replies; 14+ messages in thread
From: John Stultz @ 2018-12-07 16:57 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: y2038 Mailman List, lkml, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, Alexander Viro, Thomas Gleixner, Rich Felker,
	Yoshinori Sato

On Fri, Dec 7, 2018 at 5:49 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> The last users were removed a while ago since everyone moved to ktime_t,
> so we can remove the two unused interfaces for old timespec structures.
>
> With those two gone, set_normalized_timespec() is also unused, so
> remove that as well.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  include/linux/time32.h | 25 -------------------------
>  kernel/time/time.c     | 36 ------------------------------------
>  2 files changed, 61 deletions(-)

Acked-by: John Stultz <john.stultz@linaro.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 8/8] timekeeping: remove obsolete time accessors
  2018-12-07 13:48 ` [PATCH 8/8] timekeeping: remove obsolete time accessors Arnd Bergmann
@ 2018-12-07 16:58   ` John Stultz
  0 siblings, 0 replies; 14+ messages in thread
From: John Stultz @ 2018-12-07 16:58 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: y2038 Mailman List, lkml, linux-fsdevel, linux-sh, Baolin Wang,
	Andrew Morton, Alexander Viro, Thomas Gleixner, Rich Felker,
	Yoshinori Sato

On Fri, Dec 7, 2018 at 5:49 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> There are no more remaining users of these deprecated wrappers, so
> let's remove them before new users have a chance to make it in.
>
> See Documentation/core-api/timekeeping.rst for replacements when
> porting old drivers that contain calls to this function.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  include/linux/timekeeping.h   | 14 --------------
>  include/linux/timekeeping32.h |  9 ---------
>  2 files changed, 23 deletions(-)

Acked-by: John Stultz <john.stultz@linaro.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2018-12-07 16:58 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-07 13:48 [PATCH 0/8] timekeeping: cleanups Arnd Bergmann
2018-12-07 13:48 ` [PATCH 1/8] sh: dreamcast: rtc: push down rtc class ops into driver Arnd Bergmann
2018-12-07 15:45   ` Christoph Hellwig
2018-12-07 16:41     ` Arnd Bergmann
2018-12-07 13:48 ` [PATCH 2/8] sh: sh03: " Arnd Bergmann
2018-12-07 13:48 ` [PATCH 3/8] sh: remove unused rtc_sh_get/set_time infrastructure Arnd Bergmann
2018-12-07 13:48 ` [PATCH 4/8] sh: remove board_time_init() callback Arnd Bergmann
2018-12-07 13:48 ` [PATCH 5/8] timekeeping: remove unused {read,update}_persistent_clock Arnd Bergmann
2018-12-07 16:56   ` John Stultz
2018-12-07 13:48 ` [PATCH 6/8] timekeeping: remove timespec_add/timespec_del Arnd Bergmann
2018-12-07 16:57   ` John Stultz
2018-12-07 13:48 ` [PATCH 7/8] vfs: replace current_kernel_time64 with ktime equivalent Arnd Bergmann
2018-12-07 13:48 ` [PATCH 8/8] timekeeping: remove obsolete time accessors Arnd Bergmann
2018-12-07 16:58   ` John Stultz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).