/* advance the kernel's time keeping clocks (xtime and jiffies) */
static irqreturn_t timer_interrupt(int irq, void *dev_id)
/* advance the kernel's time keeping clocks (xtime and jiffies) */
static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
	unsigned tsc, elapse;
	write_seqlock(&xtime_lock);
	while (tsc = get_cycles(),
	       elapse = mn10300_last_tsc - tsc, 
	       elapse > MN10300_TSC_PER_HZ
	       ) {
		mn10300_last_tsc -= MN10300_TSC_PER_HZ;
		profile_tick(CPU_PROFILING);
		do_timer(1);
		check_rtc_time();
	}
	write_sequnlock(&xtime_lock);
	update_process_times(user_mode(get_irq_regs()));
	return IRQ_HANDLED;
}