git: 67fc95025ccf - main - sched_getaffinity(3): more compatibility with Linux

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 25 Apr 2022 14:22:36 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=67fc95025ccfc696ea5eaea0ecb1fff295760723

commit 67fc95025ccfc696ea5eaea0ecb1fff295760723
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-04-24 22:10:18 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-04-25 14:22:09 +0000

    sched_getaffinity(3): more compatibility with Linux
    
    Report EINVAL instead of EDEADLK when impossible cpu mask is set.
    
    Noted by:       dchagin
    Reviewed by:    dchagin (previous version), markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D35045
---
 lib/libc/gen/sched_setaffinity.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/libc/gen/sched_setaffinity.c b/lib/libc/gen/sched_setaffinity.c
index 91ab2a401bda..09e2b9097d5a 100644
--- a/lib/libc/gen/sched_setaffinity.c
+++ b/lib/libc/gen/sched_setaffinity.c
@@ -34,6 +34,7 @@ int
 sched_setaffinity(pid_t pid, size_t cpusetsz, const cpuset_t *cpuset)
 {
 	cpuset_t c;
+	int error;
 
 	if (cpusetsz > sizeof(cpuset_t)) {
 		errno = EINVAL;
@@ -42,6 +43,10 @@ sched_setaffinity(pid_t pid, size_t cpusetsz, const cpuset_t *cpuset)
 		memset(&c, 0, sizeof(c));
 		memcpy(&c, cpuset, cpusetsz);
 	}
-	return (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID,
-	    pid == 0 ? -1 : pid, sizeof(cpuset_t), &c));
+	error = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID,
+	    pid == 0 ? -1 : pid, sizeof(cpuset_t), &c);
+	if (error == -1 && errno == EDEADLK)
+		errno = EINVAL;
+
+	return (error);
 }