https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fed61c6305213025280f86...
commit fed61c6305213025280f86f6a1f5f8072fe81ba7 Author: Pierre Schweitzer pierre@reactos.org AuthorDate: Sat Nov 17 16:33:22 2018 +0100 Commit: Pierre Schweitzer pierre@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