On Wed, May 27, 2026 at 04:03:30PM -0700, Paul E. McKenney wrote: > On Wed, May 27, 2026 at 08:40:42PM +0300, Onur Özkan wrote: > > Add helper wrappers for SRCU functions that are exposed to Rust > > through generated bindings. > > > > Signed-off-by: Onur Özkan <[email protected]> > > --- > > rust/helpers/helpers.c | 1 + > > rust/helpers/srcu.c | 34 ++++++++++++++++++++++++++++++++++ > > 2 files changed, 35 insertions(+) > > create mode 100644 rust/helpers/srcu.c > > > > diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c > > index 625921e27dfb..f3562d3b3888 100644 > > --- a/rust/helpers/helpers.c > > +++ b/rust/helpers/helpers.c > > @@ -88,6 +88,7 @@ > > #include "signal.c" > > #include "slab.c" > > #include "spinlock.c" > > +#include "srcu.c" > > #include "sync.c" > > #include "task.c" > > #include "time.c" > > diff --git a/rust/helpers/srcu.c b/rust/helpers/srcu.c > > new file mode 100644 > > index 000000000000..79dd24a104ef > > --- /dev/null > > +++ b/rust/helpers/srcu.c > > @@ -0,0 +1,34 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > + > > +#include <linux/srcu.h> > > + > > +__rust_helper int rust_helper_init_srcu_struct_with_key(struct srcu_struct > > *ssp, > > + const char *name, > > + struct lock_class_key > > *key) > > +{ > > +#ifdef CONFIG_DEBUG_LOCK_ALLOC > > + return __init_srcu_struct(ssp, name, key); > > +#else /* !CONFIG_DEBUG_LOCK_ALLOC */ > > + return init_srcu_struct(ssp); > > +#endif /* CONFIG_DEBUG_LOCK_ALLOC */ > > +} > > Similar to Boqun's feedback on a later patch, could you please make > these be two functions under the corresponding legs of the existing > CONFIG_DEBUG_LOCK_ALLOC #ifdef in include/linux/srcu.h? You are including > that file above, so it should work well. > > Actually, you could just name thefunction __init_srcu_struct(), use the > existing definition under #ifdef CONFIG_DEBUG_LOCK_ALLOC, and just create > the simple wrapper in the other leg of this #ifdef. That would be more > aligned with the Linux-kernel coding guidelines and also be less code. > > Or is the "rust_helper_" prefix mandatory? If so, you could make > rust_helper_init_srcu_struct() be a wrapper for __init_srcu_struct() > in this file, then just define __init_srcu_struct() as a wrapper around > init_srcu_struct() in the !CONFIG_DEBUG_LOCK_ALLOC leg of the #ifdef > in include/linux/srcu.h.
The rust_helper_ prefix helps avoid duplicate symbol errors. When you invoke `bindings::foo` then it will prefer to call the symbol actually called `foo()`, but if there is no `foo` symbol, then it will fall back to `rust_helper_foo()`. This is useful because many symbols are only marked inline under some configurations, and this makes it automatically pick the right one depending on whether the real symbol exists or not. Alice

