Re: [PATCH v10 5/5] rust: add arch_static_branch

From: Alice Ryhl
Date: Tue Oct 15 2024 - 09:06:15 EST


On Fri, Oct 11, 2024 at 5:24 PM Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
>
> On Fri, Oct 11, 2024 at 10:13:38AM +0000, Alice Ryhl wrote:
> > +#[cfg(CONFIG_JUMP_LABEL)]
> > +#[cfg(not(CONFIG_HAVE_JUMP_LABEL_HACK))]
> > +macro_rules! arch_static_branch {
> > + ($key:path, $keytyp:ty, $field:ident, $branch:expr) => {'my_label: {
> > + $crate::asm!(
> > + include!(concat!(env!("OBJTREE"), "/rust/kernel/arch_static_branch_asm.rs"));
> > + l_yes = label {
> > + break 'my_label true;
> > + },
> > + symb = sym $key,
> > + off = const ::core::mem::offset_of!($keytyp, $field),
> > + branch = const $crate::jump_label::bool_to_int($branch),
> > + );
> > +
> > + break 'my_label false;
> > + }};
> > +}
> > +
> > +#[macro_export]
> > +#[doc(hidden)]
> > +#[cfg(CONFIG_JUMP_LABEL)]
> > +#[cfg(CONFIG_HAVE_JUMP_LABEL_HACK)]
> > +macro_rules! arch_static_branch {
> > + ($key:path, $keytyp:ty, $field:ident, $branch:expr) => {'my_label: {
> > + $crate::asm!(
> > + include!(concat!(env!("OBJTREE"), "/rust/kernel/arch_static_branch_asm.rs"));
> > + l_yes = label {
> > + break 'my_label true;
> > + },
> > + symb = sym $key,
> > + off = const ::core::mem::offset_of!($keytyp, $field),
> > + branch = const 2 | $crate::jump_label::bool_to_int($branch),
> > + );
> > +
> > + break 'my_label false;
> > + }};
>
> Ouch... could we get rid of all this duplication by containing the hack
> bit to ARCH_STATIC_BRANCH_ASM() like so?

Good idea, thanks.

Alice