https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8a335a3141dc698c517a7…
commit 8a335a3141dc698c517a76feec797549fed75040
Author: George Bișoc <george.bisoc(a)reactos.org>
AuthorDate: Thu Feb 16 20:16:53 2023 +0100
Commit: George Bișoc <george.bisoc(a)reactos.org>
CommitDate: Sun Oct 1 20:06:00 2023 +0200
[NTOS:CM] Implement the shared lock macro for use
CmpAcquireKcbLockSharedByKey can come in handy for use to lock KCBs by their convkey
with a shared lock, specifically we would need this for cache lookup stuff.
---
ntoskrnl/include/internal/cm_x.h | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/ntoskrnl/include/internal/cm_x.h b/ntoskrnl/include/internal/cm_x.h
index daf7d67643b..5e7dffd2872 100644
--- a/ntoskrnl/include/internal/cm_x.h
+++ b/ntoskrnl/include/internal/cm_x.h
@@ -89,6 +89,14 @@
(GET_HASH_ENTRY(CmpCacheTable, \
(k)->ConvKey)->Owner == KeGetCurrentThread())
+//
+// Shared acquires a KCB by index
+//
+#define CmpAcquireKcbLockSharedByIndex(i) \
+{ \
+ ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \
+}
+
//
// Exclusively acquires a KCB by index
//
@@ -120,6 +128,16 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey)
CmpAcquireKcbLockExclusiveByIndex(GET_HASH_INDEX(ConvKey));
}
+//
+// Shared acquires a KCB by key
+//
+FORCEINLINE
+VOID
+CmpAcquireKcbLockSharedByKey(
+ _In_ ULONG ConvKey)
+{
+ CmpAcquireKcbLockSharedByIndex(GET_HASH_INDEX(ConvKey));
+}
//
// Shared acquires a KCB
@@ -130,14 +148,6 @@ CmpAcquireKcbLockExclusiveByKey(IN ULONG ConvKey)
(k)->ConvKey)->Lock); \
}
-//
-// Shared acquires a KCB by index
-//
-#define CmpAcquireKcbLockSharedByIndex(i) \
-{ \
- ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock); \
-}
-
//
// Tries to convert a KCB lock
//