Cygwin: drop support for systems not supporting processor groups

i. e., Vista/2008.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2021-10-29 18:11:27 +02:00
parent 4bc8f1adb4
commit 687c4bad28
6 changed files with 58 additions and 169 deletions

View File

@ -665,9 +665,6 @@ format_proc_cpuinfo (void *, char *&destbuf)
WORD cpu_group = cpu_number / num_cpu_per_group;
KAFFINITY cpu_mask = 1L << (cpu_number % num_cpu_per_group);
if (wincap.has_processor_groups ())
{
GROUP_AFFINITY affinity = {
.Mask = cpu_mask,
.Group = cpu_group,
@ -677,14 +674,6 @@ format_proc_cpuinfo (void *, char *&destbuf)
&orig_group_affinity))
system_printf ("SetThreadGroupAffinity(%x,%d (%x/%d)) failed %E", cpu_mask, cpu_group, cpu_number, cpu_number);
orig_affinity_mask = 1; /* Just mark success. */
}
else
{
orig_affinity_mask = SetThreadAffinityMask (GetCurrentThread (),
1 << cpu_number);
if (orig_affinity_mask == 0)
debug_printf ("SetThreadAffinityMask failed %E");
}
/* I'm not sure whether the thread changes processor immediately
and I'm not sure whether this function will cause the thread
to be rescheduled */
@ -1668,13 +1657,8 @@ format_proc_cpuinfo (void *, char *&destbuf)
}
if (orig_affinity_mask != 0)
{
if (wincap.has_processor_groups ())
SetThreadGroupAffinity (GetCurrentThread (), &orig_group_affinity,
NULL);
else
SetThreadAffinityMask (GetCurrentThread (), orig_affinity_mask);
}
print ("\n");
}

View File

@ -1047,11 +1047,9 @@ __get_cpus_per_group (void)
(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) tp.c_get ();
DWORD lpi_size = NT_MAX_PATH;
/* Fake a SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX group info block on Vista
systems. This may be over the top but if the below code just using
ActiveProcessorCount turns out to be insufficient, we can build on that. */
if (!wincap.has_processor_groups ()
|| !GetLogicalProcessorInformationEx (RelationGroup, lpi, &lpi_size))
/* Fake a SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX group info block if
GetLogicalProcessorInformationEx fails for some reason. */
if (!GetLogicalProcessorInformationEx (RelationGroup, lpi, &lpi_size))
{
lpi_size = sizeof *lpi;
lpi->Relationship = RelationGroup;

View File

@ -416,9 +416,6 @@ EXPORT_ALIAS (sched_yield, pthread_yield)
int
sched_getcpu ()
{
if (!wincap.has_processor_groups ())
return (int) GetCurrentProcessorNumber ();
PROCESSOR_NUMBER pnum;
GetCurrentProcessorNumberEx (&pnum);
@ -520,15 +517,12 @@ whichgroup (size_t sizeof_set, const cpu_set_t *set)
int
sched_get_thread_affinity (HANDLE thread, size_t sizeof_set, cpu_set_t *set)
{
GROUP_AFFINITY ga;
int status = 0;
if (thread)
{
memset (set, 0, sizeof_set);
if (wincap.has_processor_groups () && __get_group_count () > 1)
{
GROUP_AFFINITY ga;
if (!GetThreadGroupAffinity (thread, &ga))
{
status = geterrno_from_win_error (GetLastError (), EPERM);
@ -536,18 +530,6 @@ sched_get_thread_affinity (HANDLE thread, size_t sizeof_set, cpu_set_t *set)
}
setgroup (sizeof_set, set, ga.Group, ga.Mask);
}
else
{
THREAD_BASIC_INFORMATION tbi;
status = NtQueryInformationThread (thread, ThreadBasicInformation,
&tbi, sizeof (tbi), NULL);
if (NT_SUCCESS (status))
setgroup (sizeof_set, set, 0, tbi.AffinityMask);
else
status = geterrno_from_nt_status (status);
}
}
else
status = ESRCH;
@ -570,6 +552,8 @@ __sched_getaffinity_sys (pid_t pid, size_t sizeof_set, cpu_set_t *set)
p->dwProcessId) : GetCurrentProcess ();
KAFFINITY procmask;
KAFFINITY sysmask;
USHORT groupcount = __CPU_GROUPMAX;
USHORT grouparray[__CPU_GROUPMAX];
if (!GetProcessAffinityMask (process, &procmask, &sysmask))
{
@ -577,11 +561,6 @@ __sched_getaffinity_sys (pid_t pid, size_t sizeof_set, cpu_set_t *set)
goto done;
}
memset (set, 0, sizeof_set);
if (wincap.has_processor_groups () && __get_group_count () > 1)
{
USHORT groupcount = __CPU_GROUPMAX;
USHORT grouparray[__CPU_GROUPMAX];
if (!GetProcessGroupAffinity (process, &groupcount, grouparray))
{
status = geterrno_from_win_error (GetLastError (), EPERM);
@ -592,9 +571,6 @@ __sched_getaffinity_sys (pid_t pid, size_t sizeof_set, cpu_set_t *set)
for (int i = 0; i < groupcount; i++)
setgroup (sizeof_set, set, grouparray[i], miscmask);
}
else
setgroup (sizeof_set, set, 0, procmask);
}
else
status = ESRCH;
@ -625,15 +601,12 @@ sched_getaffinity (pid_t pid, size_t sizeof_set, cpu_set_t *set)
int
sched_set_thread_affinity (HANDLE thread, size_t sizeof_set, const cpu_set_t *set)
{
GROUP_AFFINITY ga;
int group = whichgroup (sizeof_set, set);
int status = 0;
if (thread)
{
if (wincap.has_processor_groups () && __get_group_count () > 1)
{
GROUP_AFFINITY ga;
if (group < 0)
{
status = EINVAL;
@ -648,20 +621,6 @@ sched_set_thread_affinity (HANDLE thread, size_t sizeof_set, const cpu_set_t *se
goto done;
}
}
else
{
if (group != 0)
{
status = EINVAL;
goto done;
}
if (!SetThreadAffinityMask (thread, getgroup (sizeof_set, set, 0)))
{
status = geterrno_from_win_error (GetLastError (), EPERM);
goto done;
}
}
}
else
status = ESRCH;
@ -672,6 +631,8 @@ done:
int
sched_setaffinity (pid_t pid, size_t sizeof_set, const cpu_set_t *set)
{
USHORT groupcount = __CPU_GROUPMAX;
USHORT grouparray[__CPU_GROUPMAX];
int group = whichgroup (sizeof_set, set);
HANDLE process = 0;
int status = 0;
@ -682,11 +643,6 @@ sched_setaffinity (pid_t pid, size_t sizeof_set, const cpu_set_t *set)
process = pid && pid != myself->pid ?
OpenProcess (PROCESS_SET_INFORMATION, FALSE,
p->dwProcessId) : GetCurrentProcess ();
if (wincap.has_processor_groups () && __get_group_count () > 1)
{
USHORT groupcount = __CPU_GROUPMAX;
USHORT grouparray[__CPU_GROUPMAX];
if (!GetProcessGroupAffinity (process, &groupcount, grouparray))
{
status = geterrno_from_win_error (GetLastError (), EPERM);
@ -712,20 +668,6 @@ sched_setaffinity (pid_t pid, size_t sizeof_set, const cpu_set_t *set)
status = EINVAL;
goto done;
}
else
{
if (group != 0)
{
status = EINVAL;
goto done;
}
if (!SetProcessAffinityMask (process, getgroup (sizeof_set, set, 0)))
{
status = geterrno_from_win_error (GetLastError (), EPERM);
goto done;
}
}
}
else
status = ESRCH;

View File

@ -42,28 +42,6 @@ __nt_query_system (PSYSTEM_BASIC_INFORMATION psbi)
static long
get_nproc_values (int in)
{
if (!wincap.has_processor_groups ()) /* Pre Windows 7 */
{
SYSTEM_BASIC_INFORMATION sbi;
if (!__nt_query_system (&sbi))
return -1;
switch (in)
{
case _SC_NPROCESSORS_CONF:
return sbi.NumberProcessors;
case _SC_NPROCESSORS_ONLN:
{
int i = 0;
do
if (sbi.ActiveProcessors & 1)
i++;
while (sbi.ActiveProcessors >>= 1);
return i;
}
}
}
tmp_pathbuf tp;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX lpi, plpi;
DWORD lpi_size = NT_MAX_PATH;

View File

@ -28,7 +28,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
has_console_logon_sid:false,
has_precise_system_time:false,
has_microsoft_accounts:false,
has_processor_groups:false,
has_broken_prefetchvm:false,
has_new_pebteb_region:false,
has_broken_whoami:true,
@ -61,7 +60,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_console_logon_sid:true,
has_precise_system_time:false,
has_microsoft_accounts:false,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:false,
has_broken_whoami:true,
@ -94,7 +92,6 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:false,
has_broken_whoami:false,
@ -127,7 +124,6 @@ wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:false,
has_broken_whoami:false,
@ -160,7 +156,6 @@ wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared))
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:true,
has_new_pebteb_region:false,
has_broken_whoami:false,
@ -193,7 +188,6 @@ wincaps wincap_10_1607 __attribute__((section (".cygwin_dll_common"), shared))
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:true,
has_new_pebteb_region:false,
has_broken_whoami:false,
@ -226,7 +220,6 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) =
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,
@ -259,7 +252,6 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) =
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,
@ -292,7 +284,6 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) =
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,
@ -325,7 +316,6 @@ wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) =
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,
@ -358,7 +348,6 @@ wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) =
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,

View File

@ -22,7 +22,6 @@ struct wincaps
unsigned has_console_logon_sid : 1;
unsigned has_precise_system_time : 1;
unsigned has_microsoft_accounts : 1;
unsigned has_processor_groups : 1;
unsigned has_broken_prefetchvm : 1;
unsigned has_new_pebteb_region : 1;
unsigned has_broken_whoami : 1;
@ -87,7 +86,6 @@ public:
bool IMPLEMENT (has_console_logon_sid)
bool IMPLEMENT (has_precise_system_time)
bool IMPLEMENT (has_microsoft_accounts)
bool IMPLEMENT (has_processor_groups)
bool IMPLEMENT (has_broken_prefetchvm)
bool IMPLEMENT (has_new_pebteb_region)
bool IMPLEMENT (has_broken_whoami)