Inter-revision diff: patch 3

Comparing v8 (message) to v4 (message)

--- v8
+++ v4
@@ -1,29 +1,46 @@
-mremap HAVE_MOVE_PMD/PUD optimization time comparison for 1GB region:
-1GB mremap - Source PTE-aligned, Destination PTE-aligned
-  mremap time:      2292772ns
-1GB mremap - Source PMD-aligned, Destination PMD-aligned
-  mremap time:      1158928ns
-1GB mremap - Source PUD-aligned, Destination PUD-aligned
-  mremap time:        63886ns
+pmd/pud_populate is the right interface to be used to set the respective
+page table entries. Some architectures like ppc64 do assume that set_pmd/pud_at
+can only be used to set a hugepage PTE. Since we are not setting up a hugepage
+PTE here, use the pmd/pud_populate interface.
 
 Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
 ---
- arch/powerpc/platforms/Kconfig.cputype | 2 ++
- 1 file changed, 2 insertions(+)
+ mm/mremap.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
 
-diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
-index f998e655b570..be8ceb5bece4 100644
---- a/arch/powerpc/platforms/Kconfig.cputype
-+++ b/arch/powerpc/platforms/Kconfig.cputype
-@@ -101,6 +101,8 @@ config PPC_BOOK3S_64
- 	select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
- 	select ARCH_SUPPORTS_HUGETLBFS
- 	select ARCH_SUPPORTS_NUMA_BALANCING
-+	select HAVE_MOVE_PMD
-+	select HAVE_MOVE_PUD
- 	select IRQ_WORK
- 	select PPC_MM_SLICES
- 	select PPC_HAVE_KUEP
+diff --git a/mm/mremap.c b/mm/mremap.c
+index ec8f840399ed..574287f9bb39 100644
+--- a/mm/mremap.c
++++ b/mm/mremap.c
+@@ -26,6 +26,7 @@
+ 
+ #include <asm/cacheflush.h>
+ #include <asm/tlbflush.h>
++#include <asm/pgalloc.h>
+ 
+ #include "internal.h"
+ 
+@@ -257,9 +258,8 @@ static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr,
+ 	pmd_clear(old_pmd);
+ 
+ 	VM_BUG_ON(!pmd_none(*new_pmd));
++	pmd_populate(mm, new_pmd, (pgtable_t)pmd_page_vaddr(pmd));
+ 
+-	/* Set the new pmd */
+-	set_pmd_at(mm, new_addr, new_pmd, pmd);
+ 	flush_tlb_range(vma, old_addr, old_addr + PMD_SIZE);
+ 	if (new_ptl != old_ptl)
+ 		spin_unlock(new_ptl);
+@@ -306,8 +306,7 @@ static bool move_normal_pud(struct vm_area_struct *vma, unsigned long old_addr,
+ 
+ 	VM_BUG_ON(!pud_none(*new_pud));
+ 
+-	/* Set the new pud */
+-	set_pud_at(mm, new_addr, new_pud, pud);
++	pud_populate(mm, new_pud, (pmd_t *)pud_page_vaddr(pud));
+ 	flush_tlb_range(vma, old_addr, old_addr + PUD_SIZE);
+ 	if (new_ptl != old_ptl)
+ 		spin_unlock(new_ptl);
 -- 
-2.31.1
+2.30.2
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help