vdso vgetns() didn't mask the time source offset calculation, which
could lead to time problems with 32bit HPET.  Add the masking.
Thanks to Chuck Ebbert for tracking this down.
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
 
 static inline long vgetns(void)
 {
+       long v;
        cycles_t (*vread)(void);
        vread = gtod->clock.vread;
-       return ((vread() - gtod->clock.cycle_last) * gtod->clock.mult) >>
-               gtod->clock.shift;
+       v = (vread() - gtod->clock.cycle_last) & gtod->clock.mask;
+       return (v * gtod->clock.mult) >> gtod->clock.shift;
 }
 
 static noinline int do_realtime(struct timespec *ts)