Merge branch 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull time/Y2038 updates from Thomas Gleixner: - Consolidate SySV IPC UAPI headers - Convert SySV IPC to the new COMPAT_32BIT_TIME mechanism - Cleanup the core interfaces and standardize on the ktime_get_* naming convention. - Convert the X86 platform ops to timespec64 - Remove the ugly temporary timespec64 hack * 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (22 commits) x86: Convert x86_platform_ops to timespec64 timekeeping: Add more coarse clocktai/boottime interfaces timekeeping: Add ktime_get_coarse_with_offset timekeeping: Standardize on ktime_get_*() naming timekeeping: Clean up ktime_get_real_ts64 timekeeping: Remove timespec64 hack y2038: ipc: Redirect ipc(SEMTIMEDOP, ...) to compat_ksys_semtimedop y2038: ipc: Enable COMPAT_32BIT_TIME y2038: ipc: Use __kernel_timespec y2038: ipc: Report long times to user space y2038: ipc: Use ktime_get_real_seconds consistently y2038: xtensa: Extend sysvipc data structures y2038: powerpc: Extend sysvipc data structures y2038: sparc: Extend sysvipc data structures y2038: parisc: Extend sysvipc data structures y2038: mips: Extend sysvipc data structures y2038: arm64: Extend sysvipc compat data structures y2038: s390: Remove unneeded ipc uapi header files y2038: ia64: Remove unneeded ipc uapi header files y2038: alpha: Remove unneeded ipc uapi header files ...
This commit is contained in:
@@ -37,7 +37,7 @@ static uint32_t __init jailhouse_detect(void)
|
||||
return jailhouse_cpuid_base();
|
||||
}
|
||||
|
||||
static void jailhouse_get_wallclock(struct timespec *now)
|
||||
static void jailhouse_get_wallclock(struct timespec64 *now)
|
||||
{
|
||||
memset(now, 0, sizeof(*now));
|
||||
}
|
||||
|
@@ -53,7 +53,7 @@ static struct pvclock_wall_clock *wall_clock;
|
||||
* have elapsed since the hypervisor wrote the data. So we try to account for
|
||||
* that with system time
|
||||
*/
|
||||
static void kvm_get_wallclock(struct timespec *now)
|
||||
static void kvm_get_wallclock(struct timespec64 *now)
|
||||
{
|
||||
struct pvclock_vcpu_time_info *vcpu_time;
|
||||
int low, high;
|
||||
@@ -72,7 +72,7 @@ static void kvm_get_wallclock(struct timespec *now)
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
static int kvm_set_wallclock(const struct timespec *now)
|
||||
static int kvm_set_wallclock(const struct timespec64 *now)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@@ -123,28 +123,35 @@ u64 pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
||||
|
||||
void pvclock_read_wallclock(struct pvclock_wall_clock *wall_clock,
|
||||
struct pvclock_vcpu_time_info *vcpu_time,
|
||||
struct timespec *ts)
|
||||
struct timespec64 *ts)
|
||||
{
|
||||
u32 version;
|
||||
u64 delta;
|
||||
struct timespec now;
|
||||
struct timespec64 now;
|
||||
|
||||
/* get wallclock at system boot */
|
||||
do {
|
||||
version = wall_clock->version;
|
||||
rmb(); /* fetch version before time */
|
||||
/*
|
||||
* Note: wall_clock->sec is a u32 value, so it can
|
||||
* only store dates between 1970 and 2106. To allow
|
||||
* times beyond that, we need to create a new hypercall
|
||||
* interface with an extended pvclock_wall_clock structure
|
||||
* like ARM has.
|
||||
*/
|
||||
now.tv_sec = wall_clock->sec;
|
||||
now.tv_nsec = wall_clock->nsec;
|
||||
rmb(); /* fetch time before checking version */
|
||||
} while ((wall_clock->version & 1) || (version != wall_clock->version));
|
||||
|
||||
delta = pvclock_clocksource_read(vcpu_time); /* time since system boot */
|
||||
delta += now.tv_sec * (u64)NSEC_PER_SEC + now.tv_nsec;
|
||||
delta += now.tv_sec * NSEC_PER_SEC + now.tv_nsec;
|
||||
|
||||
now.tv_nsec = do_div(delta, NSEC_PER_SEC);
|
||||
now.tv_sec = delta;
|
||||
|
||||
set_normalized_timespec(ts, now.tv_sec, now.tv_nsec);
|
||||
set_normalized_timespec64(ts, now.tv_sec, now.tv_nsec);
|
||||
}
|
||||
|
||||
void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti)
|
||||
|
@@ -39,7 +39,7 @@ EXPORT_SYMBOL(rtc_lock);
|
||||
* jump to the next second precisely 500 ms later. Check the Motorola
|
||||
* MC146818A or Dallas DS12887 data sheet for details.
|
||||
*/
|
||||
int mach_set_rtc_mmss(const struct timespec *now)
|
||||
int mach_set_rtc_mmss(const struct timespec64 *now)
|
||||
{
|
||||
unsigned long long nowtime = now->tv_sec;
|
||||
struct rtc_time tm;
|
||||
@@ -60,7 +60,7 @@ int mach_set_rtc_mmss(const struct timespec *now)
|
||||
return retval;
|
||||
}
|
||||
|
||||
void mach_get_cmos_time(struct timespec *now)
|
||||
void mach_get_cmos_time(struct timespec64 *now)
|
||||
{
|
||||
unsigned int status, year, mon, day, hour, min, sec, century = 0;
|
||||
unsigned long flags;
|
||||
@@ -118,7 +118,7 @@ void mach_get_cmos_time(struct timespec *now)
|
||||
} else
|
||||
year += CMOS_YEARS_OFFS;
|
||||
|
||||
now->tv_sec = mktime(year, mon, day, hour, min, sec);
|
||||
now->tv_sec = mktime64(year, mon, day, hour, min, sec);
|
||||
now->tv_nsec = 0;
|
||||
}
|
||||
|
||||
@@ -145,13 +145,13 @@ void rtc_cmos_write(unsigned char val, unsigned char addr)
|
||||
}
|
||||
EXPORT_SYMBOL(rtc_cmos_write);
|
||||
|
||||
int update_persistent_clock(struct timespec now)
|
||||
int update_persistent_clock64(struct timespec64 now)
|
||||
{
|
||||
return x86_platform.set_wallclock(&now);
|
||||
}
|
||||
|
||||
/* not static: needed by APM */
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
void read_persistent_clock64(struct timespec64 *ts)
|
||||
{
|
||||
x86_platform.get_wallclock(ts);
|
||||
}
|
||||
|
Reference in New Issue
Block a user