This function does not need to accept a page and requiring it to is unnecessary
and misleading.

make_[writable, readable]_device_private_entry() must be passed a
PMD-aligned PFN as they immediately used to obtain a softleaf PMD entry and
the same argument applies to folio_add_[anon, file]_rmap_pmd().

While we are here, update a VM_BUG_ON() to a VM_WARN_ON_ONCE().

No functional change intended.

Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]>
---
 include/linux/swapops.h |  6 +++---
 mm/huge_memory.c        | 16 +++++++---------
 mm/migrate.c            |  2 +-
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/include/linux/swapops.h b/include/linux/swapops.h
index c956bc445ee0..1f3ff3b93e16 100644
--- a/include/linux/swapops.h
+++ b/include/linux/swapops.h
@@ -325,8 +325,8 @@ struct page_vma_mapped_walk;
 extern int set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
                struct page *page);
 
-extern void remove_migration_pmd(struct page_vma_mapped_walk *pvmw,
-               struct page *new);
+void remove_migration_pmd(struct page_vma_mapped_walk *pvmw,
+               struct folio *folio);
 
 extern void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd);
 
@@ -346,7 +346,7 @@ static inline int set_pmd_migration_entry(struct 
page_vma_mapped_walk *pvmw,
 }
 
 static inline void remove_migration_pmd(struct page_vma_mapped_walk *pvmw,
-               struct page *new)
+               struct folio *folio)
 {
        BUILD_BUG();
 }
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 6b0cabd45b2d..47c9c6e32eba 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -5020,9 +5020,8 @@ int set_pmd_migration_entry(struct page_vma_mapped_walk 
*pvmw,
        return 0;
 }
 
-void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)
+void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct folio 
*folio)
 {
-       struct folio *folio = page_folio(new);
        struct vm_area_struct *vma = pvmw->vma;
        struct mm_struct *mm = vma->vm_mm;
        unsigned long address = pvmw->address;
@@ -5058,11 +5057,9 @@ void remove_migration_pmd(struct page_vma_mapped_walk 
*pvmw, struct page *new)
                swp_entry_t entry;
 
                if (pmd_write(pmde))
-                       entry = make_writable_device_private_entry(
-                                                       page_to_pfn(new));
+                       entry = 
make_writable_device_private_entry(folio_pfn(folio));
                else
-                       entry = make_readable_device_private_entry(
-                                                       page_to_pfn(new));
+                       entry = 
make_readable_device_private_entry(folio_pfn(folio));
                pmde = softleaf_to_pmd(entry);
 
                if (pmd_swp_soft_dirty(*pvmw->pmd))
@@ -5077,11 +5074,12 @@ void remove_migration_pmd(struct page_vma_mapped_walk 
*pvmw, struct page *new)
                if (!softleaf_is_migration_read(entry))
                        rmap_flags |= RMAP_EXCLUSIVE;
 
-               folio_add_anon_rmap_pmd(folio, new, vma, haddr, rmap_flags);
+               folio_add_anon_rmap_pmd(folio, &folio->page, vma, haddr, 
rmap_flags);
        } else {
-               folio_add_file_rmap_pmd(folio, new, vma);
+               folio_add_file_rmap_pmd(folio, &folio->page, vma);
        }
-       VM_BUG_ON(pmd_write(pmde) && folio_test_anon(folio) && 
!PageAnonExclusive(new));
+       VM_WARN_ON_ONCE(pmd_write(pmde) && folio_test_anon(folio) &&
+                       !PageAnonExclusive(&folio->page));
        set_pmd_at(mm, haddr, pvmw->pmd, pmde);
 
        /* No need to invalidate - it was non-present before */
diff --git a/mm/migrate.c b/mm/migrate.c
index 222c8c15f782..d08eff028483 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -372,7 +372,7 @@ static bool remove_migration_pte(struct folio *folio,
                if (!pvmw.pte) {
                        VM_BUG_ON_FOLIO(folio_test_hugetlb(folio) ||
                                        !folio_test_pmd_mappable(folio), folio);
-                       remove_migration_pmd(&pvmw, new);
+                       remove_migration_pmd(&pvmw, folio);
                        continue;
                }
 #endif

-- 
2.55.0


Reply via email to