From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2012) id BECC93858419; Mon, 18 Mar 2024 17:49:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BECC93858419 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1710784190; bh=3YXR3GthGOI9K5wvdxZ61vOGJ+ruTSGRXY3RzuIzj0w=; h=From:To:Subject:Date:From; b=pzcpqs6GlhItIXJs3P7OiGWbPv0tLAPFvSJDcI0wJsKamDSBocu0WLFvYb3H6pGYt /1/R5JH9/Q68ktEztUErkuGSztd00La9IvlkSQBqBhIIztPkT2pNYHLPbH8XvqpAa5 ESddQ+t+/zT4ZvVuUc8YL+pW2+fv9aKhQCtn8hOQ= 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.36/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.36/master X-Git-Oldrev: b204650058ac29a3f6fcb710b09af4994fc09d9d X-Git-Newrev: 1b85f77f43c8e352d6aac7835eedf654c5d9242b Message-Id: <20240318174950.BECC93858419@sourceware.org> Date: Mon, 18 Mar 2024 17:49:50 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=1b85f77f43c8e352d6aac7835eedf654c5d9242b commit 1b85f77f43c8e352d6aac7835eedf654c5d9242b 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: 54e812100df2a6f1d75fbef4e3b45c076599842f 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 */