Hi, Thomas, If we use (s64)cycles < 0, then how to solve the problem that a 64bit counter become negative? Maybe we can change the "invalid" value from U64_MAX to 0? I think the performance of "cycles == 0" is better than "cycles == U64_MAX". Huacai On Mon, Oct 21, 2019 at 10:58 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > > On Mon, 21 Oct 2019, Thomas Gleixner wrote: > > > On Mon, 21 Oct 2019, Huacai Chen wrote: > > > @@ -50,7 +50,7 @@ static int do_hres(const struct vdso_data *vd, clockid_t clk, > > > cycles = __arch_get_hw_counter(vd->clock_mode); > > > ns = vdso_ts->nsec; > > > last = vd->cycle_last; > > > - if (unlikely((s64)cycles < 0)) > > > + if (unlikely(cycles == U64_MAX)) > > > return -1; > > > > That used to create worse code than the weird (s64) type cast which has the > > same effect. Did you double check that there is no change? > > It still does for 32bit.