i386: PIT stop only, when in periodic or oneshot mode
authorThomas Gleixner <tglx@linutronix.de>
Sat, 21 Jul 2007 11:37:38 +0000 (04:37 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 22 Jul 2007 00:49:15 +0000 (17:49 -0700)
The patch is necessary on one of my boxen, where programming the stop
sequence twice leads to PIT malfunction.

Sigh !

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@suse.de>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/i386/kernel/i8253.c

index 931eabe..bde249d 100644 (file)
@@ -47,9 +47,12 @@ static void init_pit_timer(enum clock_event_mode mode,
 
        case CLOCK_EVT_MODE_SHUTDOWN:
        case CLOCK_EVT_MODE_UNUSED:
-               outb_p(0x30, PIT_MODE);
-               outb_p(0, PIT_CH0);     /* LSB */
-               outb_p(0, PIT_CH0);     /* MSB */
+               if (evt->mode == CLOCK_EVT_MODE_PERIODIC ||
+                   evt->mode == CLOCK_EVT_MODE_ONESHOT) {
+                       outb_p(0x30, PIT_MODE);
+                       outb_p(0, PIT_CH0);
+                       outb_p(0, PIT_CH0);
+               }
                break;
 
        case CLOCK_EVT_MODE_ONESHOT: