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