[ros-diffs] [ion] 24438: - Inline and make some slight correctiions to KiInitailizeSystemClock, since it's based on the Ex subsystem, not Ke. Add code for boot-time timezone bias, but currently disabled because I need to implement a function to read configuration registry data at startup. - Improve Init bugchecks to give the exact module that failed. Add Kd initilization in the same block as the other subsystems. - Rename and re-arrange some initlization calls.

ion at svn.reactos.org ion at svn.reactos.org
Sun Oct 8 06:05:28 CEST 2006


Author: ion
Date: Sun Oct  8 08:05:27 2006
New Revision: 24438

URL: http://svn.reactos.org/svn/reactos?rev=24438&view=rev
Log:
- Inline and make some slight correctiions to KiInitailizeSystemClock, since it's based on the Ex subsystem, not Ke. Add code for boot-time timezone bias, but currently disabled because I need to implement a function to read configuration registry data at startup.
- Improve Init bugchecks to give the exact module that failed. Add Kd initilization in the same block as the other subsystems.
- Rename and re-arrange some initlization calls.

Modified:
    trunk/reactos/ntoskrnl/cc/cacheman.c
    trunk/reactos/ntoskrnl/cm/registry.c
    trunk/reactos/ntoskrnl/ex/init.c
    trunk/reactos/ntoskrnl/ex/sysinfo.c
    trunk/reactos/ntoskrnl/ex/time.c
    trunk/reactos/ntoskrnl/fs/filelock.c
    trunk/reactos/ntoskrnl/include/internal/cc.h
    trunk/reactos/ntoskrnl/include/internal/ex.h
    trunk/reactos/ntoskrnl/include/internal/fsrtl.h
    trunk/reactos/ntoskrnl/include/internal/ke.h
    trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h
    trunk/reactos/ntoskrnl/kd/kdinit.c
    trunk/reactos/ntoskrnl/ke/clock.c

Modified: trunk/reactos/ntoskrnl/cc/cacheman.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cc/cacheman.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/cc/cacheman.c (original)
+++ trunk/reactos/ntoskrnl/cc/cacheman.c Sun Oct  8 08:05:27 2006
@@ -18,7 +18,7 @@
 
 VOID
 NTAPI
-CcInit(VOID)
+CcInitializeCacheManager(VOID)
 {
   CcInitView();
 }

Modified: trunk/reactos/ntoskrnl/cm/registry.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/cm/registry.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/cm/registry.c (original)
+++ trunk/reactos/ntoskrnl/cm/registry.c Sun Oct  8 08:05:27 2006
@@ -188,7 +188,8 @@
 
 VOID 
 INIT_FUNCTION
-CmInitializeRegistry(VOID)
+NTAPI
+CmInitSystem1(VOID)
 {
   OBJECT_ATTRIBUTES ObjectAttributes;
   UNICODE_STRING KeyName;

Modified: trunk/reactos/ntoskrnl/ex/init.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/init.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/init.c (original)
+++ trunk/reactos/ntoskrnl/ex/init.c Sun Oct  8 08:05:27 2006
@@ -14,6 +14,9 @@
 #include <internal/debug.h>
 
 /* DATA **********************************************************************/
+
+/* HACK */
+extern BOOLEAN KiClockSetupComplete;
 
 #define BUILD_OSCSDVERSION(major, minor) (((major & 0xFF) << 8) | (minor & 0xFF))
 
@@ -858,6 +861,8 @@
     HANDLE ProcessHandle;
     HANDLE ThreadHandle;
     NTSTATUS Status;
+    TIME_FIELDS TimeFields;
+    LARGE_INTEGER SystemBootTime, UniversalBootTime;
 
     /* Set to phase 1 */
     ExpInitializationPhase = 1;
@@ -868,54 +873,88 @@
     /* Do Phase 1 HAL Initialization */
     HalInitSystem(1, KeLoaderBlock);
 
-    /* Setup system time */
-    KiInitializeSystemClock();
+    /* Check if GUI Boot is enabled */
+    if (strstr(KeLoaderBlock->LoadOptions, "NOGUIBOOT")) NoGuiBoot = TRUE;
+
+    /* Query the clock */
+    if (HalQueryRealTimeClock(&TimeFields))
+    {
+        /* Convert to time fields */
+        RtlTimeFieldsToTime(&TimeFields, &SystemBootTime);
+        UniversalBootTime = SystemBootTime;
+
+#if 0 // FIXME: Won't work until we can read registry data here
+        /* FIXME: This assumes that the RTC is not already in GMT */
+        ExpTimeZoneBias.QuadPart = Int32x32To64(ExpLastTimeZoneBias * 60,
+                                                10000000);
+
+        /* Set the boot time-zone bias */
+        SharedUserData->TimeZoneBias.High2Time = ExpTimeZoneBias.HighPart;
+        SharedUserData->TimeZoneBias.LowPart = ExpTimeZoneBias.LowPart;
+        SharedUserData->TimeZoneBias.High1Time = ExpTimeZoneBias.HighPart;
+
+        /* Convert the boot time to local time, and set it */
+        UniversalBootTime.QuadPart = SystemBootTime.QuadPart +
+                                     ExpTimeZoneBias.QuadPart;
+#endif
+        KiSetSystemTime(&UniversalBootTime);
+
+        /* Remember this as the boot time */
+        KeBootTime = UniversalBootTime;
+    }
+
+    /* The clock is ready now (FIXME: HACK FOR OLD HAL) */
+    KiClockSetupComplete = TRUE;
 
     /* Initialize all processors */
     HalAllProcessorsStarted();
 
     /* Call OB initialization again */
-    if (!ObInit()) KEBUGCHECK(OBJECT1_INITIALIZATION_FAILED);
+    if (!ObInit()) KeBugCheck(OBJECT1_INITIALIZATION_FAILED);
 
     /* Initialize Basic System Objects and Worker Threads */
-    if (!ExInitSystem()) KEBUGCHECK(PHASE1_INITIALIZATION_FAILED);
+    if (!ExInitSystem()) KeBugCheckEx(PHASE1_INITIALIZATION_FAILED, 1, 0, 0, 0);
 
     /* Initialize the later stages of the kernel */
-    if (!KeInitSystem()) KEBUGCHECK(PHASE1_INITIALIZATION_FAILED);
+    if (!KeInitSystem()) KeBugCheckEx(PHASE1_INITIALIZATION_FAILED, 2, 0, 0, 0);
+
+    /* Call KD Providers at Phase 1 */
+    if (!KdInitSystem(ExpInitializationPhase, KeLoaderBlock))
+    {
+        /* Failed, bugcheck */
+        KeBugCheckEx(PHASE1_INITIALIZATION_FAILED, 3, 0, 0, 0);
+    }
 
     /* Create NLS section */
     ExpInitNls(KeLoaderBlock);
 
-    /* Call KD Providers at Phase 1 */
-    KdInitSystem(1, KeLoaderBlock);
-
     /* Initialize I/O Objects, Filesystems, Error Logging and Shutdown */
     IoInit();
 
+    /* Initialize Cache Views */
+    CcInitializeCacheManager();
+
+    /* Initialize the Registry (Hives are NOT yet loaded!) */
+    CmInitSystem1();
+
+    /* Update timezone information */
+    ExRefreshTimeZoneInformation(&SystemBootTime);
+
     /* TBD */
     PoInit(AcpiTableDetected, KeLoaderBlock);
 
-    /* Initialize the Registry (Hives are NOT yet loaded!) */
-    CmInitializeRegistry();
-
     /* Unmap Low memory, and initialize the MPW and Balancer Thread */
     MmInit3();
 
-    /* Initialize Cache Views */
-    CcInit();
-
-    /* Initialize File Locking */
-    FsRtlpInitFileLockingImplementation();
-
-    /* Report all resources used by hal */
+    /* Initialize the File System Runtime Library */
+    FsRtlInitSystem();
+
+    /* Report all resources used by HAL */
     HalReportResourceUsage();
 
     /* Clear the screen to blue */
     HalInitSystem(2, KeLoaderBlock);
 
-    /* Check if GUI Boot is enabled */
-    if (strstr(KeLoaderBlock->LoadOptions, "NOGUIBOOT")) NoGuiBoot = TRUE;
-
     /* Display version number and copyright/warranty message */
     if (NoGuiBoot) ExpDisplayNotice();
 
@@ -930,9 +969,6 @@
 
     /* Initialize VDM support */
     KeI386VdmInitialize();
-
-    /* Initialize the time zone information from the registry */
-    ExpInitTimeZoneInfo();
 
     /* Enter the kernel debugger before starting up the boot drivers */
     if (KdDebuggerEnabled && KdpEarlyBreak)
@@ -953,7 +989,7 @@
     /* Initialize shared user page. Set dos system path, dos device map, etc. */
     InitSystemSharedUserPage(KeLoaderBlock);
 
-    /* Initailize the Process Manager at Phase 1 */
+    /* Initialize the Process Manager at Phase 1 */
     if (!PsInitSystem()) KeBugCheck(PROCESS1_INITIALIZATION_FAILED);
 
     /* Launch initial process */

Modified: trunk/reactos/ntoskrnl/ex/sysinfo.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/sysinfo.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/sysinfo.c (original)
+++ trunk/reactos/ntoskrnl/ex/sysinfo.c Sun Oct  8 08:05:27 2006
@@ -548,7 +548,7 @@
 
   KeQuerySystemTime(&CurrentTime);
 
-  Sti->BootTime= SystemBootTime;
+  Sti->BootTime= KeBootTime;
   Sti->CurrentTime = CurrentTime;
   Sti->TimeZoneBias.QuadPart = ExpTimeZoneBias.QuadPart;
   Sti->TimeZoneId = ExpTimeZoneId;

Modified: trunk/reactos/ntoskrnl/ex/time.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/time.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/time.c (original)
+++ trunk/reactos/ntoskrnl/ex/time.c Sun Oct  8 08:05:27 2006
@@ -23,21 +23,21 @@
 
 /* Note: Bias[minutes] = UTC - local time */
 TIME_ZONE_INFORMATION ExpTimeZoneInfo;
+ULONG ExpLastTimeZoneBias = -1;
 LARGE_INTEGER ExpTimeZoneBias;
 ULONG ExpTimeZoneId;
 ULONG ExpTickCountMultiplier;
 
 /* FUNCTIONS ****************************************************************/
 
-VOID
-INIT_FUNCTION
-NTAPI
-ExpInitTimeZoneInfo(VOID)
+BOOLEAN
+NTAPI
+ExRefreshTimeZoneInformation(IN PLARGE_INTEGER CurrentBootTime)
 {
     LARGE_INTEGER CurrentTime;
     NTSTATUS Status;
 
-     /* Read time zone information from the registry */
+    /* Read time zone information from the registry */
     Status = RtlQueryTimeZoneInformation(&ExpTimeZoneInfo);
     if (!NT_SUCCESS(Status))
     {
@@ -52,8 +52,8 @@
 
         /* Set bias and ID */
         ExpTimeZoneBias.QuadPart = ((LONGLONG)(ExpTimeZoneInfo.Bias +
-                                               ExpTimeZoneInfo.StandardBias)) *
-                                               TICKSPERMINUTE;
+            ExpTimeZoneInfo.StandardBias)) *
+            TICKSPERMINUTE;
         ExpTimeZoneId = TIME_ZONE_ID_STANDARD;
     }
 
@@ -64,7 +64,7 @@
     SharedUserData->TimeZoneId = ExpTimeZoneId;
 
     /* Convert boot time from local time to UTC */
-    SystemBootTime.QuadPart += ExpTimeZoneBias.QuadPart;
+    KeBootTime.QuadPart += ExpTimeZoneBias.QuadPart;
 
     /* Convert system time from local time to UTC */
     do
@@ -78,6 +78,9 @@
     SharedUserData->SystemTime.LowPart = CurrentTime.u.LowPart;
     SharedUserData->SystemTime.High1Time = CurrentTime.u.HighPart;
     SharedUserData->SystemTime.High2Time = CurrentTime.u.HighPart;
+
+    /* Return success */
+    return TRUE;
 }
 
 NTSTATUS

Modified: trunk/reactos/ntoskrnl/fs/filelock.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/fs/filelock.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/fs/filelock.c (original)
+++ trunk/reactos/ntoskrnl/fs/filelock.c Sun Oct  8 08:05:27 2006
@@ -77,7 +77,7 @@
  */
 VOID
 STDCALL INIT_FUNCTION
-FsRtlpInitFileLockingImplementation(VOID)
+FsRtlInitSystem(VOID)
 {
    ExInitializeNPagedLookasideList( &LockTocLookaside,
                                     NULL,

Modified: trunk/reactos/ntoskrnl/include/internal/cc.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/cc.h?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/cc.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/cc.h Sun Oct  8 08:05:27 2006
@@ -112,7 +112,7 @@
 
 VOID
 NTAPI
-CcInit(VOID);
+CcInitializeCacheManager(VOID);
 
 NTSTATUS
 NTAPI

Modified: trunk/reactos/ntoskrnl/include/internal/ex.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ex.h?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ex.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ex.h Sun Oct  8 08:05:27 2006
@@ -7,6 +7,7 @@
 extern LARGE_INTEGER ExpTimeZoneBias;
 extern ULONG ExpTimeZoneId;
 extern ULONG ExpTickCountMultiplier;
+extern ULONG ExpLastTimeZoneBias;
 extern POBJECT_TYPE ExEventPairObjectType;
 extern ULONG NtBuildNumber;
 extern ULONG NtMajorVersion;
@@ -66,9 +67,11 @@
 NTAPI
 ExpInitializePushLocks(VOID);
 
-VOID
-NTAPI
-ExpInitTimeZoneInfo(VOID);
+BOOLEAN
+NTAPI
+ExRefreshTimeZoneInformation(
+    IN PLARGE_INTEGER SystemBootTime
+);
 
 VOID
 NTAPI

Modified: trunk/reactos/ntoskrnl/include/internal/fsrtl.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/fsrtl.h?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/fsrtl.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/fsrtl.h Sun Oct  8 08:05:27 2006
@@ -22,7 +22,7 @@
 
 VOID 
 NTAPI
-FsRtlpInitFileLockingImplementation(VOID);
+FsRtlInitSystem(VOID);
 
 VOID
 NTAPI

Modified: trunk/reactos/ntoskrnl/include/internal/ke.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ke.h?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ke.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ke.h Sun Oct  8 08:05:27 2006
@@ -66,7 +66,7 @@
 extern PVOID KeUserCallbackDispatcher;
 extern PVOID KeUserExceptionDispatcher;
 extern PVOID KeRaiseUserExceptionDispatcher;
-extern LARGE_INTEGER SystemBootTime;
+extern LARGE_INTEGER KeBootTime;
 extern ULONG KeI386NpxPresent;
 extern ULONG KeI386XMMIPresent;
 extern ULONG KeI386FxsrPresent;

Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h Sun Oct  8 08:05:27 2006
@@ -64,13 +64,13 @@
 VOID IoInit2(BOOLEAN BootLog);
 VOID NTAPI IoInit3(VOID);
 BOOLEAN NTAPI ObInit(VOID);
-VOID CmInitializeRegistry(VOID);
+VOID NTAPI CmInitSystem1(VOID);
 VOID NTAPI CmInitHives(BOOLEAN SetupBoot);
 VOID CmInit2(PCHAR CommandLine);
 VOID CmShutdownRegistry(VOID);
 BOOLEAN CmImportSystemHive(PCHAR ChunkBase, ULONG ChunkSize);
 BOOLEAN CmImportHardwareHive(PCHAR ChunkBase, ULONG ChunkSize);
-VOID KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
+BOOLEAN NTAPI KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock);
 
 /* FIXME - RtlpCreateUnicodeString is obsolete and should be removed ASAP! */
 BOOLEAN FASTCALL

Modified: trunk/reactos/ntoskrnl/kd/kdinit.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/kd/kdinit.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/kd/kdinit.c (original)
+++ trunk/reactos/ntoskrnl/kd/kdinit.c Sun Oct  8 08:05:27 2006
@@ -159,8 +159,9 @@
         WrapperTable.KdpInitRoutine(&WrapperTable, BootPhase);
 }
 
-VOID
+BOOLEAN
 INIT_FUNCTION
+NTAPI
 KdInitSystem(ULONG BootPhase,
              PLOADER_PARAMETER_BLOCK LoaderBlock)
 {
@@ -253,11 +254,14 @@
 
         /* Call Wrapper at Phase 0 */
         if (WrapperInitRoutine) WrapperInitRoutine(&WrapperTable, 0);
-        return;
+        return TRUE;
     }
 
     /* Call the Initialization Routines of the Registered Providers */
     KdpCallInitRoutine(BootPhase);
+
+    /* Return success */
+    return TRUE;
 }
 
  /* EOF */

Modified: trunk/reactos/ntoskrnl/ke/clock.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/clock.c?rev=24438&r1=24437&r2=24438&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/clock.c (original)
+++ trunk/reactos/ntoskrnl/ke/clock.c Sun Oct  8 08:05:27 2006
@@ -26,15 +26,7 @@
 
 /* GLOBALS ****************************************************************/
 
-/*
- * Current time
- */
-#if defined(__GNUC__)
-LARGE_INTEGER SystemBootTime = (LARGE_INTEGER)0LL;
-#else
-LARGE_INTEGER SystemBootTime = { 0 };
-#endif
-
+LARGE_INTEGER KeBootTime, KeBootTimeBias;
 KDPC KiExpireTimerDpc;
 BOOLEAN KiClockSetupComplete = FALSE;
 ULONG KiTimeLimitIsrMicroseconds;
@@ -65,28 +57,6 @@
 #define CALIBRATE_PERIOD (MICROSECONDS_PER_TICK * TICKS_TO_CALIBRATE)
 
 /* FUNCTIONS **************************************************************/
-
-/*
- * FUNCTION: Initializes timer irq handling
- * NOTE: This is only called once from main()
- */
-VOID
-INIT_FUNCTION
-NTAPI
-KiInitializeSystemClock(VOID)
-{
-    TIME_FIELDS TimeFields;
-
-    /* Calculate the starting time for the system clock */
-    HalQueryRealTimeClock(&TimeFields);
-    RtlTimeFieldsToTime(&TimeFields, &SystemBootTime);
-
-    /* Set up the Used Shared Data */
-    SharedUserData->SystemTime.High2Time = SystemBootTime.u.HighPart;
-    SharedUserData->SystemTime.LowPart = SystemBootTime.u.LowPart;
-    SharedUserData->SystemTime.High1Time = SystemBootTime.u.HighPart;
-    KiClockSetupComplete = TRUE;
-}
 
 VOID
 NTAPI
@@ -116,7 +86,7 @@
   DeltaTime.QuadPart = NewSystemTime->QuadPart - OldSystemTime.QuadPart;
 
   /* Update system boot time */
-  SystemBootTime.QuadPart += DeltaTime.QuadPart;
+  KeBootTime.QuadPart += DeltaTime.QuadPart;
 
   /* Update absolute timers */
   DPRINT1("FIXME: TIMER UPDATE NOT DONE!!!\n");




More information about the Ros-diffs mailing list