On Thu, Apr 24, 2025 at 2:22 PM David Hildenbrand <david@xxxxxxxxxx> wrote: > > On 24.04.25 23:15, Lorenzo Stoakes wrote: > > Right now these are performed in kernel/fork.c which is odd and a violation > > of separation of concerns, as well as preventing us from integrating this > > and related logic into userland VMA testing going forward, and perhaps more > > importantly - enabling us to, in a subsequent commit, make VMA > > allocation/freeing a purely internal mm operation. > > > > There is a fly in the ointment - nommu - mmap.c is not compiled if > > CONFIG_MMU is not set, and there is no sensible place to put these outside > > of that, so we are put in the position of having to duplication some logic s/to duplication/to duplicate > > here. > > > > This isn't ideal, but since nommu is a niche use-case, already duplicates a > > great deal of mmu logic by its nature and we can eliminate code that is not > > applicable to nommu, it seems a worthwhile trade-off. > > > > The intent is to move all this logic to vma.c in a subsequent commit, > > rendering VMA allocation, freeing and duplication mm-internal-only and > > userland testable. > > I'm pretty sure you tried it, but what's the big blocker to have patch > #3 first, so we can avoid the temporary move of the code to mmap.c ? Completely agree with David. I peeked into 4/4 and it seems you want to keep vma.c completely CONFIG_MMU-centric. I know we treat NOMMU as an unwanted child but IMHO it would be much cleaner to move these functions into vma.c from the beginning and have an #ifdef CONFIG_MMU there like this: mm/vma.c /* Functions identical for MMU/NOMMU */ struct vm_area_struct *vm_area_alloc(struct mm_struct *mm) {...} void __init vma_state_init(void) {...} #ifdef CONFIG_MMU static void vm_area_init_from(const struct vm_area_struct *src, struct vm_area_struct *dest) {...} struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig) {...} void vm_area_free(struct vm_area_struct *vma) {...} #else /* CONFIG_MMU */ static void vm_area_init_from(const struct vm_area_struct *src, struct vm_area_struct *dest) {...} struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig) {...} void vm_area_free(struct vm_area_struct *vma) {...} #endif /* CONFIG_MMU */ > > -- > Cheers, > > David / dhildenb >