Re: time warps, I despair

Ingo Molnar (
Fri, 1 Nov 1996 18:40:54 +0100 (MET)

could you please try out this modified version of pentium_timer_interrput:

static void pentium_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
unsigned long long saved_timer_cc = 0;
/* code to identify LARGE interrupt delays ... testing only */


/* read Pentium cycle counter */
__asm__(".byte 0x0f,0x31"
:"=a" (last_timer_cc.low),
"=d" (last_timer_cc.high));

if ( last_timer_cc-saved_timer_cc > CYCLES_PER_JIFFY/3 )
printk("ayyee, IRQ delay bigger than 1/3 jiffy: %Lu.\n",
last_timer-saved_timer );

saved_timer_cc = last_timer_cc;
timer_interrupt(irq, NULL, regs);

actually i havent even checked if it compiles. Note that you have to
define CPU_INTERNAL_SPEED_IN_MHZ 133 if you have a 133 MHz machine.

this code identifies lost jiffies >for sure<, provided that the lost
jiffy is 'casual', and not a systematic delay of timer interrupts. [the
latter could be only caused by pathetic load, which is not the case in
your situation].


ps. printk-ing in the timer interrupt isnt exactly pretty, but we are
doomed at that point anyways, so the printk at least wont >cause< a lost
jiffy :)