Commit 98218e92 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] cyclone: PIT sanity checking

From: john stultz <johnstul@us.ibm.com>

In testing for SLES9, we ran across a bug caused by userspace apps poking
the PIT which caused bad values to be read by the kernel.  This would then
trigger the lost tick detection code with insane values and would then
break the SCSI subsystem.

This patch includes the PIT sanity check from the TSC timesource into the
cyclone timesource code, which catches the bad case described above and
resolves the issue.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 515f9252
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
#include "io_ports.h"
extern spinlock_t i8253_lock; extern spinlock_t i8253_lock;
...@@ -62,6 +63,17 @@ static void mark_offset_cyclone(void) ...@@ -62,6 +63,17 @@ static void mark_offset_cyclone(void)
count = inb_p(0x40); /* read the latched count */ count = inb_p(0x40); /* read the latched count */
count |= inb(0x40) << 8; count |= inb(0x40) << 8;
/*
* VIA686a test code... reset the latch if count > max + 1
* from timer_pit.c - cjb
*/
if (count > LATCH) {
outb_p(0x34, PIT_MODE);
outb_p(LATCH & 0xff, PIT_CH0);
outb(LATCH >> 8, PIT_CH0);
count = LATCH - 1;
}
spin_unlock(&i8253_lock); spin_unlock(&i8253_lock);
/* lost tick compensation */ /* lost tick compensation */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment