[ros-diffs] [sir_richard] 45217: [PERF]: Replace early ZwClose system calls with ObCloseHandle(KernelMode). This avoids taking a system call for those cases and gives a slight perf boost to booting up the system. It also pushes the first system call somewhat later in the boot process, allowing for easier debugging should the interface have issues/need tracing. [NTOS]: Do not attempt querying the Registry Primary Handle for the Backing Hive File Size in the case where there is no actual Primary! There was no error checking so nobody noticed this happens -- it also probably resets Cluster to 0 (instead of 1), which can cause corruption in some cases. [NTOS]: Make KiUserTrap use the MODE_MASK instead of hard-coding a check for Ring 0 CS (which is slower and not as correct).

sir_richard at svn.reactos.org sir_richard at svn.reactos.org
Sat Jan 23 22:27:26 CET 2010


Author: sir_richard
Date: Sat Jan 23 22:27:26 2010
New Revision: 45217

URL: http://svn.reactos.org/svn/reactos?rev=45217&view=rev
Log:
[PERF]: Replace early ZwClose system calls with ObCloseHandle(KernelMode). This avoids taking a system call for those cases and gives a slight perf boost to booting up the system. It also pushes the first system call somewhat later in the boot process, allowing for easier debugging should the interface have issues/need tracing.
[NTOS]: Do not attempt querying the Registry Primary Handle for the Backing Hive File Size in the case where there is no actual Primary! There was no error checking so nobody noticed this happens -- it also probably resets Cluster to 0 (instead of 1), which can cause corruption in some cases.
[NTOS]: Make KiUserTrap use the MODE_MASK instead of hard-coding a check for Ring 0 CS (which is slower and not as correct).

Modified:
    trunk/reactos/ntoskrnl/config/cminit.c
    trunk/reactos/ntoskrnl/ex/init.c
    trunk/reactos/ntoskrnl/ex/work.c
    trunk/reactos/ntoskrnl/include/internal/trap_x.h
    trunk/reactos/ntoskrnl/ke/i386/traphdlr.c
    trunk/reactos/ntoskrnl/ps/psmgr.c

Modified: trunk/reactos/ntoskrnl/config/cminit.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cminit.c?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/config/cminit.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/config/cminit.c [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -163,13 +163,17 @@
     /* Set flags */
     Hive->Flags = HiveFlags;
 
-    /* Check how large the file is */
-    ZwQueryInformationFile(Primary,
-                           &IoStatusBlock,
-                           &FileInformation,
-                           sizeof(FileInformation),
-                           FileStandardInformation);
-    Cluster = FileInformation.EndOfFile.LowPart;
+    /* Check if this is a primary */
+    if (Primary)
+    {
+        /* Check how large the file is */
+        ZwQueryInformationFile(Primary,
+                               &IoStatusBlock,
+                               &FileInformation,
+                               sizeof(FileInformation),
+                               FileStandardInformation);
+        Cluster = FileInformation.EndOfFile.LowPart;
+    }
 
     /* Initialize it */
     Status = HvInitialize(&Hive->Hive,

Modified: trunk/reactos/ntoskrnl/ex/init.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/init.c?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/init.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/init.c [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -303,7 +303,7 @@
                                        KernelMode,
                                        &ExpNlsSectionPointer,
                                        NULL);
-    ZwClose(NlsSection);
+    ObCloseHandle(NlsSection, KernelMode);
     if (!NT_SUCCESS(Status))
     {
         /* Failed */

Modified: trunk/reactos/ntoskrnl/ex/work.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/work.c?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/work.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/work.c [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -310,7 +310,7 @@
 
     /* Dereference and close handle */
     ObDereferenceObject(Thread);
-    ZwClose(hThread);
+    ObCloseHandle(hThread, KernelMode);
 }
 
 /*++
@@ -586,7 +586,7 @@
     ExpWorkerThreadBalanceManagerPtr = Thread;
 
     /* Close the handle and return */
-    ZwClose(ThreadHandle);
+    ObCloseHandle(ThreadHandle, KernelMode);
 }
 
 /* PUBLIC FUNCTIONS **********************************************************/

Modified: trunk/reactos/ntoskrnl/include/internal/trap_x.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/trap_x.h?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/trap_x.h [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/include/internal/trap_x.h [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -165,7 +165,7 @@
 KiUserTrap(IN PKTRAP_FRAME TrapFrame)
 {
     /* Anything else but Ring 0 is Ring 3 */
-    return (TrapFrame->SegCs != KGDT_R0_CODE);
+    return (TrapFrame->SegCs & MODE_MASK);
 }
 
 BOOLEAN

Modified: trunk/reactos/ntoskrnl/ke/i386/traphdlr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/traphdlr.c?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/traphdlr.c [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -466,7 +466,7 @@
                         NULL,
                         TrapFrame,
                         TrapFrame->EFlags & EFLAGS_V86_MASK ?
-                        -1 : TrapFrame->SegCs & MODE_MASK,
+                        -1 : KiUserTrap(TrapFrame),
                         TRUE);
 
     /* Return from this trap */

Modified: trunk/reactos/ntoskrnl/ps/psmgr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/psmgr.c?rev=45217&r1=45216&r2=45217&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/psmgr.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/psmgr.c [iso-8859-1] Sat Jan 23 22:27:26 2010
@@ -586,7 +586,7 @@
                               KernelMode,
                               (PVOID*)&SysThread,
                               NULL);
-    ZwClose(SysThreadHandle);
+    ObCloseHandle(SysThreadHandle, KernelMode);
     SysThreadCreated = TRUE;
 
     /* Return success */




More information about the Ros-diffs mailing list