ltemp >>= SHIFT_KG + time_constant; if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE) ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE; 
ltemp = shift_right(ltemp, SHIFT_KG + time_constant); ltemp = min(ltemp, (MAXPHASE / MINSEC) << SHIFT_UPDATE); ltemp = max(ltemp, -(MAXPHASE / MINSEC) << SHIFT_UPDATE); 
static void second_overflow(void){    long ltemp;    /* Bump the maxerror field */    time_maxerror += time_tolerance >> SHIFT_USEC;    if ( time_maxerror > NTP_PHASE_LIMIT ) {	time_maxerror = NTP_PHASE_LIMIT;	time_status |= STA_UNSYNC;    }    /*     * Leap second processing. If in leap-insert state at     * the end of the day, the system clock is set back one     * second; if in leap-delete state, the system clock is     * set ahead one second. The microtime() routine or     * external clock driver will insure that reported time     * is always monotonic. The ugly divides should be     * replaced.     */    switch (time_state) {    case TIME_OK:	if (time_status & STA_INS)	    time_state = TIME_INS;	else if (time_status & STA_DEL)	    time_state = TIME_DEL;	break;    case TIME_INS:	if (xtime.tv_sec % 86400 == 0) {	    xtime.tv_sec--;	    wall_to_monotonic.tv_sec++;	    /* The timer interpolator will make time change gradually instead	     * of an immediate jump by one second.	     */	    time_interpolator_update(-NSEC_PER_SEC);	    time_state = TIME_OOP;	    clock_was_set();	    printk(KERN_NOTICE "Clock: inserting leap second 23:59:60 UTC\n");	}	break;    case TIME_DEL:	if ((xtime.tv_sec + 1) % 86400 == 0) {	    xtime.tv_sec++;	    wall_to_monotonic.tv_sec--;	    /* Use of time interpolator for a gradual change of time */	    time_interpolator_update(NSEC_PER_SEC);	    time_state = TIME_WAIT;	    clock_was_set();	    printk(KERN_NOTICE "Clock: deleting leap second 23:59:59 UTC\n");	}	break;    case TIME_OOP:	time_state = TIME_WAIT;	break;    case TIME_WAIT:	if (!(time_status & (STA_INS | STA_DEL)))	    time_state = TIME_OK;    }    /*     * Compute the phase adjustment for the next second. In     * PLL mode, the offset is reduced by a fixed factor     * times the time constant. In FLL mode the offset is     * used directly. In either mode, the maximum phase     * adjustment for each second is clamped so as to spread     * the adjustment over not more than the number of     * seconds between updates.     */    if (time_offset < 0) {	ltemp = -time_offset;	if (!(time_status & STA_FLL))	    ltemp >>= SHIFT_KG + time_constant;	if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)	    ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;	time_offset += ltemp;	time_adj = -ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);    } else {	ltemp = time_offset;	if (!(time_status & STA_FLL))	    ltemp >>= SHIFT_KG + time_constant;	if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)	    ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;	time_offset -= ltemp;	time_adj = ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);    }    /*     * Compute the frequency estimate and additional phase     * adjustment due to frequency error for the next     * second. When the PPS signal is engaged, gnaw on the     * watchdog counter and update the frequency computed by     * the pll and the PPS signal.     */    pps_valid++;    if (pps_valid == PPS_VALID) {	/* PPS signal lost */	pps_jitter = MAXTIME;	pps_stabil = MAXFREQ;	time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER |			 STA_PPSWANDER | STA_PPSERROR);    }    ltemp = time_freq + pps_freq;    if (ltemp < 0)	time_adj -= -ltemp >>	    (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);    else	time_adj += ltemp >>	    (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);#if HZ == 100    /* Compensate for (HZ==100) != (1 << SHIFT_HZ).     * Add 25% and 3.125% to get 128.125; => only 0.125% error (p. 14)     */    if (time_adj < 0)	time_adj -= (-time_adj >> 2) + (-time_adj >> 5);    else	time_adj += (time_adj >> 2) + (time_adj >> 5);#endif#if HZ == 250    /* Compensate for (HZ==250) != (1 << SHIFT_HZ).     * Add 1.5625% and 0.78125% to get 255.85938; => only 0.05% error (p. 14)     */    if (time_adj < 0)	time_adj -= (-time_adj >> 6) + (-time_adj >> 7);    else	time_adj += (time_adj >> 6) + (time_adj >> 7);#endif#if HZ == 1000    /* Compensate for (HZ==1000) != (1 << SHIFT_HZ).     * Add 1.5625% and 0.78125% to get 1023.4375; => only 0.05% error (p. 14)     */    if (time_adj < 0)	time_adj -= (-time_adj >> 6) + (-time_adj >> 7);    else	time_adj += (time_adj >> 6) + (time_adj >> 7);#endif}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1bb34a412750291e4e5e9f1d0fe7ae1b7e976098/timer.c/buggy/kernel/timer.c