[NTOSKRNL] On Cc init, also define CcNumberWorkerThreads which will be used later on
authorPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 16:52:51 +0000 (17:52 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 20:37:17 +0000 (21:37 +0100)
Also make a "default" case (really limited) in case SystemSize doesn't match.

ntoskrnl/cc/view.c

index 9344a97..99e7b1c 100644 (file)
@@ -66,6 +66,7 @@ ULONG CcLazyWriteIos = 0;
  * - List for "clean" shared cache maps
  * - One second delay for lazy writer
  * - System size when system started
  * - List for "clean" shared cache maps
  * - One second delay for lazy writer
  * - System size when system started
+ * - Number of worker threads
  */
 ULONG CcDirtyPageThreshold = 0;
 ULONG CcTotalDirtyPages = 0;
  */
 ULONG CcDirtyPageThreshold = 0;
 ULONG CcTotalDirtyPages = 0;
@@ -74,6 +75,7 @@ KSPIN_LOCK CcDeferredWriteSpinLock;
 LIST_ENTRY CcCleanSharedCacheMapList;
 LARGE_INTEGER CcIdleDelay = RTL_CONSTANT_LARGE_INTEGER((LONGLONG)-1*1000*1000*10);
 MM_SYSTEMSIZE CcCapturedSystemSize;
 LIST_ENTRY CcCleanSharedCacheMapList;
 LARGE_INTEGER CcIdleDelay = RTL_CONSTANT_LARGE_INTEGER((LONGLONG)-1*1000*1000*10);
 MM_SYSTEMSIZE CcCapturedSystemSize;
+ULONG CcNumberWorkerThreads;
 
 /* Internal vars (ROS):
  * - Event to notify lazy writer to shutdown
 
 /* Internal vars (ROS):
  * - Event to notify lazy writer to shutdown
@@ -1448,21 +1450,31 @@ CcInitView (
     KeInitializeEvent(&iLazyWriterShutdown, SynchronizationEvent, FALSE);
     KeInitializeEvent(&iLazyWriterNotify, NotificationEvent, FALSE);
 
     KeInitializeEvent(&iLazyWriterShutdown, SynchronizationEvent, FALSE);
     KeInitializeEvent(&iLazyWriterNotify, NotificationEvent, FALSE);
 
-    /* Define lazy writer threshold, depending on system type */
+    /* Define lazy writer threshold and the amount of workers,
+      * depending on the system type
+      */
     CcCapturedSystemSize = MmQuerySystemSize();
     switch (CcCapturedSystemSize)
     {
         case MmSmallSystem:
     CcCapturedSystemSize = MmQuerySystemSize();
     switch (CcCapturedSystemSize)
     {
         case MmSmallSystem:
+            CcNumberWorkerThreads = ExCriticalWorkerThreads - 1;
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 8;
             break;
 
         case MmMediumSystem:
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 8;
             break;
 
         case MmMediumSystem:
+            CcNumberWorkerThreads = ExCriticalWorkerThreads - 1;
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 4;
             break;
 
         case MmLargeSystem:
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 4;
             break;
 
         case MmLargeSystem:
+            CcNumberWorkerThreads = ExCriticalWorkerThreads - 2;
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 8 + MmNumberOfPhysicalPages / 4;
             break;
             CcDirtyPageThreshold = MmNumberOfPhysicalPages / 8 + MmNumberOfPhysicalPages / 4;
             break;
+
+        default:
+            CcNumberWorkerThreads = 1;
+            CcDirtyPageThreshold = MmNumberOfPhysicalPages / 8;
+            break;
     }
 
     /* Start the lazy writer thread */
     }
 
     /* Start the lazy writer thread */