From e8f262808b8ecb29b53cc094c763572a816b290e Mon Sep 17 00:00:00 2001 From: "zongmin.gu" Date: Mon, 6 Dec 2021 12:34:01 +0800 Subject: [PATCH] Fix Occlum building warnings --- src/libos/src/error/to_errno.rs | 2 +- src/libos/src/events/waiter.rs | 8 +++--- src/libos/src/fs/events.rs | 5 ++-- src/libos/src/net/io_multiplexing/mod.rs | 1 - src/libos/src/syscall/mod.rs | 4 +-- src/libos/src/util/sync/rw_lock/inner.rs | 35 +++++++++++++++--------- 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/libos/src/error/to_errno.rs b/src/libos/src/error/to_errno.rs index 4a7d2ca7..9b68eb1a 100644 --- a/src/libos/src/error/to_errno.rs +++ b/src/libos/src/error/to_errno.rs @@ -109,7 +109,7 @@ impl ToErrno for std::alloc::AllocError { } } -impl ToErrno for std::alloc::LayoutErr { +impl ToErrno for std::alloc::LayoutError { fn errno(&self) -> Errno { EINVAL } diff --git a/src/libos/src/events/waiter.rs b/src/libos/src/events/waiter.rs index cad8daeb..c1ca6564 100644 --- a/src/libos/src/events/waiter.rs +++ b/src/libos/src/events/waiter.rs @@ -154,8 +154,8 @@ impl Inner { pub fn wake(&self) { if self .is_woken - .compare_and_swap(false, true, Ordering::SeqCst) - == false + .compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst) + .is_ok() { self.host_eventfd.write_u64(1); } @@ -167,8 +167,8 @@ impl Inner { .filter(|inner| { inner .is_woken - .compare_and_swap(false, true, Ordering::SeqCst) - == false + .compare_exchange(false, true, Ordering::SeqCst, Ordering::SeqCst) + .is_ok() }) .map(|inner| inner.host_eventfd.host_fd()) .collect::>(); diff --git a/src/libos/src/fs/events.rs b/src/libos/src/fs/events.rs index 575306d2..3f2afb6f 100644 --- a/src/libos/src/fs/events.rs +++ b/src/libos/src/fs/events.rs @@ -71,8 +71,9 @@ impl AtomicIoEvents for Atomic { let new_val = old_val & !*mask | *ready; let success_ordering = ordering; let failure_ordering = Ordering::Relaxed; - if let Ok(_) = - self.compare_exchange(old_val, new_val, success_ordering, failure_ordering) + if self + .compare_exchange(old_val, new_val, success_ordering, failure_ordering) + .is_ok() { return; } diff --git a/src/libos/src/net/io_multiplexing/mod.rs b/src/libos/src/net/io_multiplexing/mod.rs index e0115ae5..30adecd5 100644 --- a/src/libos/src/net/io_multiplexing/mod.rs +++ b/src/libos/src/net/io_multiplexing/mod.rs @@ -19,5 +19,4 @@ use fs::{AsEvent, AsINodeFile, AsTimer, CreationFlags, File, FileDesc, FileRef, use std::any::Any; use std::convert::TryFrom; use std::fmt; -use std::sync::atomic::spin_loop_hint; use time::timeval_t; diff --git a/src/libos/src/syscall/mod.rs b/src/libos/src/syscall/mod.rs index dd3bb20d..1f52c004 100644 --- a/src/libos/src/syscall/mod.rs +++ b/src/libos/src/syscall/mod.rs @@ -563,10 +563,10 @@ process_syscall_table_with_callback!(impl_fmt_syscall); /// Generate the code that can dispatch any system call to its actual implementation function. macro_rules! impl_dispatch_syscall { (@do_syscall $fn:ident, $syscall:ident, $arg_i:expr, ($(,)?) -> ($($output:tt)*) ) => { - impl_dispatch_syscall!(@as_expr $fn($($output)*)); + impl_dispatch_syscall!(@as_expr $fn($($output)*)) }; (@do_syscall $fn:ident, $syscall:ident, $arg_i:expr, ($_arg_name:ident : $arg_type:ty, $($more_args:tt)*) -> ($($output:tt)*)) => { - impl_dispatch_syscall!(@do_syscall $fn, $syscall, ($arg_i + 1), ($($more_args)*) -> ($($output)* ($syscall.args[$arg_i] as $arg_type),)); + impl_dispatch_syscall!(@do_syscall $fn, $syscall, ($arg_i + 1), ($($more_args)*) -> ($($output)* ($syscall.args[$arg_i] as $arg_type),)) }; (@as_expr $e:expr) => { $e }; diff --git a/src/libos/src/util/sync/rw_lock/inner.rs b/src/libos/src/util/sync/rw_lock/inner.rs index 4006c3c5..f4b88c44 100644 --- a/src/libos/src/util/sync/rw_lock/inner.rs +++ b/src/libos/src/util/sync/rw_lock/inner.rs @@ -52,7 +52,8 @@ use super::*; use crate::process::{futex_wait, futex_wake}; -use std::sync::atomic::{spin_loop_hint, AtomicI32, Ordering}; +use std::hint; +use std::sync::atomic::{AtomicI32, Ordering}; // The implementaion of RwLock // @@ -97,7 +98,7 @@ impl RwLockInner { && self.rw_lock.load(Ordering::SeqCst) != 0 && self.rw_waiters.load(Ordering::SeqCst) == 0 { - spin_loop_hint(); + hint::spin_loop(); spins -= 1; } @@ -121,7 +122,8 @@ impl RwLockInner { self.rw_waiters.fetch_add(1, Ordering::SeqCst); let tmp = (val as u32 | 0x8000_0000) as i32; - self.rw_lock.compare_and_swap(val, tmp, Ordering::SeqCst); + self.rw_lock + .compare_exchange(val, tmp, Ordering::SeqCst, Ordering::SeqCst); ret = futex_wait(&self.rw_lock as *const _ as *const i32, tmp, &None); self.rw_waiters.fetch_sub(1, Ordering::SeqCst); @@ -148,8 +150,8 @@ impl RwLockInner { if self .rw_lock - .compare_and_swap(val, val + 1, Ordering::SeqCst) - == val + .compare_exchange(val, val + 1, Ordering::SeqCst, Ordering::SeqCst) + .is_ok() { break; } @@ -168,7 +170,7 @@ impl RwLockInner { && self.rw_lock.load(Ordering::SeqCst) != 0 && self.rw_waiters.load(Ordering::SeqCst) == 0 { - spin_loop_hint(); + hint::spin_loop(); spins -= 1; } @@ -186,7 +188,8 @@ impl RwLockInner { self.rw_waiters.fetch_add(1, Ordering::SeqCst); let tmp = (val as u32 | 0x8000_0000) as i32; - self.rw_lock.compare_and_swap(val, tmp, Ordering::SeqCst); + self.rw_lock + .compare_exchange(val, tmp, Ordering::SeqCst, Ordering::SeqCst); ret = futex_wait(&self.rw_lock as *const _ as *const i32, tmp, &None); self.rw_waiters.fetch_sub(1, Ordering::SeqCst); @@ -201,12 +204,14 @@ impl RwLockInner { } pub fn try_write(&self) -> Result<()> { - let val = self + if self .rw_lock - .compare_and_swap(0, 0x7FFF_FFFF, Ordering::SeqCst); - match val { - 0 => Ok(()), - _ => return_errno!(EBUSY, "the lock is held for reading or writing"), + .compare_exchange(0, 0x7FFF_FFFF, Ordering::SeqCst, Ordering::SeqCst) + .is_ok() + { + Ok(()) + } else { + Err(errno!(EBUSY, "the lock is held for reading or writing")) } } @@ -227,7 +232,11 @@ impl RwLockInner { _ => val - 1, }; - if self.rw_lock.compare_and_swap(val, new, Ordering::SeqCst) == val { + if self + .rw_lock + .compare_exchange(val, new, Ordering::SeqCst, Ordering::SeqCst) + .is_ok() + { break; } }