LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock()
@ 2015-03-11 3:15 Xunlei Pang
2015-03-11 3:15 ` [PATCH 1/8] time: Add y2038 safe read_boot_clock64() Xunlei Pang
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Xunlei Pang @ 2015-03-11 3:15 UTC (permalink / raw)
To: linux-kernel
Cc: rtc-linux, Thomas Gleixner, Alessandro Zummo, John Stultz,
Arnd Bergmann, linux-omap, Tony Lindgren, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
From: Xunlei Pang <pang.xunlei@linaro.org>
read_boot_clock(), read_persistent_clock() and update_persistent_clock()
all use timespec which may have "y2038 problem", thus we are planning on
converting all of them to use timespec64.
The approach we're using is:
1) First of all, add the "__weak" implementaion of xxx_clock64() which uses
xxx_clock() and timespec64.
Let's take read_persistent_clock() as an example. We can create its
y2038-safe version below:
void __weak read_persistent_clock64(struct timespec64 *ts64)
{
struct timespec ts;
read_persistent_clock(&ts);
*ts64 = timespec_to_timespec64(ts);
}
Then, replace all the call sites of xxx_clock() with xxx_clock64() except
the one used by xxx_clock64().
2) Convert every architecture specific xxx_clock() to xxx_clock64() one by one.
At this point, we can convert the three functions at a time if needed, because
most time they're correlated.
3) Remove xxx_clock() after all its architecture specific implementations have been
converted to use corresponding y2038 safe xxx_clock64().
This patchset firstly finished the step1 for all the three functions, then focused
on read_boot_clock() which is simple to go on with step2 and step3 as a whole show.
As for read_persistent_clock() and update_persistent_clock() which are more complex,
requiring many efforts to convert every architecture specific implementation gradually.
The approach used here is Suggested-by: "Arnd Bergmann <arnd@arndb.de>"
Xunlei Pang (8):
time: Add y2038 safe read_boot_clock64()
time: Add y2038 safe read_persistent_clock64()
time: Add y2038 safe update_persistent_clock64()
ARM: OMAP: 32k counter: Provide y2038-safe
omap_read_persistent_clock() replacement
ARM: tegra: clock: Provide y2038-safe tegra_read_persistent_clock()
replacement
ARM: time: Provide read_boot_clock64() and read_persistent_clock64()
s390: time: Provide read_boot_clock64() and read_persistent_clock64()
time: Remove read_boot_clock()
arch/arm/include/asm/mach/time.h | 3 +--
arch/arm/kernel/time.c | 6 +++---
arch/arm/plat-omap/counter_32k.c | 18 ++++++------------
arch/mips/lasat/sysctl.c | 4 ++--
arch/s390/include/asm/timex.h | 4 ++--
arch/s390/kernel/debug.c | 4 ++--
arch/s390/kernel/time.c | 6 +++---
drivers/clocksource/tegra20_timer.c | 15 +++++++--------
drivers/rtc/systohc.c | 2 +-
include/linux/timekeeping.h | 4 +++-
kernel/time/ntp.c | 13 ++++++++++++-
kernel/time/timekeeping.c | 31 ++++++++++++++++---------------
12 files changed, 58 insertions(+), 52 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/8] time: Add y2038 safe read_boot_clock64()
2015-03-11 3:15 [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock() Xunlei Pang
@ 2015-03-11 3:15 ` Xunlei Pang
[not found] ` <OF2C7428FA.095162DD-ON48257E0C.004641E0-48257E0C.004652BC@zte.com.cn>
2015-03-11 3:15 ` [PATCH 2/8] time: Add y2038 safe read_persistent_clock64() Xunlei Pang
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Xunlei Pang @ 2015-03-11 3:15 UTC (permalink / raw)
To: linux-kernel
Cc: rtc-linux, Thomas Gleixner, Alessandro Zummo, John Stultz,
Arnd Bergmann, linux-omap, Tony Lindgren, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
From: Xunlei Pang <pang.xunlei@linaro.org>
As part of addressing in-kernel y2038 issues, this patch adds
read_boot_clock64() and replaces all the call sites of read_boot_clock()
with this function. This is a __weak implementation, which simply
calls the existing y2038 unsafe read_boot_clock().
This allows architecture specific implementations to be converted
independently, and eventually the y2038 unsafe read_boot_clock()
can be removed after all its architecture specific implementations
have been converted to read_boot_clock64().
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
---
include/linux/timekeeping.h | 1 +
kernel/time/timekeeping.c | 11 +++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index 3eaae47..d53c522 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -263,6 +263,7 @@ static inline bool has_persistent_clock(void)
extern void read_persistent_clock(struct timespec *ts);
extern void read_boot_clock(struct timespec *ts);
+extern void read_boot_clock64(struct timespec64 *ts);
extern int update_persistent_clock(struct timespec now);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 91db941..7080c21 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1072,6 +1072,14 @@ void __weak read_boot_clock(struct timespec *ts)
ts->tv_nsec = 0;
}
+void __weak read_boot_clock64(struct timespec64 *ts64)
+{
+ struct timespec ts;
+
+ read_boot_clock(&ts);
+ *ts64 = timespec_to_timespec64(ts);
+}
+
/*
* timekeeping_init - Initializes the clocksource and common timekeeping values
*/
@@ -1093,8 +1101,7 @@ void __init timekeeping_init(void)
} else if (now.tv_sec || now.tv_nsec)
persistent_clock_exist = true;
- read_boot_clock(&ts);
- boot = timespec_to_timespec64(ts);
+ read_boot_clock64(&boot);
if (!timespec64_valid_strict(&boot)) {
pr_warn("WARNING: Boot clock returned invalid value!\n"
" Check your CMOS/BIOS settings.\n");
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/8] time: Add y2038 safe read_persistent_clock64()
2015-03-11 3:15 [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock() Xunlei Pang
2015-03-11 3:15 ` [PATCH 1/8] time: Add y2038 safe read_boot_clock64() Xunlei Pang
@ 2015-03-11 3:15 ` Xunlei Pang
2015-03-11 3:15 ` [PATCH 3/8] time: Add y2038 safe update_persistent_clock64() Xunlei Pang
2015-03-11 3:15 ` [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement Xunlei Pang
3 siblings, 0 replies; 7+ messages in thread
From: Xunlei Pang @ 2015-03-11 3:15 UTC (permalink / raw)
To: linux-kernel
Cc: rtc-linux, Thomas Gleixner, Alessandro Zummo, John Stultz,
Arnd Bergmann, linux-omap, Tony Lindgren, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
From: Xunlei Pang <pang.xunlei@linaro.org>
As part of addressing in-kernel y2038 issues, this patch adds
read_persistent_clock64() and replaces all the call sites of
read_persistent_clock() with this function. This is a __weak
implementation, which simply calls the existing y2038 unsafe
read_persistent_clock().
This allows architecture specific implementations to be converted
independently, and eventually the y2038 unsafe read_persistent_clock()
can be removed after all its architecture specific implementations
have been converted to read_persistent_clock64().
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
---
arch/mips/lasat/sysctl.c | 4 ++--
include/linux/timekeeping.h | 1 +
kernel/time/timekeeping.c | 22 ++++++++++++----------
3 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/arch/mips/lasat/sysctl.c b/arch/mips/lasat/sysctl.c
index 3b7f65c..cf9b4633 100644
--- a/arch/mips/lasat/sysctl.c
+++ b/arch/mips/lasat/sysctl.c
@@ -75,11 +75,11 @@ static int rtctmp;
int proc_dolasatrtc(struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos)
{
- struct timespec ts;
+ struct timespec64 ts;
int r;
if (!write) {
- read_persistent_clock(&ts);
+ read_persistent_clock64(&ts);
rtctmp = ts.tv_sec;
/* check for time < 0 and set to 0 */
if (rtctmp < 0)
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index d53c522..ff56a0f 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -262,6 +262,7 @@ static inline bool has_persistent_clock(void)
}
extern void read_persistent_clock(struct timespec *ts);
+extern void read_persistent_clock64(struct timespec64 *ts);
extern void read_boot_clock(struct timespec *ts);
extern void read_boot_clock64(struct timespec64 *ts);
extern int update_persistent_clock(struct timespec now);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 7080c21..0e5a696 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1057,6 +1057,14 @@ void __weak read_persistent_clock(struct timespec *ts)
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_boot_clock - Return time of the system start.
*
@@ -1089,10 +1097,8 @@ void __init timekeeping_init(void)
struct clocksource *clock;
unsigned long flags;
struct timespec64 now, boot, tmp;
- struct timespec ts;
- read_persistent_clock(&ts);
- now = timespec_to_timespec64(ts);
+ read_persistent_clock64(&now);
if (!timespec64_valid_strict(&now)) {
pr_warn("WARNING: Persistent clock returned invalid value!\n"
" Check your CMOS/BIOS settings.\n");
@@ -1163,7 +1169,7 @@ static void __timekeeping_inject_sleeptime(struct timekeeper *tk,
* timekeeping_inject_sleeptime64 - Adds suspend interval to timeekeeping values
* @delta: pointer to a timespec64 delta value
*
- * This hook is for architectures that cannot support read_persistent_clock
+ * This hook is for architectures that cannot support read_persistent_clock64
* because their RTC/persistent clock is only accessible when irqs are enabled.
*
* This function should only be called by rtc_resume(), and allows
@@ -1210,12 +1216,10 @@ void timekeeping_resume(void)
struct clocksource *clock = tk->tkr.clock;
unsigned long flags;
struct timespec64 ts_new, ts_delta;
- struct timespec tmp;
cycle_t cycle_now, cycle_delta;
bool suspendtime_found = false;
- read_persistent_clock(&tmp);
- ts_new = timespec_to_timespec64(tmp);
+ read_persistent_clock64(&ts_new);
clockevents_resume();
clocksource_resume();
@@ -1291,10 +1295,8 @@ int timekeeping_suspend(void)
unsigned long flags;
struct timespec64 delta, delta_delta;
static struct timespec64 old_delta;
- struct timespec tmp;
- read_persistent_clock(&tmp);
- timekeeping_suspend_time = timespec_to_timespec64(tmp);
+ read_persistent_clock64(&timekeeping_suspend_time);
/*
* On some systems the persistent_clock can not be detected at
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/8] time: Add y2038 safe update_persistent_clock64()
2015-03-11 3:15 [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock() Xunlei Pang
2015-03-11 3:15 ` [PATCH 1/8] time: Add y2038 safe read_boot_clock64() Xunlei Pang
2015-03-11 3:15 ` [PATCH 2/8] time: Add y2038 safe read_persistent_clock64() Xunlei Pang
@ 2015-03-11 3:15 ` Xunlei Pang
2015-03-11 3:15 ` [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement Xunlei Pang
3 siblings, 0 replies; 7+ messages in thread
From: Xunlei Pang @ 2015-03-11 3:15 UTC (permalink / raw)
To: linux-kernel
Cc: rtc-linux, Thomas Gleixner, Alessandro Zummo, John Stultz,
Arnd Bergmann, linux-omap, Tony Lindgren, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
From: Xunlei Pang <pang.xunlei@linaro.org>
As part of addressing in-kernel y2038 issues, this patch adds
update_persistent_clock64() and replaces all the call sites of
update_persistent_clock() with this function. This is a __weak
implementation, which simply calls the existing y2038 unsafe
update_persistent_clock().
This allows architecture specific implementations to be converted
independently, and eventually y2038-unsafe update_persistent_clock()
can be removed after all its architecture specific implementations
have been converted to update_persistent_clock64().
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
---
drivers/rtc/systohc.c | 2 +-
include/linux/timekeeping.h | 1 +
kernel/time/ntp.c | 13 ++++++++++++-
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/rtc/systohc.c b/drivers/rtc/systohc.c
index eb71872..ef3c07a 100644
--- a/drivers/rtc/systohc.c
+++ b/drivers/rtc/systohc.c
@@ -11,7 +11,7 @@
* rtc_set_ntp_time - Save NTP synchronized time to the RTC
* @now: Current time of day
*
- * Replacement for the NTP platform function update_persistent_clock
+ * Replacement for the NTP platform function update_persistent_clock64
* that stores time for later retrieval by rtc_hctosys.
*
* Returns 0 on successful RTC update, -ENODEV if a RTC update is not
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index ff56a0f..a7fa96b 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -266,6 +266,7 @@ extern void read_persistent_clock64(struct timespec64 *ts);
extern void read_boot_clock(struct timespec *ts);
extern void read_boot_clock64(struct timespec64 *ts);
extern int update_persistent_clock(struct timespec now);
+extern int update_persistent_clock64(struct timespec64 now);
#endif
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 0f60b08..42d1bc7 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -459,6 +459,16 @@ out:
return leap;
}
+#ifdef CONFIG_GENERIC_CMOS_UPDATE
+int __weak update_persistent_clock64(struct timespec64 now64)
+{
+ struct timespec now;
+
+ now = timespec64_to_timespec(now64);
+ return update_persistent_clock(now);
+}
+#endif
+
#if defined(CONFIG_GENERIC_CMOS_UPDATE) || defined(CONFIG_RTC_SYSTOHC)
static void sync_cmos_clock(struct work_struct *work);
@@ -494,8 +504,9 @@ static void sync_cmos_clock(struct work_struct *work)
if (persistent_clock_is_local)
adjust.tv_sec -= (sys_tz.tz_minuteswest * 60);
#ifdef CONFIG_GENERIC_CMOS_UPDATE
- fail = update_persistent_clock(timespec64_to_timespec(adjust));
+ fail = update_persistent_clock64(adjust);
#endif
+
#ifdef CONFIG_RTC_SYSTOHC
if (fail == -ENODEV)
fail = rtc_set_ntp_time(adjust);
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement
2015-03-11 3:15 [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock() Xunlei Pang
` (2 preceding siblings ...)
2015-03-11 3:15 ` [PATCH 3/8] time: Add y2038 safe update_persistent_clock64() Xunlei Pang
@ 2015-03-11 3:15 ` Xunlei Pang
2015-03-11 15:28 ` Tony Lindgren
3 siblings, 1 reply; 7+ messages in thread
From: Xunlei Pang @ 2015-03-11 3:15 UTC (permalink / raw)
To: linux-kernel
Cc: rtc-linux, Thomas Gleixner, Alessandro Zummo, John Stultz,
Arnd Bergmann, linux-omap, Tony Lindgren, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
From: Xunlei Pang <pang.xunlei@linaro.org>
As part of addressing "y2038 problem" for in-kernel uses, this
patch adds the y2038-safe omap_read_persistent_clock64() using
timespec64.
Because we rely on some subsequent changes to convert arm multiarch
support, omap_read_persistent_clock() will be removed then.
Also remove the needless spinlock, because read_persistent_clock()
doesn't run simultaneously.
Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
---
arch/arm/plat-omap/counter_32k.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c
index 61b4d70..d422e36 100644
--- a/arch/arm/plat-omap/counter_32k.c
+++ b/arch/arm/plat-omap/counter_32k.c
@@ -44,24 +44,20 @@ static u64 notrace omap_32k_read_sched_clock(void)
}
/**
- * omap_read_persistent_clock - Return time from a persistent clock.
+ * omap_read_persistent_clock64 - Return time from a persistent clock.
*
* Reads the time from a source which isn't disabled during PM, the
* 32k sync timer. Convert the cycles elapsed since last read into
- * nsecs and adds to a monotonically increasing timespec.
+ * nsecs and adds to a monotonically increasing timespec64.
*/
-static struct timespec persistent_ts;
+static struct timespec64 persistent_ts;
static cycles_t cycles;
static unsigned int persistent_mult, persistent_shift;
-static DEFINE_SPINLOCK(read_persistent_clock_lock);
-static void omap_read_persistent_clock(struct timespec *ts)
+static void omap_read_persistent_clock64(struct timespec64 *ts)
{
unsigned long long nsecs;
cycles_t last_cycles;
- unsigned long flags;
-
- spin_lock_irqsave(&read_persistent_clock_lock, flags);
last_cycles = cycles;
cycles = sync32k_cnt_reg ? readl_relaxed(sync32k_cnt_reg) : 0;
@@ -69,11 +65,17 @@ static void omap_read_persistent_clock(struct timespec *ts)
nsecs = clocksource_cyc2ns(cycles - last_cycles,
persistent_mult, persistent_shift);
- timespec_add_ns(&persistent_ts, nsecs);
+ timespec64_add_ns(&persistent_ts, nsecs);
*ts = persistent_ts;
+}
+
+static void omap_read_persistent_clock(struct timespec *ts)
+{
+ struct timespec64 ts64;
- spin_unlock_irqrestore(&read_persistent_clock_lock, flags);
+ omap_read_persistent_clock64(&ts64);
+ *ts = timespec64_to_timespec(ts64);
}
/**
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement
2015-03-11 3:15 ` [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement Xunlei Pang
@ 2015-03-11 15:28 ` Tony Lindgren
0 siblings, 0 replies; 7+ messages in thread
From: Tony Lindgren @ 2015-03-11 15:28 UTC (permalink / raw)
To: Xunlei Pang
Cc: linux-kernel, rtc-linux, Thomas Gleixner, Alessandro Zummo,
John Stultz, Arnd Bergmann, linux-omap, linux-tegra,
Stephen Warren, linux390, Martin Schwidefsky, Ralf Baechle,
Arnd Bergmann, Xunlei Pang
* Xunlei Pang <xlpang@126.com> [150310 20:18]:
> From: Xunlei Pang <pang.xunlei@linaro.org>
>
> As part of addressing "y2038 problem" for in-kernel uses, this
> patch adds the y2038-safe omap_read_persistent_clock64() using
> timespec64.
>
> Because we rely on some subsequent changes to convert arm multiarch
> support, omap_read_persistent_clock() will be removed then.
>
> Also remove the needless spinlock, because read_persistent_clock()
> doesn't run simultaneously.
>
> Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
Looks OK to me:
Acked-by: Tony Lindgren <tony@atomide.com>
> ---
> arch/arm/plat-omap/counter_32k.c | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c
> index 61b4d70..d422e36 100644
> --- a/arch/arm/plat-omap/counter_32k.c
> +++ b/arch/arm/plat-omap/counter_32k.c
> @@ -44,24 +44,20 @@ static u64 notrace omap_32k_read_sched_clock(void)
> }
>
> /**
> - * omap_read_persistent_clock - Return time from a persistent clock.
> + * omap_read_persistent_clock64 - Return time from a persistent clock.
> *
> * Reads the time from a source which isn't disabled during PM, the
> * 32k sync timer. Convert the cycles elapsed since last read into
> - * nsecs and adds to a monotonically increasing timespec.
> + * nsecs and adds to a monotonically increasing timespec64.
> */
> -static struct timespec persistent_ts;
> +static struct timespec64 persistent_ts;
> static cycles_t cycles;
> static unsigned int persistent_mult, persistent_shift;
> -static DEFINE_SPINLOCK(read_persistent_clock_lock);
>
> -static void omap_read_persistent_clock(struct timespec *ts)
> +static void omap_read_persistent_clock64(struct timespec64 *ts)
> {
> unsigned long long nsecs;
> cycles_t last_cycles;
> - unsigned long flags;
> -
> - spin_lock_irqsave(&read_persistent_clock_lock, flags);
>
> last_cycles = cycles;
> cycles = sync32k_cnt_reg ? readl_relaxed(sync32k_cnt_reg) : 0;
> @@ -69,11 +65,17 @@ static void omap_read_persistent_clock(struct timespec *ts)
> nsecs = clocksource_cyc2ns(cycles - last_cycles,
> persistent_mult, persistent_shift);
>
> - timespec_add_ns(&persistent_ts, nsecs);
> + timespec64_add_ns(&persistent_ts, nsecs);
>
> *ts = persistent_ts;
> +}
> +
> +static void omap_read_persistent_clock(struct timespec *ts)
> +{
> + struct timespec64 ts64;
>
> - spin_unlock_irqrestore(&read_persistent_clock_lock, flags);
> + omap_read_persistent_clock64(&ts64);
> + *ts = timespec64_to_timespec(ts64);
> }
>
> /**
> --
> 1.9.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/8] time: Add y2038 safe read_boot_clock64()
[not found] ` <OF2C7428FA.095162DD-ON48257E0C.004641E0-48257E0C.004652BC@zte.com.cn>
@ 2015-03-18 16:30 ` John Stultz
0 siblings, 0 replies; 7+ messages in thread
From: John Stultz @ 2015-03-18 16:30 UTC (permalink / raw)
To: pang.xunlei
Cc: lkml, Alessandro Zummo, Arnd Bergmann, Arnd Bergmann, linux-omap,
linux-tegra, linux390, Xunlei Pang, Ralf Baechle, rtc-linux,
Martin Schwidefsky, Stephen Warren, Thomas Gleixner,
Tony Lindgren
On Wed, Mar 18, 2015 at 5:48 AM, <pang.xunlei@zte.com.cn> wrote:
> Ping ...
Thanks for the reminder. Since there's not been any objections, I'm
queuing this up.
thanks
-john
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-03-18 16:30 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-11 3:15 [PATCH 0/8] Add y2038 safe replacements for read_boot_clock(), read_persistent_clock() and update_persistent_clock() Xunlei Pang
2015-03-11 3:15 ` [PATCH 1/8] time: Add y2038 safe read_boot_clock64() Xunlei Pang
[not found] ` <OF2C7428FA.095162DD-ON48257E0C.004641E0-48257E0C.004652BC@zte.com.cn>
2015-03-18 16:30 ` John Stultz
2015-03-11 3:15 ` [PATCH 2/8] time: Add y2038 safe read_persistent_clock64() Xunlei Pang
2015-03-11 3:15 ` [PATCH 3/8] time: Add y2038 safe update_persistent_clock64() Xunlei Pang
2015-03-11 3:15 ` [PATCH 4/8] ARM: OMAP: 32k counter: Provide y2038-safe omap_read_persistent_clock() replacement Xunlei Pang
2015-03-11 15:28 ` Tony Lindgren
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).