Re: [RFC RFC PATCH] mm: convert VM flags from macros to enum
From: David Hildenbrand
Date: Mon Oct 13 2025 - 09:11:30 EST
On 13.10.25 14:57, Lorenzo Stoakes wrote:
On Mon, Oct 13, 2025 at 02:31:35PM +0200, David Hildenbrand wrote:
On 13.10.25 13:33, Lorenzo Stoakes wrote:
On Mon, Oct 13, 2025 at 01:12:20PM +0200, David Hildenbrand wrote:
On 13.10.25 13:04, Lorenzo Stoakes wrote:
On Sat, Oct 11, 2025 at 05:30:52PM +0800, Ye Liu wrote:
From: Ye Liu <liuye@xxxxxxxxxx>
Hello MM maintainers and drgn community,
This RFC proposes to convert VM_* flags from #define macros to enum
vm_flags. The motivation comes from recent drgn development where we
encountered difficulties in implementing VM flag parsing due to the
current macro-based approach.
This isn't going to work sorry, it's not valid to have flag values as an enum
I don't follow, can you elaborate? IIRC, the compiler will use an integer
type to back the enum that will fit all values.
switch (flags) {
case VAL1:
case VAL2:
etc.
}
Is broken (compiler will say you cover all cases when you don't...)
I assume you mean theoretically, because there is no such code, right?
Right, it's a general point about why enum's are not such a great idea for this.
An enum implies independent values that exhaustively describe all state, however
these flag values are not that - they're intended to be bit fields.
Observe how we use an enum for FOLL_* flags, vm_fault_reason, fault_flag and
probably other things.
FOLL_* flags are an anonymous enum, enum fault_flag is not used as a type
anywhere, nor is vm_fault_reason. So those are both kinda weird as to why we
even name the type (they're in effect anonymous).
Well, there are of course more, even in MM.
For these cases, we indeed don't declare a type, but I am not really
sure if it makes a big difference here today.
I agree that once the flags are actually an opaque object (what you are
planning on to work on), it will be a different story.
But also 'we do X in the kernel' doesn't mean doing X is right :)
Right, but it in general works. It's just nasty here in particular.
--
Cheers
David / dhildenb