From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f45.google.com (mail-qv1-f45.google.com [209.85.219.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B09D82DCF65 for ; Fri, 14 Nov 2025 06:02:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.45 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763100132; cv=none; b=RAoUmzvV+Ne6L9a3Z+NKxXOvkK1X08VgxlixX8UPqZJzbFO7Cd/CQxJ1fMGR005hN+SacGMyqEkh4mAQ8bKECeJ0JNjW0TSbQopKjM4xIil1yeVu1lrC6isS1kwjwqhA7a6E7VbApsWSUcHN+PBO6joB9i462D77vAZJ3fQ7XeI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763100132; c=relaxed/simple; bh=cqqGnUznfbAbWyjGKSTxxYISmjyGKi+MzqFQzxu1muI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mGTQXJB3UPgukKbL3kiRMagAz8MxoF+hYI43Uih4jvyJcZMIdA09YiKy9fTFCV2K+T8GpItY3NoQmcBTnRqcmaFohqtiwr+X6rbDWnJuLeBw+WN3rpcby3NRxpyhd3xxHwt+eP/Nx8ruI3mLe0TAZGq5wHzsKHhx1J2RJne5blE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cjQJqSs4; arc=none smtp.client-ip=209.85.219.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cjQJqSs4" Received: by mail-qv1-f45.google.com with SMTP id 6a1803df08f44-8804650ca32so15097106d6.0 for ; Thu, 13 Nov 2025 22:02:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763100129; x=1763704929; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:feedback-id:from:to:cc:subject :date:message-id:reply-to; bh=M4Y9tkSFAzqofs4NQrj/HfNR2C/q3nK+241BHW7i6Xk=; b=cjQJqSs4P1m3UUdFW7Hw8QvuM81D3pUFlrNBX5/wxTcUoG5bswVtr1Plo5cTzu4rIq ZJiywmM2ZL/tvfN4+emD6xoVFo2AbD6rcGlAQ2qzL1PPYTQ+cajmDstuoEkoFmn6mGeY zZs40YwYPzJInVDJRMmblKnCSzAaqV2MfCXCyBquS8GV2hXecjWQB2ocWMfv2ILihWkW gctBibpQi2dciweH1o46vsGj0ef3BBlHzoyHCMREoLn7U+EQkBEEsV3a7P3UBcpSJSQ9 fwQ+HB12AZMajJKqs72Vlqd0JGbUWBAITQCHNmCCXcQOFZ6O5/SP+lMyti2cMqlvIbgr PDzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763100129; x=1763704929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:feedback-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=M4Y9tkSFAzqofs4NQrj/HfNR2C/q3nK+241BHW7i6Xk=; b=cGa2QEu3TLz7VGC7kpOL+r2xwtzcDQICM7lPe4Lf5ZDJx2+5R77hY/xaUqL1X8qxSl uL4QAVlsJTtStH4dfMJdiW0ZLJUY3v17gBPBB/1kjNohqIh1vdPOfJLxaWuv6odK3SWU QwBbg/nHRAvFGYsP9duhY3HpCfWwBdZRjOw4dSL0yHD4a97P3m7VY/b55b+1MNLZrSVd /RQfu0NV0PugKfV5zfZIuaqa3IwXcMqzpPoDrhVB2WlIOxv4GZDfs/hHali1GqLhcbbe qkVV+VpJoy9oldCoAEWaAxlz/1RVDqGumlSpns66CsvWNgUJ+3Bp+211/UJFCxtkOAoV LPKw== X-Forwarded-Encrypted: i=1; AJvYcCXp9ERNk8Kf6QMoRxzUz77UDHHWshEB+A08mBm3AVEwyzIyY+G/e7TfSfnd9r3B8N8/qr7IqNWBIxyEEKQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxtoJ4MjL9UhBlAh40ezz2UTXHcFKfHm+2u+1FBwzulK/cQ2ars G1xfdXmYF9y1K6Oy7+e5baQkRaxZFSEax60qSEEZoskN1X8vNRgCIGlVm9atcg== X-Gm-Gg: ASbGncsvTPWBq7Wm1plMdW78TRZhnZbq3xz1U4TOplbKM4UoC6p12QEgnHcEqnRDyKO u/wgoaAupTxBFhkrdR6saGz4/44lSg1WQYnaktUhqqVzoeb0ko5WpnD3doQBy7JdMa987TWSowq 6ogSpKGW0dlUwcQAHOPViONLj0BMNtHc7Pxae7xTh/ta8EHVHXkHEhI9COIkLDHSdQK372ELj0d 97ahTzqsIkpQIAqvzGLJAYVieGi5BI5ISg8diq5QVVr4mxsnJUdVsfhcpKdN9kVM2UAWX2blcIM twO37w5T9gvFf/Ci3jtNAtjdagdl/V2wIJs+hgx0iIjdX69XodzofsS8NsXp/9m3BgkkiwU7e5N 0Mbd8oF0R/0WLCWlv/FBEzVAXszuPBzxXqZnRGSnmHrHoZrK2cewBeSE6TfHuHcrRzYS4aZTKKT tj9VVv0X1s/hKKc2aIUEGHt0R5EWalrodXkNTMZfO87BmDgavG9KowERuQM3tx9p8UiPp+TcR4H 5GmOwLzowt1S+13YuMMO7SxMA== X-Google-Smtp-Source: AGHT+IFOowcYbc9UGPU4UebT18/wT1TWItdGa2duoIxyYpu1Y9Ct0AVw0VIZkYW4g95lx8nUutCv9w== X-Received: by 2002:a05:6214:230b:b0:880:48c6:acfb with SMTP id 6a1803df08f44-8829272cecamr22599146d6.49.1763100129390; Thu, 13 Nov 2025 22:02:09 -0800 (PST) Received: from fauth-a1-smtp.messagingengine.com (fauth-a1-smtp.messagingengine.com. [103.168.172.200]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-88286313d85sm25654276d6.23.2025.11.13.22.02.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Nov 2025 22:02:09 -0800 (PST) Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfauth.phl.internal (Postfix) with ESMTP id 7E053F4007E; Fri, 14 Nov 2025 01:02:08 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Fri, 14 Nov 2025 01:02:08 -0500 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdeltdehucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujf gurhephffvvefufffkofgjfhgggfestdekredtredttdenucfhrhhomhepuehoqhhunhcu hfgvnhhguceosghoqhhunhdrfhgvnhhgsehgmhgrihhlrdgtohhmqeenucggtffrrghtth gvrhhnpedvvdduhedvgfegtdejgfehffeufffffeeuhefgfeefleejfedvudehjedvjeet hfenucffohhmrghinhepmhhsghhiugdrlhhinhhkpdgtohhunhhtvghrrdhsthhorhgvpd hprghrshgvrdhmrghpnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghi lhhfrhhomhepsghoqhhunhdomhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthidqie elvdeghedtieegqddujeejkeehheehvddqsghoqhhunhdrfhgvnhhgpeepghhmrghilhdr tghomhesfhhigihmvgdrnhgrmhgvpdhnsggprhgtphhtthhopedvuddpmhhouggvpehsmh htphhouhhtpdhrtghpthhtohepmhhinhhgoheskhgvrhhnvghlrdhorhhgpdhrtghpthht ohepphgvthgvrhiisehinhhfrhgruggvrggurdhorhhgpdhrtghpthhtohepfihilhhlse hkvghrnhgvlhdrohhrghdprhgtphhtthhopehlohhnghhmrghnsehrvgguhhgrthdrtgho mhdprhgtphhtthhopehgrhgvghhkhheslhhinhhugihfohhunhgurghtihhonhdrohhrgh dprhgtphhtthhopehrrghfrggvlheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepuggr khhrsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehojhgvuggrsehkvghrnhgvlhdroh hrghdprhgtphhtthhopegrlhgvgidrghgrhihnohhrsehgmhgrihhlrdgtohhm X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 14 Nov 2025 01:02:07 -0500 (EST) From: Boqun Feng To: Ingo Molnar , Peter Zijlstra Cc: "Will Deacon" , "Waiman Long" , reg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Miguel Ojeda , Alex Gaynor , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Mark Rutland , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Boqun Feng , Matthew Maurer , David Gow Subject: [PATCH 3/4] rust: debugfs: Replace the usage of Rust native atomics Date: Thu, 13 Nov 2025 22:01:59 -0800 Message-ID: <20251114060200.12982-4-boqun.feng@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251114060200.12982-1-boqun.feng@gmail.com> References: <20251114060200.12982-1-boqun.feng@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Rust native atomics are not allowed to use in kernel due to the mismatch of memory model with Linux kernel memory model, hence remove the usage of Rust native atomics in debufs. Reviewed-by: Matthew Maurer Acked-by: Danilo Krummrich Tested-by: David Gow Acked-by: Greg Kroah-Hartman Signed-off-by: Boqun Feng Link: https://patch.msgid.link/20251022035324.70785-4-boqun.feng@gmail.com --- rust/kernel/debugfs/traits.rs | 53 +++++++++-------------------- samples/rust/rust_debugfs.rs | 12 +++---- samples/rust/rust_debugfs_scoped.rs | 6 ++-- 3 files changed, 25 insertions(+), 46 deletions(-) diff --git a/rust/kernel/debugfs/traits.rs b/rust/kernel/debugfs/traits.rs index ba7ec5a900b8..92054fed2136 100644 --- a/rust/kernel/debugfs/traits.rs +++ b/rust/kernel/debugfs/traits.rs @@ -4,14 +4,11 @@ //! Traits for rendering or updating values exported to DebugFS. use crate::prelude::*; +use crate::sync::atomic::{Atomic, AtomicBasicOps, AtomicType, Relaxed}; use crate::sync::Mutex; use crate::uaccess::UserSliceReader; use core::fmt::{self, Debug, Formatter}; use core::str::FromStr; -use core::sync::atomic::{ - AtomicI16, AtomicI32, AtomicI64, AtomicI8, AtomicIsize, AtomicU16, AtomicU32, AtomicU64, - AtomicU8, AtomicUsize, Ordering, -}; /// A trait for types that can be written into a string. /// @@ -66,37 +63,21 @@ fn read_from_slice(&self, reader: &mut UserSliceReader) -> Result { } } -macro_rules! impl_reader_for_atomic { - ($(($atomic_type:ty, $int_type:ty)),*) => { - $( - impl Reader for $atomic_type { - fn read_from_slice(&self, reader: &mut UserSliceReader) -> Result { - let mut buf = [0u8; 21]; // Enough for a 64-bit number. - if reader.len() > buf.len() { - return Err(EINVAL); - } - let n = reader.len(); - reader.read_slice(&mut buf[..n])?; +impl Reader for Atomic +where + T::Repr: AtomicBasicOps, +{ + fn read_from_slice(&self, reader: &mut UserSliceReader) -> Result { + let mut buf = [0u8; 21]; // Enough for a 64-bit number. + if reader.len() > buf.len() { + return Err(EINVAL); + } + let n = reader.len(); + reader.read_slice(&mut buf[..n])?; - let s = core::str::from_utf8(&buf[..n]).map_err(|_| EINVAL)?; - let val = s.trim().parse::<$int_type>().map_err(|_| EINVAL)?; - self.store(val, Ordering::Relaxed); - Ok(()) - } - } - )* - }; + let s = core::str::from_utf8(&buf[..n]).map_err(|_| EINVAL)?; + let val = s.trim().parse::().map_err(|_| EINVAL)?; + self.store(val, Relaxed); + Ok(()) + } } - -impl_reader_for_atomic!( - (AtomicI16, i16), - (AtomicI32, i32), - (AtomicI64, i64), - (AtomicI8, i8), - (AtomicIsize, isize), - (AtomicU16, u16), - (AtomicU32, u32), - (AtomicU64, u64), - (AtomicU8, u8), - (AtomicUsize, usize) -); diff --git a/samples/rust/rust_debugfs.rs b/samples/rust/rust_debugfs.rs index 82b61a15a34b..711faa07bece 100644 --- a/samples/rust/rust_debugfs.rs +++ b/samples/rust/rust_debugfs.rs @@ -32,14 +32,12 @@ //! ``` use core::str::FromStr; -use core::sync::atomic::AtomicUsize; -use core::sync::atomic::Ordering; use kernel::c_str; use kernel::debugfs::{Dir, File}; use kernel::new_mutex; use kernel::prelude::*; +use kernel::sync::atomic::{Atomic, Relaxed}; use kernel::sync::Mutex; - use kernel::{acpi, device::Core, of, platform, str::CString, types::ARef}; kernel::module_platform_driver! { @@ -59,7 +57,7 @@ struct RustDebugFs { #[pin] _compatible: File, #[pin] - counter: File, + counter: File>, #[pin] inner: File>, } @@ -109,7 +107,7 @@ fn probe( ) -> Result>> { let result = KBox::try_pin_init(RustDebugFs::new(pdev), GFP_KERNEL)?; // We can still mutate fields through the files which are atomic or mutexed: - result.counter.store(91, Ordering::Relaxed); + result.counter.store(91, Relaxed); { let mut guard = result.inner.lock(); guard.x = guard.y; @@ -120,8 +118,8 @@ fn probe( } impl RustDebugFs { - fn build_counter(dir: &Dir) -> impl PinInit> + '_ { - dir.read_write_file(c_str!("counter"), AtomicUsize::new(0)) + fn build_counter(dir: &Dir) -> impl PinInit>> + '_ { + dir.read_write_file(c_str!("counter"), Atomic::::new(0)) } fn build_inner(dir: &Dir) -> impl PinInit>> + '_ { diff --git a/samples/rust/rust_debugfs_scoped.rs b/samples/rust/rust_debugfs_scoped.rs index b0c4e76b123e..9f0ec5f24cda 100644 --- a/samples/rust/rust_debugfs_scoped.rs +++ b/samples/rust/rust_debugfs_scoped.rs @@ -6,9 +6,9 @@ //! `Scope::dir` to create a variety of files without the need to separately //! track them all. -use core::sync::atomic::AtomicUsize; use kernel::debugfs::{Dir, Scope}; use kernel::prelude::*; +use kernel::sync::atomic::Atomic; use kernel::sync::Mutex; use kernel::{c_str, new_mutex, str::CString}; @@ -62,7 +62,7 @@ fn create_file_write( let file_name = CString::try_from_fmt(fmt!("{name_str}"))?; for sub in items { nums.push( - AtomicUsize::new(sub.parse().map_err(|_| EINVAL)?), + Atomic::::new(sub.parse().map_err(|_| EINVAL)?), GFP_KERNEL, )?; } @@ -109,7 +109,7 @@ fn init(device_dir: Dir) -> impl PinInit { struct DeviceData { name: CString, - nums: KVec, + nums: KVec>, } fn init_control(base_dir: &Dir, dyn_dirs: Dir) -> impl PinInit> + '_ { -- 2.50.1 (Apple Git-155)