https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fed61c6305213025280f8…
commit fed61c6305213025280f86f6a1f5f8072fe81ba7
Author:     Pierre Schweitzer <pierre(a)reactos.org>
AuthorDate: Sat Nov 17 16:33:22 2018 +0100
Commit:     Pierre Schweitzer <pierre(a)reactos.org>
CommitDate: Sat Nov 17 16:44:36 2018 +0100
    [NTOSKRNL] Replace ExGetRunRefForCurrentProcessor() by a more generic function
---
 ntoskrnl/ex/rundown.c          | 23 +++++++++--------------
 ntoskrnl/include/internal/ex.h | 19 ++++++++++---------
 2 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/ntoskrnl/ex/rundown.c b/ntoskrnl/ex/rundown.c
index bdbca4904e..95ca8afbf5 100644
--- a/ntoskrnl/ex/rundown.c
+++ b/ntoskrnl/ex/rundown.c
@@ -387,7 +387,7 @@ ExfAcquireRundownProtectionCacheAware(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCache
 {
     PEX_RUNDOWN_REF RunRef;
-    RunRef = ExGetRunRefForCurrentProcessor(RunRefCacheAware);
+    RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware,
KeGetCurrentProcessorNumber());
     return _ExAcquireRundownProtection(RunRef);
 }
@@ -401,7 +401,7 @@ ExfAcquireRundownProtectionCacheAwareEx(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCac
 {
     PEX_RUNDOWN_REF RunRef;
-    RunRef = ExGetRunRefForCurrentProcessor(RunRefCacheAware);
+    RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware,
KeGetCurrentProcessorNumber());
     return ExfAcquireRundownProtectionEx(RunRef, Count);
 }
@@ -414,7 +414,7 @@ ExfReleaseRundownProtectionCacheAware(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCache
 {
     PEX_RUNDOWN_REF RunRef;
-    RunRef = ExGetRunRefForCurrentProcessor(RunRefCacheAware);
+    RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware,
KeGetCurrentProcessorNumber());
     return _ExReleaseRundownProtection(RunRef);
 }
@@ -428,7 +428,7 @@ ExfReleaseRundownProtectionCacheAwareEx(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCac
 {
     PEX_RUNDOWN_REF RunRef;
-    RunRef = ExGetRunRefForCurrentProcessor(RunRefCacheAware);
+    RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware,
KeGetCurrentProcessorNumber());
     return ExfReleaseRundownProtectionEx(RunRef, Count);
 }
@@ -459,10 +459,7 @@ ExfWaitForRundownProtectionReleaseCacheAware(IN
PEX_RUNDOWN_REF_CACHE_AWARE RunR
     for (Current = 0; Current < ProcCount; ++Current)
     {
         /* Get the runref for the proc */
-        RunRef = (PEX_RUNDOWN_REF)((ULONG_PTR)RunRefCacheAware->RunRefs +
-                                   RunRefCacheAware->RunRefSize *
-                                   (Current % RunRefCacheAware->Number));
-
+        RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware, Current);
         /* Loop for setting the wait block */
         do
         {
@@ -535,7 +532,7 @@ ExAllocateCacheAwareRundownProtection(IN POOL_TYPE PoolType,
 {
     PEX_RUNDOWN_REF RunRef;
     PVOID PoolToFree, RunRefs;
-    ULONG RunRefSize, Count, Offset, Align;
+    ULONG RunRefSize, Count, Align;
     PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware;
     PAGED_CODE();
@@ -601,8 +598,7 @@ ExAllocateCacheAwareRundownProtection(IN POOL_TYPE PoolType,
     {
         for (Count = 0; Count < RunRefCacheAware->Number; ++Count)
         {
-            Offset = RunRefCacheAware->RunRefSize * Count;
-            RunRef = (PEX_RUNDOWN_REF)((ULONG_PTR)RunRefCacheAware->RunRefs + Offset);
+            RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware, Count);
             _ExInitializeRundownProtection(RunRef);
         }
     }
@@ -641,7 +637,7 @@ ExInitializeRundownProtectionCacheAware(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCac
 {
     PVOID Pool;
     PEX_RUNDOWN_REF RunRef;
-    ULONG Count, RunRefSize, Offset, Align;
+    ULONG Count, RunRefSize, Align;
     PAGED_CODE();
@@ -683,8 +679,7 @@ ExInitializeRundownProtectionCacheAware(IN PEX_RUNDOWN_REF_CACHE_AWARE
RunRefCac
     {
         for (Count = 0; Count < RunRefCacheAware->Number; ++Count)
         {
-            Offset = RunRefCacheAware->RunRefSize * Count;
-            RunRef = (PEX_RUNDOWN_REF)((ULONG_PTR)RunRefCacheAware->RunRefs + Offset);
+            RunRef = ExGetRunRefForGivenProcessor(RunRefCacheAware, Count);
             _ExInitializeRundownProtection(RunRef);
         }
     }
diff --git a/ntoskrnl/include/internal/ex.h b/ntoskrnl/include/internal/ex.h
index e09eb9ba05..89fec75914 100644
--- a/ntoskrnl/include/internal/ex.h
+++ b/ntoskrnl/include/internal/ex.h
@@ -545,15 +545,6 @@ ExGetCountFastReference(IN EX_FAST_REF FastRef)
     return (ULONG)FastRef.RefCnt;
 }
-FORCEINLINE
-PEX_RUNDOWN_REF
-ExGetRunRefForCurrentProcessor(IN PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware)
-{
-    return (PEX_RUNDOWN_REF)((ULONG_PTR)RunRefCacheAware->RunRefs +
-                             RunRefCacheAware->RunRefSize *
-                             (KeGetCurrentProcessorNumber() %
RunRefCacheAware->Number));
-}
-
 FORCEINLINE
 VOID
 ExInitializeFastReference(OUT PEX_FAST_REF FastRef,
@@ -751,6 +742,16 @@ ExCompareSwapFastReference(IN PEX_FAST_REF FastRef,
 /* RUNDOWN *******************************************************************/
+FORCEINLINE
+PEX_RUNDOWN_REF
+ExGetRunRefForGivenProcessor(IN PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
+                             IN ULONG ProcNumber)
+{
+    return (PEX_RUNDOWN_REF)((ULONG_PTR)RunRefCacheAware->RunRefs +
+                             RunRefCacheAware->RunRefSize *
+                             (ProcNumber % RunRefCacheAware->Number));
+}
+
 /*++
  * @name ExfAcquireRundownProtection
  * INTERNAL MACRO