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.

Acked-by: Marc Zyngier <[email protected]>
Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]>
---
 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_FOLDED
diff --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


Reply via email to