Messages in this thread Patch in this message | | | From | Andi Kleen <> | Subject | [PATCH for 2.6.23] [1/3] x86_64: Add missing mask operation to vdso | Date | Tue, 11 Sep 2007 14:02:09 +0200 (CEST) |
| |
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 down.
Cc: cebbert@redhat.com
Signed-off-by: Andi Kleen <ak@suse.de>
Index: linux/arch/x86_64/vdso/vclock_gettime.c =================================================================== --- linux.orig/arch/x86_64/vdso/vclock_gettime.c +++ linux/arch/x86_64/vdso/vclock_gettime.c @@ -34,10 +34,11 @@ static long vdso_fallback_gettime(long c 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) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |