On Fri, 22 Feb 2019, Vincenzo Frascino wrote: > void update_vsyscall_tz(void) > { > - vsyscall_gtod_data.tz_minuteswest = sys_tz.tz_minuteswest; > - vsyscall_gtod_data.tz_dsttime = sys_tz.tz_dsttime; > + vdso_data.tz_minuteswest = sys_tz.tz_minuteswest; > + vdso_data.tz_dsttime = sys_tz.tz_dsttime; > } > > void update_vsyscall(struct timekeeper *tk) > { > int vclock_mode = tk->tkr_mono.clock->archdata.vclock_mode; > - struct vsyscall_gtod_data *vdata = &vsyscall_gtod_data; > - struct vgtod_ts *base; > + struct vdso_data *vdata = &vdso_data; > + struct vdso_timestamp *vdso_ts; > u64 nsec; > > /* Mark the new vclock used. */ > BUILD_BUG_ON(VCLOCK_MAX >= 32); > WRITE_ONCE(vclocks_used, READ_ONCE(vclocks_used) | (1 << vclock_mode)); > > - gtod_write_begin(vdata); > + vdso_write_begin(vdata); This begs the question why this update code is still architecture specific. The vdso data is now generic, so the whole update can be generic as well. The only x86 specific thing is this perhaps: int vclock_mode = tk->tkr_mono.clock->archdata.vclock_mode; vdata->clock_mode = vclock_mode; But either than can be made generic and mandatory or easily resolved with a trivial arch_update_vsyscall() inline. Thanks, tglx