https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d87b45bee7e57971f41f1…
commit d87b45bee7e57971f41f1f4aa36c2d9adc340f1b
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sun Nov 26 17:32:27 2023 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Fri Dec 8 19:28:57 2023 +0200
[NDK] Add Affinity helper inline functions
---
hal/halx86/include/smp.h | 9 --------
ntoskrnl/include/internal/ke.h | 1 -
sdk/include/ndk/kefuncs.h | 47 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+), 10 deletions(-)
diff --git a/hal/halx86/include/smp.h b/hal/halx86/include/smp.h
index d35189801c5..3b98c788ab9 100644
--- a/hal/halx86/include/smp.h
+++ b/hal/halx86/include/smp.h
@@ -7,15 +7,6 @@
#pragma once
-#define AFFINITY_MASK(Id) ((KAFFINITY)1 << (Id))
-
-/* Helper to find the lowest CPU in a KAFFINITY */
-#ifdef _WIN64
-#define BitScanForwardAffinity BitScanForward64
-#else
-#define BitScanForwardAffinity BitScanForward
-#endif
-
/* This table is filled for each physical processor on system */
typedef struct _PROCESSOR_IDENTITY
{
diff --git a/ntoskrnl/include/internal/ke.h b/ntoskrnl/include/internal/ke.h
index fbd3660553e..6a477545c44 100644
--- a/ntoskrnl/include/internal/ke.h
+++ b/ntoskrnl/include/internal/ke.h
@@ -155,7 +155,6 @@ extern VOID __cdecl KiInterruptTemplate(VOID);
/* MACROS *************************************************************************/
-#define AFFINITY_MASK(ProcessorIndex) ((KAFFINITY)1 << (ProcessorIndex))
#define PRIORITY_MASK(Priority) (1UL << (Priority))
/* Tells us if the Timer or Event is a Syncronization or Notification Object */
diff --git a/sdk/include/ndk/kefuncs.h b/sdk/include/ndk/kefuncs.h
index 0d53714e63f..f1ac4888be8 100644
--- a/sdk/include/ndk/kefuncs.h
+++ b/sdk/include/ndk/kefuncs.h
@@ -33,6 +33,53 @@ extern "C"
#ifndef NTOS_MODE_USER
+//
+// Affinity helpers
+//
+FORCEINLINE KAFFINITY AFFINITY_MASK(ULONG Index)
+{
+ ASSERT(Index < sizeof(KAFFINITY) * 8);
+ return (KAFFINITY)1 << Index;
+}
+
+FORCEINLINE BOOLEAN BitScanForwardAffinity(PULONG Index, KAFFINITY Mask)
+{
+#ifdef _WIN64
+ return BitScanForward64(Index, Mask);
+#else
+ return BitScanForward(Index, Mask);
+#endif
+}
+
+FORCEINLINE BOOLEAN BitScanReverseAffinity(PULONG Index, KAFFINITY Mask)
+{
+#ifdef _WIN64
+ return BitScanReverse64(Index, Mask);
+#else
+ return BitScanReverse(Index, Mask);
+#endif
+}
+
+FORCEINLINE BOOLEAN InterlockedBitTestAndSetAffinity(volatile KAFFINITY *Affinity, ULONG
Index)
+{
+ ASSERT(Index < sizeof(KAFFINITY) * 8);
+#ifdef _WIN64
+ return InterlockedBitTestAndSet64((PLONG64)Affinity, Index);
+#else
+ return InterlockedBitTestAndSet((PLONG)Affinity, Index);
+#endif
+}
+
+FORCEINLINE BOOLEAN InterlockedBitTestAndResetAffinity(volatile KAFFINITY *Affinity,
ULONG Index)
+{
+ ASSERT(Index < sizeof(KAFFINITY) * 8);
+#ifdef _WIN64
+ return InterlockedBitTestAndReset64((PLONG64)Affinity, Index);
+#else
+ return InterlockedBitTestAndReset((PLONG)Affinity, Index);
+#endif
+}
+
//
// APC Functions
//