[PATCH 28/39] mm: drop some redundant checks around hugetlb VMAs
From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
Date: 2026-09-08 20:15:53
Also in:
bpf, dri-devel, fuse-devel, kvm, kvm-riscv, kvmarm, linux-doc, linux-fbdev, linux-fsdevel, linux-mm, linux-perf-users, linux-rdma, linux-riscv, linux-s390, linux-scsi, linux-sound, linux-trace-kernel, linux-usb, linuxppc-dev, lkml, selinux, sparclinux
Subsystem:
arm64 port (aarch64 architecture), drm drivers, drm drivers and misc gpu patches, kernel virtual machine for arm64 (kvm/arm64), memory management, memory management - memory policy and migration, the rest · Maintainers:
Catalin Marinas, Will Deacon, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Marc Zyngier, Oliver Upton, Andrew Morton, David Hildenbrand, Linus Torvalds
Adjust code which inadvertently perform redundant checks on hugetlb VMAs
and clean them up:
* hugetlb VMAs have VMA_DONTEXPAND_BIT set so a VMA_SPECIAL_FLAGS check
suffices. (migrate_vma_setup() regains an explicit hugetlb test later in
the series, once VMA_SPECIAL_FLAGS is removed.)
* hugetlb VMAs unconditionally set vma->vm_ops, so they are never
anonymous.
* hugetlb VMAs do not set VMA_PFNMAP_BIT so checking for this is redundant.
While we're here also drop a VM_BUG_ON() which the simplified check above
makes unreachable, and use the new VMA flag API.
No functional change intended.
Signed-off-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
---
arch/arm64/kvm/mmu.c | 4 +---
drivers/gpu/drm/drm_gpusvm.c | 3 +--
mm/migrate_device.c | 4 ++--
3 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index a7968f8d24bf..3c1240ffc38d 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -1463,14 +1463,12 @@ static int get_vma_page_shift(struct vm_area_struct *vma, unsigned long hva)
{
unsigned long pa;
- if (vma_is_hugetlb(vma) && !(vma->vm_flags & VM_PFNMAP))
+ if (vma_is_hugetlb(vma))
return huge_page_shift(hstate_vma(vma));
if (!(vma->vm_flags & VM_PFNMAP))
return PAGE_SHIFT;
- VM_BUG_ON(vma_is_hugetlb(vma));
-
pa = (vma->vm_pgoff << PAGE_SHIFT) + (hva - vma->vm_start);
#ifndef __PAGETABLE_PMD_FOLDEDdiff --git a/drivers/gpu/drm/drm_gpusvm.c b/drivers/gpu/drm/drm_gpusvm.c
index a1d4989b0b61..fab34fea99c2 100644
--- a/drivers/gpu/drm/drm_gpusvm.c
+++ b/drivers/gpu/drm/drm_gpusvm.c
@@ -1141,8 +1141,7 @@ drm_gpusvm_range_find_or_insert(struct drm_gpusvm *gpusvm,
* limitations. If/when migrate_vma_* add more support, this logic will
* have to change.
*/
- migrate_devmem = ctx->devmem_possible &&
- vma_is_anonymous(vas) && !vma_is_hugetlb(vas);
+ migrate_devmem = ctx->devmem_possible && vma_is_anonymous(vas);
chunk_size = drm_gpusvm_range_chunk_size(gpusvm, notifier, vas,
fault_addr, gpuva_start,
diff --git a/mm/migrate_device.c b/mm/migrate_device.c
index c38cbaaef5a4..b9c453c28795 100644
--- a/mm/migrate_device.c
+++ b/mm/migrate_device.c
@@ -743,8 +743,8 @@ int migrate_vma_setup(struct migrate_vma *args)
args->start &= PAGE_MASK;
args->end &= PAGE_MASK;
- if (!args->vma || vma_is_hugetlb(args->vma) ||
- (args->vma->vm_flags & VM_SPECIAL) || vma_is_dax(args->vma))
+ if (!args->vma || vma_test_any_mask(args->vma, VMA_SPECIAL_FLAGS) ||
+ vma_is_dax(args->vma))
return -EINVAL;
if (nr_pages <= 0)
return -EINVAL;
--
2.55.0