Author: ion Date: Sat Sep 30 11:04:49 2006 New Revision: 24308
URL: http://svn.reactos.org/svn/reactos?rev=24308&view=rev Log: - Save processor state in the PKPRCB in KiInitializeKernel. - Set the booting CPU as idle if no next thread was scheduled. - Raise IRQL to HIGH_LEVEL upon exiting KiInitializeKernel to match the re-lowering to DISPATCH_LEVEL in KiSystemStartup (and subsequent interrupt flush).
Modified: trunk/reactos/ntoskrnl/include/internal/i386/ke.h trunk/reactos/ntoskrnl/ke/i386/kiinit.c
Modified: trunk/reactos/ntoskrnl/include/internal/i386/ke.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/i... ============================================================================== --- trunk/reactos/ntoskrnl/include/internal/i386/ke.h (original) +++ trunk/reactos/ntoskrnl/include/internal/i386/ke.h Sat Sep 30 11:04:49 2006 @@ -65,6 +65,16 @@ );
VOID +NTAPI +KiSaveProcessorControlState( + IN PKPROCESSOR_STATE ProcessorState +); + +VOID +FASTCALL +KiIdleLoop(VOID); + +VOID KiGdtPrepareForApplicationProcessorInit(ULONG Id); VOID Ki386InitializeLdt(VOID);
Modified: trunk/reactos/ntoskrnl/ke/i386/kiinit.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/kiinit.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/ke/i386/kiinit.c (original) +++ trunk/reactos/ntoskrnl/ke/i386/kiinit.c Sat Sep 30 11:04:49 2006 @@ -14,10 +14,6 @@ #include <intrin.h>
/* GLOBALS *******************************************************************/ - -VOID -FASTCALL -KiIdleLoop(VOID);
/* Spinlocks used only on X86 */ KSPIN_LOCK KiFreezeExecutionLock; @@ -111,6 +107,9 @@ /* Save feature bits */ Prcb->FeatureBits = FeatureBits;
+ /* Save CPU state */ + KiSaveProcessorControlState(&Prcb->ProcessorState); + /* Get cache line information for this CPU */ KiGetCacheInformation();
@@ -226,10 +225,17 @@
/* Set the Idle Priority to 0. This will jump into Phase 1 */ KeSetPriorityThread(InitThread, 0); + + /* If there's no thread scheduled, put this CPU in the Idle summary */ + if (!Prcb->NextThread) KiIdleSummary |= 1 << Number; + + /* Raise back to HIGH_LEVEL and clear the PRCB for the loader block */ + KfRaiseIrql(HIGH_LEVEL); + LoaderBlock->Prcb = 0; }
VOID -NTAPI +FASTCALL KiGetMachineBootPointers(IN PKGDTENTRY *Gdt, IN PKIDTENTRY *Idt, IN PKIPCR *Pcr,