void rt_periodic_timer_irq(void)
{
	RTIME new_offset;

	if (first_time_mode2) {
		first_time_mode2 = 0;
		return;
	}

	if (do_rt_get_time == rt_get_time_pentium) {
		/* gradually converge Pentium time to 8254 time */
		new_offset = rt_intr_time - (rt_get_time_pentium() - rt_time_offset);
		rt_time_offset += (new_offset - rt_time_offset) >> 4;
	}

	rt_last_period_time = rt_intr_time;

	if (rt_timer_handler) {
		(*rt_timer_handler)();   /* should periodically call rt_get_time() */
	} else {
		rt_get_time();		 /* have to keep the clock running */
	}

	if (rt_intr_time >= rt_linux_clock) {
		rt_linux_clock += LATCH;
		SFREQ |= 1;
		if (rt_intr_time >= rt_linux_clock) {
			conpr("lost jiffies ");
			conpr("\n");
			rt_linux_clock = rt_intr_time;
		}
	}

	rt_intr_time += timer_counter;
}
