From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2012) id 250BF3858425; Mon, 18 Mar 2024 17:47:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 250BF3858425 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1710784062; bh=WdR63H7LhgIaCtHIr4YjFVdtAFgx3wAmHoosxMf75sY=; h=From:To:Subject:Date:From; b=AiWSUcdheywRCs75MklI+4LX1zHChWTm+IqMXoOzY7BGHiYK54Y7kRoqHgMv0s5mS HZfkp9/HGKOoIabkxLBZxM7AVJYUe/wIpLoSKcTS8KuO9JwEBdDVMNmRaTFpSi5XgJ SBVB25e3PLt7Wx3AW2X+ZeQwn50eMP0YujailpjQ= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Arjun Shankar To: glibc-cvs@sourceware.org Subject: [glibc/release/2.38/master] linux: Use rseq area unconditionally in sched_getcpu (bug 31479) X-Act-Checkin: glibc X-Git-Author: Florian Weimer X-Git-Refname: refs/heads/release/2.38/master X-Git-Oldrev: ee4806e978467d705b26ccb7dfddb9e0a710f8e4 X-Git-Newrev: 5753cda1ca0749002c4718122a9b6d5177087b7b Message-Id: <20240318174742.250BF3858425@sourceware.org> Date: Mon, 18 Mar 2024 17:47:42 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5753cda1ca0749002c4718122a9b6d5177087b7b commit 5753cda1ca0749002c4718122a9b6d5177087b7b Author: Florian Weimer Date: Fri Mar 15 19:08:24 2024 +0100 linux: Use rseq area unconditionally in sched_getcpu (bug 31479) Originally, nptl/descr.h included , but we removed that in commit 2c6b4b272e6b4d07303af25709051c3e96288f2d ("nptl: Unconditionally use a 32-byte rseq area"). After that, it was not ensured that the RSEQ_SIG macro was defined during sched_getcpu.c compilation that provided a definition. This commit always checks the rseq area for CPU number information before using the other approaches. This adds an unnecessary (but well-predictable) branch on architectures which do not define RSEQ_SIG, but its cost is small compared to the system call. Most architectures that have vDSO acceleration for getcpu also have rseq support. Fixes: 2c6b4b272e6b4d07303af25709051c3e96288f2d Fixes: 1d350aa06091211863e41169729cee1bca39f72f Reviewed-by: Arjun Shankar (cherry picked from commit 7a76f218677d149d8b7875b336722108239f7ee9) Diff: --- sysdeps/unix/sysv/linux/sched_getcpu.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/sysdeps/unix/sysv/linux/sched_getcpu.c b/sysdeps/unix/sysv/linux/sched_getcpu.c index 4457d714bc..22700ef846 100644 --- a/sysdeps/unix/sysv/linux/sched_getcpu.c +++ b/sysdeps/unix/sysv/linux/sched_getcpu.c @@ -33,17 +33,9 @@ vsyscall_sched_getcpu (void) return r == -1 ? r : cpu; } -#ifdef RSEQ_SIG int sched_getcpu (void) { int cpu_id = THREAD_GETMEM_VOLATILE (THREAD_SELF, rseq_area.cpu_id); return __glibc_likely (cpu_id >= 0) ? cpu_id : vsyscall_sched_getcpu (); } -#else /* RSEQ_SIG */ -int -sched_getcpu (void) -{ - return vsyscall_sched_getcpu (); -} -#endif /* RSEQ_SIG */