vserver 2.0-pre4
[linux-2.6.git] / kernel / timer.c
index 10af71d..9e7985c 100644 (file)
@@ -686,7 +686,11 @@ static void second_overflow(void)
        if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
            ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
        time_offset += ltemp;
+       #if SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE > 0
        time_adj = -ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
+       #else
+       time_adj = -ltemp >> (SHIFT_HZ + SHIFT_UPDATE - SHIFT_SCALE);
+       #endif
     } else {
        ltemp = time_offset;
        if (!(time_status & STA_FLL))
@@ -694,7 +698,11 @@ static void second_overflow(void)
        if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
            ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
        time_offset -= ltemp;
+       #if SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE > 0
        time_adj = ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
+       #else
+       time_adj = ltemp >> (SHIFT_HZ + SHIFT_UPDATE - SHIFT_SCALE);
+       #endif
     }
 
     /*