Commit f92d22b0 authored by Boqun Feng's avatar Boqun Feng Committed by Peter Zijlstra
Browse files

rust: helpers: Generify the definitions of rust_helper_*_xchg*



To support atomic pointers, more xchg helpers will be introduced, hence
define macros to generate these helpers to ease the introduction of the
future helpers.

Signed-off-by: default avatarBoqun Feng <boqun.feng@gmail.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260117122243.24404-3-boqun.feng@gmail.com
Link: https://patch.msgid.link/20260303201701.12204-5-boqun@kernel.org
parent ecc8e9fb
Loading
Loading
Loading
Loading
+12 −36
Original line number Diff line number Diff line
@@ -44,45 +44,21 @@ GEN_READ_SET_HELPERS(i16, s16)
 * The architectures that currently support Rust (x86_64, armv7,
 * arm64, riscv, and loongarch) satisfy these requirements.
 */
__rust_helper s8 rust_helper_atomic_i8_xchg(s8 *ptr, s8 new)
{
	return xchg(ptr, new);
}

__rust_helper s16 rust_helper_atomic_i16_xchg(s16 *ptr, s16 new)
{
	return xchg(ptr, new);
}

__rust_helper s8 rust_helper_atomic_i8_xchg_acquire(s8 *ptr, s8 new)
{
	return xchg_acquire(ptr, new);
}

__rust_helper s16 rust_helper_atomic_i16_xchg_acquire(s16 *ptr, s16 new)
{
	return xchg_acquire(ptr, new);
}

__rust_helper s8 rust_helper_atomic_i8_xchg_release(s8 *ptr, s8 new)
{
	return xchg_release(ptr, new);
}

__rust_helper s16 rust_helper_atomic_i16_xchg_release(s16 *ptr, s16 new)
{
	return xchg_release(ptr, new);
#define GEN_XCHG_HELPER(tname, type, suffix)					\
__rust_helper type								\
rust_helper_atomic_##tname##_xchg##suffix(type *ptr, type new)			\
{										\
	return xchg##suffix(ptr, new);					\
}

__rust_helper s8 rust_helper_atomic_i8_xchg_relaxed(s8 *ptr, s8 new)
{
	return xchg_relaxed(ptr, new);
}
#define GEN_XCHG_HELPERS(tname, type)						\
	GEN_XCHG_HELPER(tname, type, )						\
	GEN_XCHG_HELPER(tname, type, _acquire)					\
	GEN_XCHG_HELPER(tname, type, _release)					\
	GEN_XCHG_HELPER(tname, type, _relaxed)					\

__rust_helper s16 rust_helper_atomic_i16_xchg_relaxed(s16 *ptr, s16 new)
{
	return xchg_relaxed(ptr, new);
}
GEN_XCHG_HELPERS(i8, s8)
GEN_XCHG_HELPERS(i16, s16)

/*
 * try_cmpxchg helpers depend on ARCH_SUPPORTS_ATOMIC_RMW and on the