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.
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