From: Roderick Colenbrander Subject: [PATCH 1/5] ntdll: Derive number of logical CPU cores from core mask. Message-Id: <20180621052946.9971-2-thunderbird2k@gmail.com> Date: Wed, 20 Jun 2018 22:29:42 -0700 In-Reply-To: <20180621052946.9971-1-thunderbird2k@gmail.com> References: <20180621052946.9971-1-thunderbird2k@gmail.com> Signed-off-by: Roderick Colenbrander --- dlls/ntdll/nt.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index dc0ce04f42..e6458b98f2 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -1511,6 +1511,17 @@ static inline BOOL logical_proc_info_add_group(SYSTEM_LOGICAL_PROCESSOR_INFORMAT } #ifdef linux +static DWORD count_bits(ULONG_PTR mask) +{ + DWORD count = 0; + while (mask > 0) + { + mask >>= 1; + count++; + } + return count; +} + /* for 'data', max_len is the array count. for 'dataex', max_len is in bytes */ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION **data, SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX **dataex, DWORD *max_len) @@ -1643,7 +1654,6 @@ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION ** for(i=0; iRelationship == RelationProcessorCore){ all_cpus_mask |= infoex->u.Processor.GroupMask[0].Mask; - ++num_cpus; } i += infoex->Size; } } + num_cpus = count_bits(all_cpus_mask); fnuma_list = fopen("/sys/devices/system/node/online", "r"); if(!fnuma_list) -- 2.14.4