public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: drop support for systems not supporting processor groups
@ 2021-10-29 19:03 Corinna Vinschen
0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2021-10-29 19:03 UTC (permalink / raw)
To: cygwin-cvs
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=687c4bad2877c4770431fa5e11b2582cf83bf316
commit 687c4bad2877c4770431fa5e11b2582cf83bf316
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Fri Oct 29 18:11:27 2021 +0200
Cygwin: drop support for systems not supporting processor groups
i. e., Vista/2008.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diff:
---
winsup/cygwin/fhandler_proc.cc | 38 +++--------
winsup/cygwin/miscfuncs.cc | 8 +--
winsup/cygwin/sched.cc | 150 +++++++++++++----------------------------
winsup/cygwin/sysconf.cc | 22 ------
winsup/cygwin/wincap.cc | 11 ---
winsup/cygwin/wincap.h | 2 -
6 files changed, 60 insertions(+), 171 deletions(-)
diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc
index a3b5b16a9..c8074dd22 100644
--- a/winsup/cygwin/fhandler_proc.cc
+++ b/winsup/cygwin/fhandler_proc.cc
@@ -665,26 +665,15 @@ 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,
- };
-
- if (!SetThreadGroupAffinity (GetCurrentThread (), &affinity,
- &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");
- }
+ GROUP_AFFINITY affinity = {
+ .Mask = cpu_mask,
+ .Group = cpu_group,
+ };
+
+ if (!SetThreadGroupAffinity (GetCurrentThread (), &affinity,
+ &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. */
/* 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);
- }
+ SetThreadGroupAffinity (GetCurrentThread (), &orig_group_affinity,
+ NULL);
print ("\n");
}
diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc
index adf9a3d0f..fcb082216 100644
--- a/winsup/cygwin/miscfuncs.cc
+++ b/winsup/cygwin/miscfuncs.cc
@@ -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;
diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc
index 84df7b9e6..d7bad8527 100644
--- a/winsup/cygwin/sched.cc
+++ b/winsup/cygwin/sched.cc
@@ -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,33 +517,18 @@ 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);
- goto done;
- }
- setgroup (sizeof_set, set, ga.Group, ga.Mask);
- }
- else
+ if (!GetThreadGroupAffinity (thread, &ga))
{
- 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);
+ status = geterrno_from_win_error (GetLastError (), EPERM);
+ goto done;
}
+ setgroup (sizeof_set, set, ga.Group, ga.Mask);
}
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,23 +561,15 @@ __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);
- goto done;
- }
-
- KAFFINITY miscmask = groupmask (__get_cpus_per_group ());
- for (int i = 0; i < groupcount; i++)
- setgroup (sizeof_set, set, grouparray[i], miscmask);
- }
- else
- setgroup (sizeof_set, set, 0, procmask);
+ if (!GetProcessGroupAffinity (process, &groupcount, grouparray))
+ {
+ status = geterrno_from_win_error (GetLastError (), EPERM);
+ goto done;
+ }
+
+ KAFFINITY miscmask = groupmask (__get_cpus_per_group ());
+ for (int i = 0; i < groupcount; i++)
+ setgroup (sizeof_set, set, grouparray[i], miscmask);
}
else
status = ESRCH;
@@ -625,41 +601,24 @@ 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)
+ if (group < 0)
{
- GROUP_AFFINITY ga;
-
- if (group < 0)
- {
- status = EINVAL;
- goto done;
- }
- memset (&ga, 0, sizeof (ga));
- ga.Mask = getgroup (sizeof_set, set, group);
- ga.Group = group;
- if (!SetThreadGroupAffinity (thread, &ga, NULL))
- {
- status = geterrno_from_win_error (GetLastError (), EPERM);
- goto done;
- }
+ status = EINVAL;
+ goto done;
}
- else
+ memset (&ga, 0, sizeof (ga));
+ ga.Mask = getgroup (sizeof_set, set, group);
+ ga.Group = group;
+ if (!SetThreadGroupAffinity (thread, &ga, NULL))
{
- if (group != 0)
- {
- status = EINVAL;
- goto done;
- }
- if (!SetThreadAffinityMask (thread, getgroup (sizeof_set, set, 0)))
- {
- status = geterrno_from_win_error (GetLastError (), EPERM);
- goto done;
- }
+ status = geterrno_from_win_error (GetLastError (), EPERM);
+ goto done;
}
}
else
@@ -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,49 +643,30 @@ 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)
+ if (!GetProcessGroupAffinity (process, &groupcount, grouparray))
+ {
+ status = geterrno_from_win_error (GetLastError (), EPERM);
+ goto done;
+ }
+ if (group < 0)
{
- USHORT groupcount = __CPU_GROUPMAX;
- USHORT grouparray[__CPU_GROUPMAX];
-
- if (!GetProcessGroupAffinity (process, &groupcount, grouparray))
- {
- status = geterrno_from_win_error (GetLastError (), EPERM);
- goto done;
- }
- if (group < 0)
- {
- status = EINVAL;
- goto done;
- }
- if (groupcount == 1 && grouparray[0] == group)
- {
- if (!SetProcessAffinityMask (process, getgroup (sizeof_set, set, group)))
- status = geterrno_from_win_error (GetLastError (), EPERM);
- goto done;
- }
-
- /* If we get here, the user is trying to add the process to another
- group or move it from current group to another group. These ops
- are not allowed by Windows. One has to move one or more of the
- process' threads to the new group(s) one by one. Here, we bail.
- */
status = EINVAL;
goto done;
}
- else
+ if (groupcount == 1 && grouparray[0] == group)
{
- if (group != 0)
- {
- status = EINVAL;
- goto done;
- }
- if (!SetProcessAffinityMask (process, getgroup (sizeof_set, set, 0)))
- {
- status = geterrno_from_win_error (GetLastError (), EPERM);
- goto done;
- }
+ if (!SetProcessAffinityMask (process, getgroup (sizeof_set, set, group)))
+ status = geterrno_from_win_error (GetLastError (), EPERM);
+ goto done;
}
+
+ /* If we get here, the user is trying to add the process to another
+ group or move it from current group to another group. These ops
+ are not allowed by Windows. One has to move one or more of the
+ process' threads to the new group(s) one by one. Here, we bail.
+ */
+ status = EINVAL;
+ goto done;
}
else
status = ESRCH;
diff --git a/winsup/cygwin/sysconf.cc b/winsup/cygwin/sysconf.cc
index 70cdb0fbd..a78302805 100644
--- a/winsup/cygwin/sysconf.cc
+++ b/winsup/cygwin/sysconf.cc
@@ -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;
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc
index 6c4bcd08e..63b0a261d 100644
--- a/winsup/cygwin/wincap.cc
+++ b/winsup/cygwin/wincap.cc
@@ -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,
diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h
index 764519616..0d86a80e4 100644
--- a/winsup/cygwin/wincap.h
+++ b/winsup/cygwin/wincap.h
@@ -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)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-10-29 19:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-29 19:03 [newlib-cygwin] Cygwin: drop support for systems not supporting processor groups Corinna Vinschen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).