Re: [PATCH 10/13] mm/vma: convert miscellaneous uses of VMA flags in core mm
"Zi Yan" <[email protected]> Wed, 08 Jul 2026 21:52:19 -0400
| Newsgroups | gmane.comp.freedesktop.xorg.nouveau,gmane.linux.ports.mips,gmane.linux.kernel,gmane.linux.ports.ppc64.devel,gmane.comp.video.dri.devel,gmane.linux.ports.arm.kernel,gmane.linux.kernel.samsung-soc,gmane.comp.freedesktop.xorg.drivers.intel,gmane.linux.ports.arm.msm,gmane.comp.freedesktop.xorg.drivers.freedreno,gmane.linux.ports.arm.rockchip,gmane.linux.ports.tegra,gmane.comp.emulators.xen.devel,gmane.linux.kernel.aio.general,gmane.linux.file-systems,gmane.linux.kernel.mm,gmane.linux.sound |
|---|---|
| Message-ID | <DJTNXVOWGWJ4.3MDNLPMY0Y3RF__29952.2450937488$1783561979$gmane$org@nvidia.com> |
On Thu Jul 2, 2026 at 11:46 AM EDT, Lorenzo Stoakes wrote: > On Thu, Jul 02, 2026 at 09:12:33PM +0800, Lance Yang wrote: >> >> On Mon, Jun 29, 2026 at 08:25:33PM +0100, Lorenzo Stoakes wrote: >> >Update various uses of legacy flags in vma.c and mmap.c to the new >> >vma_flags_t type, updating comments alongside them to be consistent. >> > >> >Also update __install_special_mapping() to rearrange things slightly to >> >accommodate the changes. >> > >> >Signed-off-by: Lorenzo Stoakes <[email protected]> >> >--- >> [...] >> >diff --git a/mm/vma.c b/mm/vma.c >> >index b81c05e67a61..ab2ef0f04420 100644 >> >--- a/mm/vma.c >> >+++ b/mm/vma.c >> >@@ -3417,23 +3417,27 @@ struct vm_area_struct *__install_special_mappin= g( >> > vm_flags_t vm_flags, void *priv, >> > const struct vm_operations_struct *ops) >> > { >> >- int ret; >> >+ vma_flags_t vma_flags =3D legacy_to_vma_flags(vm_flags); >> > struct vm_area_struct *vma; >> >+ int ret; >> > >> > vma =3D vm_area_alloc(mm); >> >- if (unlikely(vma =3D=3D NULL)) >> >+ if (unlikely(!vma)) >> > return ERR_PTR(-ENOMEM); >> > >> >- vma_set_range(vma, addr, addr + len, 0); >> >- vm_flags |=3D vma_flags_to_legacy(mm->def_vma_flags) | VM_DONTEXPAND; >> >+ vma_flags_set_mask(&vma_flags, mm->def_vma_flags); >> >+ vma_flags_set(&vma_flags, VMA_DONTEXPAND_BIT); >> > if (pgtable_supports_soft_dirty()) >> >- vm_flags |=3D VM_SOFTDIRTY; >> >- vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK); >> >+ vma_flags_set(&vma_flags, VMA_SOFTDIRTY_BIT); >> >+ vma_flags_clear_mask(&vma_flags, VMA_LOCKED_MASK); >> >+ vma->flags =3D vma_flags; >> >> Maybe worth a vma_flags_init() helper here to mirror vm_flags_init()? >> With this open-coded, we lose the soft-dirty WARN_ON_ONCE sanity check. >> >> Might be nicer to keep that check in one place ;) > > I really hate all the VMA flag accessors, they conflate things horribly -= we > should be explicitly taking VMA write locks when we need to (and often ki= llable > ones actually) not assuming that a VMA flags accessor does (they should a= t most > assert). > > This case is even more terribly egregious - you are setting flags at an > arbitrary time, why are we asserting something about softdirty? > > You may update them as part of initialisation, maybe not. It's far from a > guarantee and feels like a lazy place to put it. > > BUT obviously it's an oversight not to open code that here, so I'll updat= e the > patch to do that! What do you want to open code here? softdirty WARN_ON_ONCE()? vma_flags gets VMA_SOFTDIRTY_BIT just above vma->flags, why do we need a check after that? BTW, if you think the check is needed, patch 9 will need to be updated, since the same pattern appears in create_init_stack_vma(). > > I want VMA flags to be a clean stateless thing, other than the flags > themselves. Implicit, unrelated, asserts or lock acquisitions in general = should > be done separately IMO. > Anyway, Reviewed-by: Zi Yan <[email protected]> --=20 Best Regards, Yan, Zi