Hi Yaakov,
I patched util-linux locally to build the 'taskset' tool so I could test
my implementation of the get- and set-affinity functions within Cygwin.
The implementation will be part of the upcoming Cygwin 3.1.0 release.
I'm not sure how to manipulate the build environment so I could supply a
'git send-mail' of a 'git format-patch' that would be usable to you.
I hope the following 'diff -u' outputs will be useful; but if you'd prefer
a different format just let me know.
Thank you for all your work on Cygwin!
..mark
cd /usr/src/util-linux-2.33.1-1.src
diff -u util-linux.cygport.safe util-linux.cygport
--- util-linux.cygport.safe 2019-03-05 12:07:51.000000000 -0800
+++ util-linux.cygport 2019-05-23 22:43:40.520885600 -0700
@@ -147,7 +147,6 @@
--enable-more
--enable-pg
--disable-setterm
- --disable-schedutils
--disable-wall
--disable-write
--disable-use-tty-group
cd util-linux-2.33.1-1.x86_64/src/util-linux-2.33.1/lib
diff -u cpuset.c.safe cpuset.c
--- cpuset.c.safe 2018-06-04 00:57:02.792445800 -0700
+++ cpuset.c 2019-06-21 01:36:44.078702800 -0700
@@ -60,7 +60,7 @@
*/
int get_max_number_of_cpus(void)
{
-#ifdef SYS_sched_getaffinity
+#if defined(SYS_sched_getaffinity) || defined(__CYGWIN__)
int n, cpus = 2048;
size_t setsize;
cpu_set_t *set = cpuset_alloc(cpus, &setsize, NULL);
@@ -71,8 +71,12 @@
for (;;) {
CPU_ZERO_S(setsize, set);
+#if defined(__CYGWIN__)
+ n = sched_getaffinity(0, setsize, set);
+#else
/* the library version does not return size of cpumask_t */
n = syscall(SYS_sched_getaffinity, 0, setsize, set);
+#endif
if (n < 0 && errno == EINVAL && cpus < 1024 * 1024) {
cpuset_free(set);