diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index 90a6b2c0641..2e414ba3413 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -37,7 +37,6 @@ ULONG KeLargestCacheLine = 0x40; ULONG KiDmaIoCoherency = 0; CHAR KeNumberProcessors = 0; KAFFINITY KeActiveProcessors = 1; -BOOLEAN KiI386PentiumLockErrataPresent; BOOLEAN KiSMTProcessorsPresent; /* Freeze data */ diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index 2374bf40505..4822b71b8aa 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -1176,14 +1176,6 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) /* Save CR2 */ Cr2 = __readcr2(); - /* Check for Pentium LOCK errata */ - if (KiI386PentiumLockErrataPresent) - { - /* Not yet implemented */ - UNIMPLEMENTED; - while (TRUE); - } - /* HACK: Check if interrupts are disabled and enable them */ if (!(TrapFrame->EFlags & EFLAGS_INTERRUPT_MASK)) { diff --git a/reactos/ntoskrnl/mm/ARM3/i386/init.c b/reactos/ntoskrnl/mm/ARM3/i386/init.c index f561ab457db..cfb77c6e33c 100644 --- a/reactos/ntoskrnl/mm/ARM3/i386/init.c +++ b/reactos/ntoskrnl/mm/ARM3/i386/init.c @@ -567,6 +567,16 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) // MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; + /* Check for Pentium LOCK errata */ + if (KiI386PentiumLockErrataPresent) + { + /* Mark the 1st IDT page as Write-Through to prevent a lockup + on a FOOF instruction. + See http://www.rcollins.org/Errata/Dec97/F00FBug.html */ + PointerPte = MiAddressToPte(KeGetPcr()->IDT); + PointerPte->u.Hard.WriteThrough = 1; + } + return STATUS_SUCCESS; }