Messages in this thread |  | | Date | Fri, 1 Nov 1996 18:40:54 +0100 (MET) | From | Ingo Molnar <> | Subject | Re: time warps, I despair |
| |
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 */
#define CPU_INTERNAL_SPEED_IN_MHZ 100 #define CYCLES_PER_JIFFY (CPU_INTERNAL_SPEED_IN_MHZ*1000000/HZ)
/* 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].
Ingo
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 :)
|  |