mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-05 02:27:24 +00:00
ntdll: Derive number of logical CPU cores from core mask.
Signed-off-by: Roderick Colenbrander <thunderbird2k@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
43d9e3f616
commit
0fd6556ed2
|
@ -1309,6 +1309,23 @@ static DWORD log_proc_ex_size_plus(DWORD size)
|
|||
return sizeof(LOGICAL_PROCESSOR_RELATIONSHIP) + sizeof(DWORD) + size;
|
||||
}
|
||||
|
||||
static DWORD count_bits(ULONG_PTR mask)
|
||||
{
|
||||
DWORD count = 0;
|
||||
while (mask > 0)
|
||||
{
|
||||
mask >>= 1;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Store package and core information for a logical processor. Parsing of processor
|
||||
* data may happen in multiple passes; the 'id' parameter is then used to locate
|
||||
* previously stored data. The type of data stored in 'id' depends on 'rel':
|
||||
* - RelationProcessorPackage: package id ('CPU socket').
|
||||
* - RelationProcessorCore: physical core number.
|
||||
*/
|
||||
static inline BOOL logical_proc_info_add_by_id(SYSTEM_LOGICAL_PROCESSOR_INFORMATION **pdata,
|
||||
SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX **pdataex, DWORD *len, DWORD *pmax_len,
|
||||
LOGICAL_PROCESSOR_RELATIONSHIP rel, DWORD id, ULONG_PTR mask)
|
||||
|
@ -1643,7 +1660,6 @@ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
|
|||
for(i=0; i<len; i++){
|
||||
if((*data)[i].Relationship == RelationProcessorCore){
|
||||
all_cpus_mask |= (*data)[i].ProcessorMask;
|
||||
++num_cpus;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
@ -1651,11 +1667,11 @@ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
|
|||
SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *infoex = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)(((char *)*dataex) + i);
|
||||
if(infoex->Relationship == 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)
|
||||
|
|
Loading…
Reference in a new issue