summaryrefslogtreecommitdiff
path: root/0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-10-09 03:36:26 +0000
committerCoprDistGit <infra@openeuler.org>2024-10-09 03:36:26 +0000
commitdb43dfdfa8bc2b938582aef3d87e43594c13ee50 (patch)
tree47b95b2f6ac8d8b7e6fa373a5bd7d661bf7234df /0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch
parentb933872de72b006230559f77acc3ccfb38a1f343 (diff)
automatic import of glibcopeneuler20.03
Diffstat (limited to '0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch')
-rw-r--r--0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch b/0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch
new file mode 100644
index 0000000..b3d890d
--- /dev/null
+++ b/0002-linux-Use-rseq-area-unconditionally-in-sched_getcpu-.patch
@@ -0,0 +1,52 @@
+From 5753cda1ca0749002c4718122a9b6d5177087b7b Mon Sep 17 00:00:00 2001
+From: Florian Weimer <fweimer@redhat.com>
+Date: Fri, 15 Mar 2024 19:08:24 +0100
+Subject: [PATCH 02/26] linux: Use rseq area unconditionally in sched_getcpu
+ (bug 31479)
+
+Originally, nptl/descr.h included <sys/rseq.h>, 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 <arjun@redhat.com>
+(cherry picked from commit 7a76f218677d149d8b7875b336722108239f7ee9)
+---
+ 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 */
+--
+2.33.0
+