extern spinlock_t i8253_lock; 
voyager_timer_interrupt(struct pt_regs *regs){	if((jiffies & 0x3ff) == 0) {		/* There seems to be something flaky in either		 * hardware or software that is resetting the timer 0		 * count to something much higher than it should be		 * This seems to occur in the boot sequence, just		 * before root is mounted.  Therefore, every 10		 * seconds or so, we sanity check the timer zero count		 * and kick it back to where it should be.		 *		 * FIXME: This is the most awful hack yet seen.  I		 * should work out exactly what is interfering with		 * the timer count settings early in the boot sequence		 * and swiftly introduce it to something sharp and		 * pointy.  */		__u16 val;		extern spinlock_t i8253_lock;		spin_lock(&i8253_lock);				outb_p(0x00, 0x43);		val = inb_p(0x40);		val |= inb(0x40) << 8;		spin_unlock(&i8253_lock);		if(val > LATCH) {			printk("\nVOYAGER: countdown timer value too high (%d), resetting\n\n", val);			spin_lock(&i8253_lock);			outb(0x34,0x43);			outb_p(LATCH & 0xff , 0x40);	/* LSB */			outb(LATCH >> 8 , 0x40);	/* MSB */			spin_unlock(&i8253_lock);		}	}#ifdef CONFIG_SMP	smp_vic_timer_interrupt(regs);#endif}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/306e440daf5f40b195afd83d05dee89fa63189e7/voyager_basic.c/buggy/arch/i386/mach-voyager/voyager_basic.c