From c8bc43a5efa6559189c851378d348c0dd2e052f6 Mon Sep 17 00:00:00 2001 From: vasilito Date: Fri, 10 Jul 2026 22:51:32 +0300 Subject: [PATCH] syscall: data and flag module updates --- src/data.rs | 32 ++++++++++++++++++++++++++++++++ src/flag.rs | 2 ++ 2 files changed, 34 insertions(+) diff --git a/src/data.rs b/src/data.rs index 8ba0d1a05c..6265bbd221 100644 --- a/src/data.rs +++ b/src/data.rs @@ -224,6 +224,38 @@ pub struct TimeSpec { pub tv_nsec: i32, } +#[derive(Copy, Clone, Debug, Default)] +#[repr(C)] +pub struct FutexWaitv { + pub uaddr: usize, + pub val: usize, + pub flags: u32, + pub __reserved: u32, +} + +impl Deref for FutexWaitv { + type Target = [u8]; + fn deref(&self) -> &[u8] { + unsafe { + slice::from_raw_parts( + self as *const FutexWaitv as *const u8, + mem::size_of::(), + ) + } + } +} + +impl DerefMut for FutexWaitv { + fn deref_mut(&mut self) -> &mut [u8] { + unsafe { + slice::from_raw_parts_mut( + self as *mut FutexWaitv as *mut u8, + mem::size_of::(), + ) + } + } +} + const NANOS_PER_SEC: u128 = 1_000_000_000; impl TimeSpec { diff --git a/src/flag.rs b/src/flag.rs index fff6d17952..0b7ab0eed5 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -63,6 +63,8 @@ pub const FUTEX_WAIT: usize = 0; pub const FUTEX_WAKE: usize = 1; pub const FUTEX_REQUEUE: usize = 2; pub const FUTEX_WAIT64: usize = 3; +/// Wait on multiple futexes atomically and return the index of the first one woken. +pub const FUTEX_WAIT_MULTIPLE: usize = 4; // TODO: Split SendFdFlags into caller flags and flags that the scheme receives? bitflags::bitflags! {