On Fri, Nov 07, 2025 at 12:12:43PM +0000, Alice Ryhl wrote:
> On Fri, Nov 07, 2025 at 09:44:22AM +0000, Lorenzo Stoakes wrote:
> > On Fri, Nov 07, 2025 at 09:13:00AM +0000, Alice Ryhl wrote:
> > > On Thu, Nov 06, 2025 at 02:54:33PM +0000, Lorenzo Stoakes wrote:
> > > > +cc Alice for rust stuff
> > > >
> > > > On Thu, Nov 06, 2025 at 02:27:56PM +0000, Pedro Falcato wrote:
> > > > > On Thu, Nov 06, 2025 at 10:46:12AM +0000, Lorenzo Stoakes wrote:
> > > > > >  /*
> > > > > >   * vm_flags in vm_area_struct, see mm_types.h.
> > > > > >   * When changing, update also include/trace/events/mmflags.h
> > > > > > @@ -296,6 +298,7 @@ extern unsigned int kobjsize(const void *objp);
> > > > > >  #define VM_UFFD_MISSING    0
> > > > > >  #endif /* CONFIG_MMU */
> > > > > >  #define VM_PFNMAP  0x00000400      /* Page-ranges managed without 
> > > > > > "struct page", just pure PFN */
> > > > > > +#define VM_MAYBE_GUARD     BIT(VM_MAYBE_GUARD_BIT) /* The VMA 
> > > > > > maybe contains guard regions. */
> > > > >
> > > > > Don't we also need an adjustment on the rust side for this BIT()? 
> > > > > Like we
> > > > > for f04aad36a07c ("mm/ksm: fix flag-dropping behavior in 
> > > > > ksm_madvise").
> > > >
> > > > That's a bit unhelpful if rust can't cope with extremely basic 
> > > > assignments like
> > > > that and we just have to know to add helpers :/
> > > >
> > > > We do BIT() stuff for e.g. VM_HIGH_ARCH_n, VM_UFFD_MINOR_BIT,
> > > > VM_ALLOW_ANY_UNCACHED_BIT, VM_DROPPABLE_BIT and VM_SEALED_BIT too and 
> > > > no such
> > > > helpers there, So not sure if this is required?
> > > >
> > > > Alice - why is it these 'non-trivial' defines were fine but 
> > > > VM_MERGEABLE was
> > > > problematic? That seems strange.
> > > >
> > > > I see [0], so let me build rust here and see if it moans, if it moans 
> > > > I'll add
> > > > it.
> > > >
> > > > [0]:https://lore.kernel.org/oe-kbuild-all/caniq72kohrdgtqe2uvymdldbw6vnkimtdfzkqizsfqv0gly...@mail.gmail.com/
> > >
> > > When you use #define to declare a constant whose right-hand-side
> > > contains a function-like macro such as BIT(), bindgen does not define a
> > > Rust version of that constant. However, VM_MAYBE_GUARD is not referenced
> > > in Rust anywhere, so that isn't a problem.
> > >
> > > It was a problem with VM_MERGEABLE because rust/kernel/mm/virt.rs
> > > references it.
> > >
> > > Note that it's only the combination of #define and function-like macro
> > > that triggers this condition. If the constant is defined using another
> > > mechanism such as enum {}, then bindgen will generate the constant no
> > > matter how complex the right-hand-side is. The problem is that bindgen
> > > can't tell whether a #define is just a constant or not.
> >
> > Thanks, I guess we can update as we go as rust needs. Or I can do a big 
> > update
> > as part of my VMA flag series respin?
>
> Whenever you think is a good time works for me.
>
> I think it would be nice to move those constants so they use enum {}
> instead of #define at some point.

Yeah I will do as part of my VMA series :) which actually is a neater solution
to this in general (and can drop the existing binding helpers then actually).

>
> Alice

Thanks, Lorenzo

Reply via email to