Re: [PATCH v8 2/6] time: sync read_boot_clock64() with persistent clock

From: Dou Liyang
Date: Sun Nov 12 2017 - 22:47:53 EST


Hi Pavel,

At 11/09/2017 11:01 AM, Pavel Tatashin wrote:
read_boot_clock64() returns a boot start timestamp from epoch. Some arches
may need to access the persistent clock interface in order to calculate the
epoch offset. The resolution of the persistent clock, however, might be
low. Therefore, in order to avoid time discrepancies a new argument 'now'
is added to read_boot_clock64() parameters. Arch may decide to use it
instead of accessing persistent clock again.

Also, change read_boot_clock64() to have __init prototype since it is
accessed only during boot.

Signed-off-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx>
---
arch/arm/kernel/time.c | 2 +-
arch/s390/kernel/time.c | 2 +-
include/linux/timekeeping.h | 7 +++----
kernel/time/timekeeping.c | 8 ++++++--
4 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index 629f8e9981f1..5b259261a268 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -90,7 +90,7 @@ void read_persistent_clock64(struct timespec64 *ts)
__read_persistent_clock(ts);
}

-void read_boot_clock64(struct timespec64 *ts)
+void __init read_boot_clock64(struct timespec64 *now, struct timespec64 *ts)
{
__read_boot_clock(ts);
}
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 5cbd52169348..780b770e6a89 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -220,7 +220,7 @@ void read_persistent_clock64(struct timespec64 *ts)
ext_to_timespec64(clk, ts);
}

-void read_boot_clock64(struct timespec64 *ts)
+void __init read_boot_clock64(struct timespec64 *now, struct timespec64 *ts)
{
unsigned char clk[STORE_CLOCK_EXT_SIZE];
__u64 delta;
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index c198ab40c04f..73919982045e 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -211,9 +211,8 @@ extern void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot);
*/
extern int persistent_clock_is_local;

-extern void read_persistent_clock64(struct timespec64 *ts);
-extern void read_boot_clock64(struct timespec64 *ts);
-extern int update_persistent_clock64(struct timespec64 now);
-
+void read_persistent_clock64(struct timespec64 *ts);
+void read_boot_clock64(struct timespec64 *now, struct timespec64 *ts);
+int update_persistent_clock64(struct timespec64 now);


why we should remove the *extern* keyword?

Thanks,
dou.