From a03c1034f6062e69075056c8f31b90e159ce5244 Mon Sep 17 00:00:00 2001 From: Michael Chang Date: Tue, 1 Dec 2015 18:49:38 +0300 Subject: [PATCH] i386: fix TSC calibration using PIT Condition was accidentally reversed, so PIT calibration always failed when PIT was present and always succeeded when PIT was missing, but in the latter case resulted in absurdly fast clock. Reported and tested by Vitaly Kuznetsov --- grub-core/kern/i386/tsc_pit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: grub-2.02~beta2/grub-core/kern/i386/tsc_pit.c =================================================================== --- grub-2.02~beta2.orig/grub-core/kern/i386/tsc_pit.c +++ grub-2.02~beta2/grub-core/kern/i386/tsc_pit.c @@ -49,7 +49,7 @@ grub_pit_wait (void) | GRUB_PIT_SPK_TMR2, GRUB_PIT_SPEAKER_PORT); - if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH)) { + if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00) { ret = 1; /* Wait. */ while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00);