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 } };