s390: time: Provide read_boot_clock64() and read_persistent_clock64()
As part of addressing the "y2038 problem" for in-kernel uses, this patch converts read_boot_clock() to read_boot_clock64() and read_persistent_clock() to read_persistent_clock64() using timespec64. Rename some instances of 'timespec' to 'timespec64' in time.c and related references Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: linux390@de.ibm.com Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org> [jstultz: Fixed minor style and grammer tweaks pointed out by Ingo] Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
parent
30f3b3f983
commit
689911c734
|
@ -10,6 +10,7 @@
|
||||||
#define _ASM_S390_TIMEX_H
|
#define _ASM_S390_TIMEX_H
|
||||||
|
|
||||||
#include <asm/lowcore.h>
|
#include <asm/lowcore.h>
|
||||||
|
#include <linux/time64.h>
|
||||||
|
|
||||||
/* The value of the TOD clock for 1.1.1970. */
|
/* The value of the TOD clock for 1.1.1970. */
|
||||||
#define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
|
#define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
|
||||||
|
@ -108,10 +109,10 @@ int get_sync_clock(unsigned long long *clock);
|
||||||
void init_cpu_timer(void);
|
void init_cpu_timer(void);
|
||||||
unsigned long long monotonic_clock(void);
|
unsigned long long monotonic_clock(void);
|
||||||
|
|
||||||
void tod_to_timeval(__u64, struct timespec *);
|
void tod_to_timeval(__u64 todval, struct timespec64 *xt);
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
void stck_to_timespec(unsigned long long stck, struct timespec *ts)
|
void stck_to_timespec64(unsigned long long stck, struct timespec64 *ts)
|
||||||
{
|
{
|
||||||
tod_to_timeval(stck - TOD_UNIX_EPOCH, ts);
|
tod_to_timeval(stck - TOD_UNIX_EPOCH, ts);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1457,23 +1457,24 @@ int
|
||||||
debug_dflt_header_fn(debug_info_t * id, struct debug_view *view,
|
debug_dflt_header_fn(debug_info_t * id, struct debug_view *view,
|
||||||
int area, debug_entry_t * entry, char *out_buf)
|
int area, debug_entry_t * entry, char *out_buf)
|
||||||
{
|
{
|
||||||
struct timespec time_spec;
|
struct timespec64 time_spec;
|
||||||
char *except_str;
|
char *except_str;
|
||||||
unsigned long caller;
|
unsigned long caller;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
unsigned int level;
|
unsigned int level;
|
||||||
|
|
||||||
level = entry->id.fields.level;
|
level = entry->id.fields.level;
|
||||||
stck_to_timespec(entry->id.stck, &time_spec);
|
stck_to_timespec64(entry->id.stck, &time_spec);
|
||||||
|
|
||||||
if (entry->id.fields.exception)
|
if (entry->id.fields.exception)
|
||||||
except_str = "*";
|
except_str = "*";
|
||||||
else
|
else
|
||||||
except_str = "-";
|
except_str = "-";
|
||||||
caller = ((unsigned long) entry->caller) & PSW_ADDR_INSN;
|
caller = ((unsigned long) entry->caller) & PSW_ADDR_INSN;
|
||||||
rc += sprintf(out_buf, "%02i %011lu:%06lu %1u %1s %02i %p ",
|
rc += sprintf(out_buf, "%02i %011lld:%06lu %1u %1s %02i %p ",
|
||||||
area, time_spec.tv_sec, time_spec.tv_nsec / 1000, level,
|
area, (long long)time_spec.tv_sec,
|
||||||
except_str, entry->id.fields.cpuid, (void *) caller);
|
time_spec.tv_nsec / 1000, level, except_str,
|
||||||
|
entry->id.fields.cpuid, (void *)caller);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(debug_dflt_header_fn);
|
EXPORT_SYMBOL(debug_dflt_header_fn);
|
||||||
|
|
|
@ -76,7 +76,7 @@ unsigned long long monotonic_clock(void)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(monotonic_clock);
|
EXPORT_SYMBOL(monotonic_clock);
|
||||||
|
|
||||||
void tod_to_timeval(__u64 todval, struct timespec *xt)
|
void tod_to_timeval(__u64 todval, struct timespec64 *xt)
|
||||||
{
|
{
|
||||||
unsigned long long sec;
|
unsigned long long sec;
|
||||||
|
|
||||||
|
@ -181,12 +181,12 @@ static void timing_alert_interrupt(struct ext_code ext_code,
|
||||||
static void etr_reset(void);
|
static void etr_reset(void);
|
||||||
static void stp_reset(void);
|
static void stp_reset(void);
|
||||||
|
|
||||||
void read_persistent_clock(struct timespec *ts)
|
void read_persistent_clock64(struct timespec64 *ts)
|
||||||
{
|
{
|
||||||
tod_to_timeval(get_tod_clock() - TOD_UNIX_EPOCH, ts);
|
tod_to_timeval(get_tod_clock() - TOD_UNIX_EPOCH, ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_boot_clock(struct timespec *ts)
|
void read_boot_clock64(struct timespec64 *ts)
|
||||||
{
|
{
|
||||||
tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, ts);
|
tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, ts);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue