[PATCH v10 5/5] rust: add arch_static_branch

Alice Ryhl aliceryhl at google.com
Tue Oct 15 06:05:49 PDT 2024


On Fri, Oct 11, 2024 at 5:24 PM Josh Poimboeuf <jpoimboe at kernel.org> 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



More information about the linux-riscv mailing list