On Thu, May 15, 2025 at 09:17:28PM +0200, David Hildenbrand wrote: > On 15.05.25 20:36, Lorenzo Stoakes wrote: [snip] > > But I don't think we should use vma_set_thp_policy() in these places, we > > should just set the flag, to avoid trying to do a write lock etc. etc., > > plus we want to set the flag in a place that's not a VMA yet in both cases. > > > > So we'd need something like in do_mmap(): > > > > + vm_flags |= mm_implied_vma_flags(mm); > > addr = mmap_region(file, addr, len, vm_flags, pgoff, uf); > > > > Where mm_implied_vma_flags() reads the MMF flags and sees if any imply VMA > > flags. > > > > But we have something for that already don't we? mm->def_flags. > > > > Can't we use that actually? That should work for mmap too? > > Yeah, look at > > commit 1860033237d4be09c5d7382585f0c7229367a534 > Author: Michal Hocko <mhocko@xxxxxxxx> > Date: Mon Jul 10 15:48:02 2017 -0700 > > mm: make PR_SET_THP_DISABLE immediately active > > > Where we moved away from that. As raised, I am not sure I like what we did > with PR_SET_THP_DISABLE. > > And I don't want any new magical prctl like that that add new magical > internal toggles. > > OTOH, I am completely fine with a prctl that just changes the default for > new VMAs (just like applying madvise imemdiately afterwards). I'm also fine > with a prtctl that changes all existing VMAs, but maybe just issuing a > madvise() is the better solution, to cleanly separate it. > > All not too crazy and not too invasive -- piggybagging on VM_HUGEPAGE / > VM_NOHUGEPAGE. > > I can life with that if it solves a use case. I guess you're not suggesting using an MMF_ in this way which overrides VMAs, I think the main reason Michael wanted to not use mm->def_flags here is because doing so doesn't immediately change existing VMAs. But we're doing things at the VMA level anyway, so we could just set: 1. mm->def_flags accordingly (no new MMF flag needed!) 2. update existing VMAs using (possibly improved) madvise() interface And all should work. The get policy stuff could then just check mm->def_flags & VM_HUGEPAGE or VM_NOHUGEPAGE and use this as state. This might be the least egregious way of doing this... Maybe then I could hold my nose and possibly live with truly the most Evil Interface in the History of Computing (TM), prctl() ;) > > -- > Cheers, > > David / dhildenb > Cheers, Lorenzo