From nobody Wed Feb 15 09:23:34 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PGt126qpWz3rXj9; Wed, 15 Feb 2023 09:23:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PGt1261n4z3xX2; Wed, 15 Feb 2023 09:23:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676453014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oDkUEL0E2PiEEabf7z5WMp6xjM3qEhiN/GHMKYmTYgc=; b=XCLqf+Yd2V/H1n8VDKxu+sr5jIoVIM/QtdBOczMB+AvWL7OXg6WYT1HzaTaIQB1j/7iZh7 ZYRnO5rxKr03QdH8lF0IPePlAjyxL/WyD2TqT1poMM55Wz1sp4LUWGCjK9GJqzB4ZSbjEL 2KZRqPzGce6HO4amNAGQd9E3HCTcqo2pQaLaZUMmPpjKh91M1vWbxhQg7VYl5Ksu4UzRdp Y0qxJV7JM6uFFNvVaM5qNg5dpvp438DechSMYNmDROfjzwukKjlXzqkyHj3N5hGXNNy/XD F8AwyFi6TDIJXUAENsrk9BCgveOu6dTHcB/JKJetpDc3VZYEDtBvbJK9WMs1jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676453014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oDkUEL0E2PiEEabf7z5WMp6xjM3qEhiN/GHMKYmTYgc=; b=Y2hEUGGoz3GWctk5knxkXj5zuWdABjNKxb/ZZIhjg4aX/xGyf31mSfDNYzn/R+BpajpTs3 mA7bohJgEoFIptSJaCx49m/ajIZXTvsQ+1mlhNQTax/vKshl75+tz5kMZelf62p2V7VUwS Xo8khwI7O0g0KYpxv4bCaVMA57FXDF2GPLUuTz8Nq/oE+v+zwCYUvMwYViQG0exB1xTSMY q1wMEomV96XCPfOCamFse5qqha6KtTqtWcIbuN2Ul7If9mPRTJRPLrlQbX4nmlJcNKnxu7 llWb4qXCCl9B9t7Utv6xhT3DH89BGZoFpWVdVmg1VC2QJf/cynkLD2PThhtw0Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1676453014; a=rsa-sha256; cv=none; b=qpY+W/KqIU/axW+uN3/imxWhRj8e7aPuACCT+qfAXtueAkLXi4P/f3p+G/VXhUnzlP7O6V 8D7/S62k6XlbUrl42C0QTaqpHSmCSwtpaV9EtqsdiOqpDvOYAeOzfWBii9VElbqSw0QrqK sRCEnrUcCW+3PgRB3Hmb1WJuhWvLfKvOxhKCsRe9L/r++0eMUjY0wKfP+QUPKNq/41tM2f k3AefwBs8nkTLVg7EiiKyQN9D0bWyAI1VW3bifaADVke3zNeO1rTaSXTWEYK3pKDqwfdnl 6MuHh18PV4a9NTHHgEzmJXqAdciclpNfGpi+uVWcAQAtGOR595yZxlM/zG1yUQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PGt12559vzJq4; Wed, 15 Feb 2023 09:23:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 31F9NYBL075269; Wed, 15 Feb 2023 09:23:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31F9NYBv075268; Wed, 15 Feb 2023 09:23:34 GMT (envelope-from git) Date: Wed, 15 Feb 2023 09:23:34 GMT Message-Id: <202302150923.31F9NYBv075268@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dmitry Chagin Subject: git: cbc32e4c5e84 - main - cpuset: Add compat shim to the sched_affinity functions List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cbc32e4c5e8427e0f1032d9d3aa5863dd1538c11 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=cbc32e4c5e8427e0f1032d9d3aa5863dd1538c11 commit cbc32e4c5e8427e0f1032d9d3aa5863dd1538c11 Author: Dmitry Chagin AuthorDate: 2023-02-15 09:23:15 +0000 Commit: Dmitry Chagin CommitDate: 2023-02-15 09:23:15 +0000 cpuset: Add compat shim to the sched_affinity functions To allow to run a newer world on a pre-1400079 kernel a compat shims to the sched_affinity functions has beed added. Reported by: antoine Tested by: antoine Reviewed by: kib Differential revision: https://reviews.freebsd.org/D38555 MFC after: 3 days --- lib/libc/gen/sched_getaffinity.c | 15 ++++++++++++++- lib/libc/gen/sched_setaffinity.c | 14 +++++++++++++- lib/libc/include/libc_private.h | 6 ++++++ sys/sys/param.h | 1 + 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/libc/gen/sched_getaffinity.c b/lib/libc/gen/sched_getaffinity.c index 95145a1eb019..fce47fbfc0d2 100644 --- a/lib/libc/gen/sched_getaffinity.c +++ b/lib/libc/gen/sched_getaffinity.c @@ -26,16 +26,29 @@ * SUCH DAMAGE. */ +#define _WANT_P_OSREL +#include #include #include #include +#include "libc_private.h" + int sched_getaffinity(pid_t pid, size_t cpusetsz, cpuset_t *cpuset) { + cpuwhich_t which; int error; - error = cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TIDPID, + if (__getosreldate() < P_OSREL_TIDPID) { + if (pid == 0 || pid > _PID_MAX) + which = CPU_WHICH_TID; + else + which = CPU_WHICH_PID; + } else + which = CPU_WHICH_TIDPID; + + error = cpuset_getaffinity(CPU_LEVEL_WHICH, which, pid == 0 ? -1 : pid, cpusetsz, cpuset); if (error == -1 && errno == ERANGE) errno = EINVAL; diff --git a/lib/libc/gen/sched_setaffinity.c b/lib/libc/gen/sched_setaffinity.c index 36ed0f45d417..b878e1affc41 100644 --- a/lib/libc/gen/sched_setaffinity.c +++ b/lib/libc/gen/sched_setaffinity.c @@ -26,20 +26,32 @@ * SUCH DAMAGE. */ +#define _WANT_P_OSREL #include #include #include #include #include +#include "libc_private.h" + int sched_setaffinity(pid_t pid, size_t cpusetsz, const cpuset_t *cpuset) { static int mp_maxid; + cpuwhich_t which; cpuset_t c; int error, lbs, cpu; size_t len, sz; + if (__getosreldate() < P_OSREL_TIDPID) { + if (pid == 0 || pid > _PID_MAX) + which = CPU_WHICH_TID; + else + which = CPU_WHICH_PID; + } else + which = CPU_WHICH_TIDPID; + sz = cpusetsz > sizeof(cpuset_t) ? sizeof(cpuset_t) : cpusetsz; memset(&c, 0, sizeof(c)); memcpy(&c, cpuset, sz); @@ -58,7 +70,7 @@ sched_setaffinity(pid_t pid, size_t cpusetsz, const cpuset_t *cpuset) if (cpu > mp_maxid) CPU_CLR(cpu, &c); } - error = cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TIDPID, + error = cpuset_setaffinity(CPU_LEVEL_WHICH, which, pid == 0 ? -1 : pid, sizeof(cpuset_t), &c); if (error == -1 && errno == EDEADLK) errno = EINVAL; diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index 641b9272c7fc..0a8e531e0c3c 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -39,6 +39,12 @@ #include #include +/* + * The kernel doesn't expose PID_MAX to the user space. Save it here + * to allow to run a newer world on a pre-1400079 kernel. + */ +#define _PID_MAX 99999 + /* * This global flag is non-zero when a process has created one * or more threads. It is used to avoid calling locking functions diff --git a/sys/sys/param.h b/sys/sys/param.h index 2d5edf9a0b90..e0808609447d 100644 --- a/sys/sys/param.h +++ b/sys/sys/param.h @@ -107,6 +107,7 @@ #define P_OSREL_CK_SUPERBLOCK 1300000 #define P_OSREL_CK_INODE 1300005 #define P_OSREL_POWERPC_NEW_AUX_ARGS 1300070 +#define P_OSREL_TIDPID 1400079 #define P_OSREL_MAJOR(x) ((x) / 100000) #endif