[NTOS:KE] Fix some KAFFINITYs

This commit is contained in:
Timo Kreuzer 2023-12-23 11:19:28 +02:00
parent a175a88fcb
commit 1ee23d33ac
3 changed files with 14 additions and 12 deletions

View file

@ -137,7 +137,7 @@ extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
extern LIST_ENTRY KiStackInSwapListHead; extern LIST_ENTRY KiStackInSwapListHead;
extern KEVENT KiSwapEvent; extern KEVENT KiSwapEvent;
extern PKPRCB KiProcessorBlock[]; extern PKPRCB KiProcessorBlock[];
extern ULONG_PTR KiIdleSummary; extern KAFFINITY KiIdleSummary;
extern PVOID KeUserApcDispatcher; extern PVOID KeUserApcDispatcher;
extern PVOID KeUserCallbackDispatcher; extern PVOID KeUserCallbackDispatcher;
extern PVOID KeUserExceptionDispatcher; extern PVOID KeUserExceptionDispatcher;
@ -379,7 +379,7 @@ UCHAR
NTAPI NTAPI
KeFindNextRightSetAffinity( KeFindNextRightSetAffinity(
IN UCHAR Number, IN UCHAR Number,
IN ULONG Set IN KAFFINITY Set
); );
VOID VOID

View file

@ -20,9 +20,10 @@ extern LIST_ENTRY PspReaperListHead;
UCHAR UCHAR
NTAPI NTAPI
KeFindNextRightSetAffinity(IN UCHAR Number, KeFindNextRightSetAffinity(IN UCHAR Number,
IN ULONG Set) IN KAFFINITY Set)
{ {
ULONG Bit, Result; KAFFINITY Bit;
ULONG Result;
ASSERT(Set != 0); ASSERT(Set != 0);
/* Calculate the mask */ /* Calculate the mask */
@ -32,7 +33,7 @@ KeFindNextRightSetAffinity(IN UCHAR Number,
if (!Bit) Bit = Set; if (!Bit) Bit = Set;
/* Now find the right set and return it */ /* Now find the right set and return it */
BitScanReverse(&Result, Bit); BitScanReverseAffinity(&Result, Bit);
return (UCHAR)Result; return (UCHAR)Result;
} }
@ -491,7 +492,7 @@ KeStartThread(IN OUT PKTHREAD Thread)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
PKNODE Node; PKNODE Node;
PKPRCB NodePrcb; PKPRCB NodePrcb;
ULONG Set, Mask; KAFFINITY Set, Mask;
#endif #endif
UCHAR IdealProcessor = 0; UCHAR IdealProcessor = 0;
PKPROCESS Process = Thread->ApcState.Process; PKPROCESS Process = Thread->ApcState.Process;
@ -526,7 +527,7 @@ KeStartThread(IN OUT PKTHREAD Thread)
#else #else
Set = ~NodePrcb->MultiThreadProcessorSet; Set = ~NodePrcb->MultiThreadProcessorSet;
#endif #endif
Mask = (ULONG)(Node->ProcessorMask & Process->Affinity); Mask = Node->ProcessorMask & Process->Affinity;
Set &= Mask; Set &= Mask;
if (Set) Mask = Set; if (Set) Mask = Set;
@ -1122,7 +1123,8 @@ KeSetSystemAffinityThread(IN KAFFINITY Affinity)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (!(Affinity & AFFINITY_MASK(CurrentThread->IdealProcessor))) if (!(Affinity & AFFINITY_MASK(CurrentThread->IdealProcessor)))
{ {
ULONG AffinitySet, NodeMask; KAFFINITY AffinitySet, NodeMask;
ULONG IdealProcessor;
/* It's not! Get the PRCB */ /* It's not! Get the PRCB */
Prcb = KiProcessorBlock[CurrentThread->IdealProcessor]; Prcb = KiProcessorBlock[CurrentThread->IdealProcessor];
@ -1137,8 +1139,8 @@ KeSetSystemAffinityThread(IN KAFFINITY Affinity)
} }
/* Calculate the ideal CPU from the affinity set */ /* Calculate the ideal CPU from the affinity set */
BitScanReverse(&NodeMask, AffinitySet); BitScanReverseAffinity(&IdealProcessor, AffinitySet);
CurrentThread->IdealProcessor = (UCHAR)NodeMask; CurrentThread->IdealProcessor = (UCHAR)IdealProcessor;
} }
#endif #endif

View file

@ -22,8 +22,8 @@
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
ULONG_PTR KiIdleSummary; KAFFINITY KiIdleSummary;
ULONG_PTR KiIdleSMTSummary; KAFFINITY KiIdleSMTSummary;
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/