From f708aca254f464577eca2183b1cc68b70ecb54df Mon Sep 17 00:00:00 2001 From: Chen Chengjun Date: Wed, 15 Jul 2026 06:36:41 +0000 Subject: [PATCH] Add update method to the atomic version of integer like types --- kernel/libs/atomic-integer-wrapper/src/lib.rs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/kernel/libs/atomic-integer-wrapper/src/lib.rs b/kernel/libs/atomic-integer-wrapper/src/lib.rs index 19c432a0a..da5f371fa 100644 --- a/kernel/libs/atomic-integer-wrapper/src/lib.rs +++ b/kernel/libs/atomic-integer-wrapper/src/lib.rs @@ -197,6 +197,25 @@ pub fn define_atomic_version_of_integer_like_type(input: TokenStream) -> TokenSt .map_err(|val| val.#from_integer) } }; + let fn_update = quote! { + pub fn update( + &self, + set_order: core::sync::atomic::Ordering, + fetch_order: core::sync::atomic::Ordering, + mut f: F + ) -> #integer_like_type + where + F: FnMut(#integer_like_type) -> #integer_like_type, + { + self.0 + .update( + set_order, + fetch_order, + |old| f(old.#from_integer).into() + ) + .#from_integer + } + }; let expanded = quote! { #item @@ -213,6 +232,8 @@ pub fn define_atomic_version_of_integer_like_type(input: TokenStream) -> TokenSt #fn_compare_exchange #fn_fetch_update + + #fn_update } };