[PATCH] Implement sched_[gs]etaffinity()
Corinna Vinschen
corinna-cygwin@cygwin.com
Fri Apr 12 07:55:00 GMT 2019
On Apr 10 21:06, Mark Geisert wrote:
> ---
> newlib/libc/include/sched.h | 4 +++
> winsup/cygwin/sched.cc | 68 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 72 insertions(+)
>
> diff --git a/newlib/libc/include/sched.h b/newlib/libc/include/sched.h
> index 1016235bb..e3a5b97e5 100644
> --- a/newlib/libc/include/sched.h
> +++ b/newlib/libc/include/sched.h
> @@ -92,6 +92,10 @@ int sched_yield( void );
>
> #if __GNU_VISIBLE
> int sched_getcpu(void);
> +
> +typedef uint64_t cpu_set_t; /* ...until cpuset(7) exists */
> +int sched_getaffinity(pid_t, size_t, cpu_set_t *);
> +int sched_setaffinity(pid_t, size_t, const cpu_set_t *);
> #endif
>
> #ifdef __cplusplus
> diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc
> index 10168e641..496e08857 100644
> --- a/winsup/cygwin/sched.cc
> +++ b/winsup/cygwin/sched.cc
> @@ -424,4 +424,72 @@ sched_getcpu ()
> return pnum.Group * __get_cpus_per_group () + pnum.Number;
> }
>
> +int
> +sched_getaffinity (pid_t pid, size_t cpusetsize, cpu_set_t *mask)
> +{
> + int status = 0;
> + HANDLE process = pid ? OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid)
> + : GetCurrentProcess ();
This needs to grab the pinfo(pid) aund use p->dwProcessId, as you
noted on cygwin-developers already.
Two more notes:
- You could use GetCurrentProcess() in case of pid == myself->pid, too.
- PROCESS_QUERY_LIMITED_INFORMATION should be sufficent per MSDN.
PROCESS_QUERY_INFORMATION was required pre-Vista only.
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20190412/e15dfd16/attachment.sig>
More information about the Cygwin-patches
mailing list