From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2012) id B63BD3858C78; Mon, 18 Mar 2024 17:50:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B63BD3858C78 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1710784235; bh=Kro+mx3/kyLcLFBoWtCg0ocSGGrwZvpm7AJuAymIPEM=; h=From:To:Subject:Date:From; b=L0jV3gYdWxDfmu7S6JxHWvn2jwpIaHfjKgnGMRuV5vCjeVOlc0XAc6PKcQBDQ/xU1 iprkkCtEmAFZ7K/XHv373jv0Y25K6OZ0IPebBNZSBm9RMAWs9GhuK26dcD8gYTFQ5x 0qFYvIwRlTlpxTWfcO38Qhc7u1HhLo+wW7XqfBFA= 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.35/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.35/master X-Git-Oldrev: dda5faa65e872e115e4e830ce14fa11267c7efc3 X-Git-Newrev: d6d295a95b6463611d3517378be2c40685f98806 Message-Id: <20240318175035.B63BD3858C78@sourceware.org> Date: Mon, 18 Mar 2024 17:50:35 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d6d295a95b6463611d3517378be2c40685f98806 commit d6d295a95b6463611d3517378be2c40685f98806 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) Fixes: c9ee9cc8b8e4f8671c1d487f83db333b6be6a925 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 5c3301004c..3a2f712386 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 */