On Fri, 22 Feb 2019, Vincenzo Frascino wrote: > +static notrace int __cvdso_clock_getres(clockid_t clock, > + struct __vdso_timespec *res) > +{ > + u64 sec, ns; > + u32 msk; > + > + /* Check for negative values or invalid clocks */ > + if (unlikely((u32) clock >= MAX_CLOCKS)) > + goto fallback; > + > + /* > + * Convert the clockid to a bitmask and use it to check which > + * clocks are handled in the VDSO directly. > + */ > + msk = 1U << clock; > + if (msk & VDSO_HRES) { > + /* > + * Preserves the behaviour of posix_get_hrtimer_res(). > + */ So much for the theory. > + sec = 0; > + ns = MONOTONIC_RES_NSEC; posix_get_hrtimer_res() does: sec = 0; ns = hrtimer_resolution; and hrtimer_resolution depends on the enablement of high resolution timers either compile or run time. So you need to have a copy of hrtimer_resolution in the vdso data and use that. > + } else if (msk & VDSO_COARSE) { > + /* > + * Preserves the behaviour of posix_get_coarse_res(). > + */ > + ns = LOW_RES_NSEC; > + sec = __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns); Do we allow CONFIG_HZ = 1? Thanks, tglx