On Thu, Apr 24, 2025 at 06:37:39PM -0700, Suren Baghdasaryan wrote: > On Thu, Apr 24, 2025 at 6:22 PM Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > > > 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 */ > > 3/4 and 4/4 look reasonable but they can change substantially > depending on your answer to my suggestion above, so I'll wait for your > answer before moving forward. > Thanks for doing this! > Suren. You're welcome :) Well I will be fixing the issue David raised of course :) but as stated in previous email, I don't feel it makes sense to put nommu stuff in vma.c really. > > > > > > > > > > > > > > > > > -- > > > Cheers, > > > > > > David / dhildenb > > >