Hi! I've found a bug in my VIA SuperSouth (vt82c686a) chip (ISA bridge revision 0x12, silicon rev CD) on my FIC VA-503A rev 1.2: When there is heavy disk activity (several tars running concurrently on UDMA66 drive, or tar'ing from one UDMA66 drive to another over two channels), the system time, namely gettimeofday() goes crazy - now and then it advances the time about 1:20 for a fraction of a second and then changes back to normal time. This causes X to blank the screen when it should not, squid to terminate connections with a 'timeout' randomly and other nice effects. This is because the system timer (i8253) counter is reset to a wrong value. Possible causes include temperature problems (although the chip ambient temp is OK), or some crosstalk stuff within the chip. Now I'd like to know if I have a faulty chip, faulty motherboard or whether this problem exists in more chips as well. If anyone owning a motherboard with the vt82c686a chip (VIA with UDMA66 and audio), could test this, I'd appreciate that. Attached is a patch that makes the problems go away by reprogramming the chip in the problematic case. -- Vojtech Pavlik SuSE Labs
diff -urN linux-test10-pre5-old/arch/i386/kernel/time.c linux/arch/i386/kernel/time.c --- linux-test10-pre5-old/arch/i386/kernel/time.c Wed Oct 25 12:05:22 2000 +++ linux/arch/i386/kernel/time.c Thu Oct 26 15:29:23 2000 @@ -492,6 +492,14 @@ count = inb_p(0x40); /* read the latched count */ count |= inb(0x40) << 8; + + if (count > LATCH-1) { + outb_p(0x34, 0x43); + outb_p(LATCH & 0xff, 0x40); + outb(LATCH >> 8, 0x40); + count = LATCH - 1; + } + spin_unlock(&i8253_lock); count = ((LATCH-1) - count) * TICK_SIZE;