From: Khem Raj <raj.khem@gmail.com>
To: openembedded-core@lists.openembedded.org
Cc: Khem Raj <raj.khem@gmail.com>
Subject: [PATCH 2/7] cargo-c: Update patches to latest versions
Date: Thu, 31 Jul 2025 21:22:36 -0700 [thread overview]
Message-ID: <20250801042242.3076232-2-raj.khem@gmail.com> (raw)
In-Reply-To: <20250801042242.3076232-1-raj.khem@gmail.com>
getrandom patch is accepted upstream with minor changes
parking_lot patch has addressed upstream feedback
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
...Use-libc-SYS_futex_time64-on-riscv32.patch | 69 +++++++------------
...Use-libc-SYS_futex_time64-on-riscv32.patch | 65 +++++++----------
2 files changed, 51 insertions(+), 83 deletions(-)
diff --git a/meta/recipes-devtools/rust/cargo-c/0001-getrandom-Use-libc-SYS_futex_time64-on-riscv32.patch b/meta/recipes-devtools/rust/cargo-c/0001-getrandom-Use-libc-SYS_futex_time64-on-riscv32.patch
index dc7130fb574..638832c467f 100644
--- a/meta/recipes-devtools/rust/cargo-c/0001-getrandom-Use-libc-SYS_futex_time64-on-riscv32.patch
+++ b/meta/recipes-devtools/rust/cargo-c/0001-getrandom-Use-libc-SYS_futex_time64-on-riscv32.patch
@@ -1,53 +1,36 @@
From 71c356a07fbbf1530cfc87960e975f93bc9007e8 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 22 Jul 2025 09:46:03 -0700
-Subject: [PATCH] Use libc::SYS_futex_time64 on riscv32
+Subject: [PATCH] Use getrandom syscall on riscv32/riscv64 linux
-On RISC-V 32-bit (riscv32), the SYS_futex system call is
-often handled indirectly due to the use of a 64-bit time_t
-type. Specifically, while SYS_futex is not directly defined,
-a related syscall like SYS_futex_time64 can be used,
+Minimum kernel needed on RISCV is fairly new (4.15+) so we are sure
+to have getrandom syscall, on glibc there is mimimal ABI kernel to denote
+it but musl does not have any other way to indicate it, so add it
+as a condition here to choose getrandom backend for rv32/rv64 on linux
+when using musl.
-Upstream-Status: Submitted [https://github.com/rust-random/getrandom/pull/698]
+Upstream-Status: Backport [https://github.com/rust-random/getrandom/pull/699]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/backends/use_file.rs | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
-diff --git a/src/backends/use_file.rs b/src/backends/use_file.rs
-index 7b48d43..baa0c66 100644
---- a/src/backends/use_file.rs
-+++ b/src/backends/use_file.rs
-@@ -158,7 +158,18 @@ mod sync {
- pub(super) fn wait() {
- let op = libc::FUTEX_WAIT | libc::FUTEX_PRIVATE_FLAG;
- let timeout_ptr = core::ptr::null::<libc::timespec>();
-+ #[cfg(not(target_arch = "riscv32"))]
- let ret = unsafe { libc::syscall(libc::SYS_futex, &FD, op, FD_ONGOING_INIT, timeout_ptr) };
-+ #[cfg(target_arch = "riscv32")]
-+ let ret = unsafe {
-+ libc::syscall(
-+ libc::SYS_futex_time64,
-+ &FD,
-+ op,
-+ FD_ONGOING_INIT,
-+ timeout_ptr,
-+ )
-+ };
- // FUTEX_WAIT should return either 0 or EAGAIN error
- debug_assert!({
- match ret {
-@@ -172,7 +183,13 @@ mod sync {
- /// Wake up all threads which wait for value of atomic `FD` to change.
- pub(super) fn wake() {
- let op = libc::FUTEX_WAKE | libc::FUTEX_PRIVATE_FLAG;
-+
-+ #[cfg(not(target_arch = "riscv32"))]
- let ret = unsafe { libc::syscall(libc::SYS_futex, &FD, op, libc::INT_MAX) };
-+
-+ #[cfg(target_arch = "riscv32")]
-+ let ret = unsafe { libc::syscall(libc::SYS_futex_time64, &FD, op, libc::INT_MAX) };
-+
- debug_assert!(ret >= 0);
- }
-
+--- a/src/backends.rs
++++ b/src/backends.rs
+@@ -93,7 +93,15 @@ cfg_if! {
+ // Minimum supported Linux kernel version for MUSL targets
+ // is not specified explicitly (as of Rust 1.77) and they
+ // are used in practice to target pre-3.17 kernels.
+- target_env = "musl",
++ all(
++ target_env = "musl",
++ not(
++ any(
++ target_arch = "riscv64",
++ target_arch = "riscv32",
++ ),
++ ),
++ ),
+ ),
+ )
+ ))] {
diff --git a/meta/recipes-devtools/rust/cargo-c/0001-parking-lot-Use-libc-SYS_futex_time64-on-riscv32.patch b/meta/recipes-devtools/rust/cargo-c/0001-parking-lot-Use-libc-SYS_futex_time64-on-riscv32.patch
index 37f21af3d14..9e84ca3ec79 100644
--- a/meta/recipes-devtools/rust/cargo-c/0001-parking-lot-Use-libc-SYS_futex_time64-on-riscv32.patch
+++ b/meta/recipes-devtools/rust/cargo-c/0001-parking-lot-Use-libc-SYS_futex_time64-on-riscv32.patch
@@ -1,66 +1,51 @@
-From 78d4c37e9c5b60ea2368627c2fc297dfc46bec2a Mon Sep 17 00:00:00 2001
+From 7ebddca7070742bbb9cce471a93d699ad70ee371 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 22 Jul 2025 10:15:06 -0700
-Subject: [PATCH] Use libc::SYS_futex_time64 on riscv32
+Subject: [PATCH] Use libc::SYS_futex_time64 on riscv32/musl
On RISC-V 32-bit (riscv32), the SYS_futex system call is
often handled indirectly due to the use of a 64-bit time_t
type. Specifically, while SYS_futex is not directly defined,
-a related syscall like SYS_futex_time64 can be used,
+a related syscall like SYS_futex_time64 can be used on target
+e.g. riscv32
Upstream-Status: Submitted [https://github.com/Amanieu/parking_lot/pull/485]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
- src/thread_parker/linux.rs | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
+ src/thread_parker/linux.rs | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/thread_parker/linux.rs b/src/thread_parker/linux.rs
-index 92601f6..3695624 100644
+index 92601f6..0952db4 100644
--- a/src/thread_parker/linux.rs
+++ b/src/thread_parker/linux.rs
-@@ -108,6 +108,7 @@ impl ThreadParker {
+@@ -108,9 +108,13 @@ impl ThreadParker {
.as_ref()
.map(|ts_ref| ts_ref as *const _)
.unwrap_or(ptr::null());
-+ #[cfg(not(target_arch = "riscv32"))]
++ #[cfg(not(all(target_arch = "riscv32", target_env = "musl")))]
++ let futex_num = libc::SYS_futex;
++ #[cfg(all(target_arch = "riscv32", target_env = "musl",))]
++ let futex_num = libc::SYS_futex_time64;
let r = unsafe {
libc::syscall(
- libc::SYS_futex,
-@@ -117,6 +118,16 @@ impl ThreadParker {
- ts_ptr,
- )
- };
-+ #[cfg(target_arch = "riscv32")]
-+ let r = unsafe {
-+ libc::syscall(
-+ libc::SYS_futex_time64,
-+ &self.futex,
-+ libc::FUTEX_WAIT | libc::FUTEX_PRIVATE_FLAG,
-+ 1,
-+ ts_ptr,
-+ )
-+ };
- debug_assert!(r == 0 || r == -1);
- if r == -1 {
- debug_assert!(
-@@ -137,12 +148,20 @@ impl super::UnparkHandleT for UnparkHandle {
+- libc::SYS_futex,
++ futex_num,
+ &self.futex,
+ libc::FUTEX_WAIT | libc::FUTEX_PRIVATE_FLAG,
+ 1,
+@@ -137,8 +141,13 @@ impl super::UnparkHandleT for UnparkHandle {
unsafe fn unpark(self) {
// The thread data may have been freed at this point, but it doesn't
// matter since the syscall will just return EFAULT in that case.
-+ #[cfg(not(target_arch = "riscv32"))]
++ #[cfg(not(all(target_arch = "riscv32", target_env = "musl",)))]
++ let futex_num = libc::SYS_futex;
++ #[cfg(all(target_arch = "riscv32", target_env = "musl",))]
++ let futex_num = libc::SYS_futex_time64;
++
let r = libc::syscall(
- libc::SYS_futex,
+- libc::SYS_futex,
++ futex_num,
self.futex,
libc::FUTEX_WAKE | libc::FUTEX_PRIVATE_FLAG,
1,
- );
-+ #[cfg(target_arch = "riscv32")]
-+ let r = libc::syscall(
-+ libc::SYS_futex_time64,
-+ self.futex,
-+ libc::FUTEX_WAKE | libc::FUTEX_PRIVATE_FLAG,
-+ 1,
-+ );
- debug_assert!(r == 0 || r == 1 || r == -1);
- if r == -1 {
- debug_assert_eq!(errno(), libc::EFAULT);
next prev parent reply other threads:[~2025-08-01 4:22 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-01 4:22 [PATCH 1/7] toolchain/clang-native: Set BUILD_LDFLAGS instead of LDFLAGS Khem Raj
2025-08-01 4:22 ` Khem Raj [this message]
2025-08-01 4:22 ` [PATCH 3/7] libxcrypt: Allow undefined symbols in version scripts with lld linker Khem Raj
2025-08-07 9:57 ` [OE-core] " Alexander Kanavin
2025-08-07 20:18 ` Khem Raj
2025-08-11 8:17 ` Alexander Kanavin
2025-08-11 15:23 ` Khem Raj
2025-08-01 4:22 ` [PATCH 4/7] libtirpc: " Khem Raj
2025-08-01 4:22 ` [PATCH 5/7] gzip: Always use GNU ld for linking Khem Raj
2025-08-11 16:47 ` [OE-core] " Randy MacLeod
2025-08-01 4:22 ` [PATCH 6/7] binutils-cross-canadian: Always use GNU linker Khem Raj
2025-08-01 4:22 ` [PATCH 7/7] fmt: Fix build with clang-21 Khem Raj
2025-08-01 12:54 ` [OE-core] [PATCH 1/7] toolchain/clang-native: Set BUILD_LDFLAGS instead of LDFLAGS Mathieu Dubois-Briand
2025-08-01 16:13 ` Mathieu Dubois-Briand
2025-08-01 16:24 ` Khem Raj
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250801042242.3076232-2-raj.khem@gmail.com \
--to=raj.khem@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.