* [PATCH -next 0/3] Add support for fast mremap @ 2018-11-03 4:00 Joel Fernandes 2018-11-03 4:00 ` [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) Joel Fernandes ` (3 more replies) 0 siblings, 4 replies; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 4:00 UTC (permalink / raw) To: linux-kernel Cc: Joel Fernandes, linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE 32-BIT AND 64-BIT, hughd, James E.J. Bottomley, kasan-dev, anton.ivanov Hi, Here is the latest "fast mremap" series. This just a repost with Kirill's Acked-bys added. I would like this to be considered for linux -next. I also dropped the CONFIG enablement patch for arm64 since I am yet to test it with the new TLB flushing code that is in very recent kernel releases. (None of my arm64 devices run mainline right now.) so I will post the arm64 enablement once I get to that. The performance numbers in the series are for x86. List of patches in series: (1) mm: select HAVE_MOVE_PMD in x86 for faster mremap (2) mm: speed up mremap by 20x on large regions (v4) v1->v2: Added support for per-arch enablement (Kirill Shutemov) v2->v3: Updated commit message to state the optimization may also run for non-thp type of systems (Daniel Col). v3->v4: Remove useless pmd_lock check (Kirill Shutemov) Rebased ontop of Linus's master, updated perf results based on x86 testing. Added Kirill's Acks. (3) mm: treewide: remove unused address argument from pte_alloc functions (v2) v1->v2: fix arch/um/ prototype which was missed in v1 (Anton Ivanov) update changelog with manual fixups for m68k and microblaze. not included - (4) mm: select HAVE_MOVE_PMD in arm64 for faster mremap This patch is dropped since last posting pending further performance testing on arm64 with new TLB gather updates. See notes in patch titled "mm: speed up mremap by 500x on large regions" for more details. Joel Fernandes (Google) (3): mm: treewide: remove unused address argument from pte_alloc functions (v2) mm: speed up mremap by 20x on large regions (v4) mm: select HAVE_MOVE_PMD in x86 for faster mremap arch/Kconfig | 5 ++ arch/alpha/include/asm/pgalloc.h | 6 +- arch/arc/include/asm/pgalloc.h | 5 +- arch/arm/include/asm/pgalloc.h | 4 +- arch/arm64/include/asm/pgalloc.h | 4 +- arch/hexagon/include/asm/pgalloc.h | 6 +- arch/ia64/include/asm/pgalloc.h | 5 +- arch/m68k/include/asm/mcf_pgalloc.h | 8 +-- arch/m68k/include/asm/motorola_pgalloc.h | 4 +- arch/m68k/include/asm/sun3_pgalloc.h | 6 +- arch/microblaze/include/asm/pgalloc.h | 19 +----- arch/microblaze/mm/pgtable.c | 3 +- arch/mips/include/asm/pgalloc.h | 6 +- arch/nds32/include/asm/pgalloc.h | 5 +- arch/nios2/include/asm/pgalloc.h | 6 +- arch/openrisc/include/asm/pgalloc.h | 5 +- arch/openrisc/mm/ioremap.c | 3 +- arch/parisc/include/asm/pgalloc.h | 4 +- arch/powerpc/include/asm/book3s/32/pgalloc.h | 4 +- arch/powerpc/include/asm/book3s/64/pgalloc.h | 12 ++-- arch/powerpc/include/asm/nohash/32/pgalloc.h | 4 +- arch/powerpc/include/asm/nohash/64/pgalloc.h | 6 +- arch/powerpc/mm/pgtable-book3s64.c | 2 +- arch/powerpc/mm/pgtable_32.c | 4 +- arch/riscv/include/asm/pgalloc.h | 6 +- arch/s390/include/asm/pgalloc.h | 4 +- arch/sh/include/asm/pgalloc.h | 6 +- arch/sparc/include/asm/pgalloc_32.h | 5 +- arch/sparc/include/asm/pgalloc_64.h | 6 +- arch/sparc/mm/init_64.c | 6 +- arch/sparc/mm/srmmu.c | 4 +- arch/um/include/asm/pgalloc.h | 4 +- arch/um/kernel/mem.c | 4 +- arch/unicore32/include/asm/pgalloc.h | 4 +- arch/x86/Kconfig | 1 + arch/x86/include/asm/pgalloc.h | 4 +- arch/x86/mm/pgtable.c | 4 +- arch/xtensa/include/asm/pgalloc.h | 8 +-- include/linux/mm.h | 13 ++-- mm/huge_memory.c | 8 +-- mm/kasan/kasan_init.c | 2 +- mm/memory.c | 17 +++--- mm/migrate.c | 2 +- mm/mremap.c | 62 +++++++++++++++++++- mm/userfaultfd.c | 2 +- virt/kvm/arm/mmu.c | 2 +- 46 files changed, 163 insertions(+), 147 deletions(-) -- 2.19.1.930.g4563a0d9d0-goog ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) 2018-11-03 4:00 [PATCH -next 0/3] Add support for fast mremap Joel Fernandes @ 2018-11-03 4:00 ` Joel Fernandes 2018-11-03 12:51 ` [PATCH -next v2 1/3] mm: treewide: remove unused address argument from pte_alloc functions SF Markus Elfring 2018-11-03 4:00 ` [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) Joel Fernandes ` (2 subsequent siblings) 3 siblings, 1 reply; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 4:00 UTC (permalink / raw) To: linux-kernel Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, Joel Fernandes (Google), linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, sparclinux, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE 32-BIT AND 64-BIT, hughd, James E.J. Bottomley, kasan-dev, anton.i From: "Joel Fernandes (Google)" <joel@joelfernandes.org> This series speeds up mremap(2) syscall by copying page tables at the PMD level even for non-THP systems. There is concern that the extra 'address' argument that mremap passes to pte_alloc may do something subtle architecture related in the future that may make the scheme not work. Also we find that there is no point in passing the 'address' to pte_alloc since its unused. So this patch therefore removes this argument tree-wide resulting in a nice negative diff as well. Also ensuring along the way that the enabled architectures do not do anything funky with 'address' argument that goes unnoticed by the optimization. Build and boot tested on x86-64. Build tested on arm64. The changes were obtained by applying the following Coccinelle script. (thanks Julia for answering all Coccinelle questions!). Following fix ups were done manually: * Removal of address argument from pte_fragment_alloc * Removal of pte_alloc_one_fast definitions from m68k and microblaze. // Options: --include-headers --no-includes // Note: I split the 'identifier fn' line, so if you are manually // running it, please unsplit it so it runs for you. virtual patch @pte_alloc_func_def depends on patch exists@ identifier E2; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; type T2; @@ fn(... - , T2 E2 ) { ... } @pte_alloc_func_proto_noarg depends on patch exists@ type T1, T2, T3, T4; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ ( - T3 fn(T1, T2); + T3 fn(T1); | - T3 fn(T1, T2, T4); + T3 fn(T1, T2); ) @pte_alloc_func_proto depends on patch exists@ identifier E1, E2, E4; type T1, T2, T3, T4; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ ( - T3 fn(T1 E1, T2 E2); + T3 fn(T1 E1); | - T3 fn(T1 E1, T2 E2, T4 E4); + T3 fn(T1 E1, T2 E2); ) @pte_alloc_func_call depends on patch exists@ expression E2; identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; @@ fn(... -, E2 ) @pte_alloc_macro depends on patch exists@ identifier fn =~ "^(__pte_alloc|pte_alloc_one|pte_alloc|__pte_alloc_kernel|pte_alloc_one_kernel)$"; identifier a, b, c; expression e; position p; @@ ( - #define fn(a, b, c) e + #define fn(a, b) e | - #define fn(a, b) e + #define fn(a) e ) Suggested-by: Kirill A. Shutemov <kirill@shutemov.name> Acked-by: Kirill A. Shutemov <kirill@shutemov.name> Cc: Michal Hocko <mhocko@kernel.org> Cc: Julia Lawall <Julia.Lawall@lip6.fr> Cc: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> --- arch/alpha/include/asm/pgalloc.h | 6 +++--- arch/arc/include/asm/pgalloc.h | 5 ++--- arch/arm/include/asm/pgalloc.h | 4 ++-- arch/arm64/include/asm/pgalloc.h | 4 ++-- arch/hexagon/include/asm/pgalloc.h | 6 ++---- arch/ia64/include/asm/pgalloc.h | 5 ++--- arch/m68k/include/asm/mcf_pgalloc.h | 8 ++------ arch/m68k/include/asm/motorola_pgalloc.h | 4 ++-- arch/m68k/include/asm/sun3_pgalloc.h | 6 ++---- arch/microblaze/include/asm/pgalloc.h | 19 ++----------------- arch/microblaze/mm/pgtable.c | 3 +-- arch/mips/include/asm/pgalloc.h | 6 ++---- arch/nds32/include/asm/pgalloc.h | 5 ++--- arch/nios2/include/asm/pgalloc.h | 6 ++---- arch/openrisc/include/asm/pgalloc.h | 5 ++--- arch/openrisc/mm/ioremap.c | 3 +-- arch/parisc/include/asm/pgalloc.h | 4 ++-- arch/powerpc/include/asm/book3s/32/pgalloc.h | 4 ++-- arch/powerpc/include/asm/book3s/64/pgalloc.h | 12 +++++------- arch/powerpc/include/asm/nohash/32/pgalloc.h | 4 ++-- arch/powerpc/include/asm/nohash/64/pgalloc.h | 6 ++---- arch/powerpc/mm/pgtable-book3s64.c | 2 +- arch/powerpc/mm/pgtable_32.c | 4 ++-- arch/riscv/include/asm/pgalloc.h | 6 ++---- arch/s390/include/asm/pgalloc.h | 4 ++-- arch/sh/include/asm/pgalloc.h | 6 ++---- arch/sparc/include/asm/pgalloc_32.h | 5 ++--- arch/sparc/include/asm/pgalloc_64.h | 6 ++---- arch/sparc/mm/init_64.c | 6 ++---- arch/sparc/mm/srmmu.c | 4 ++-- arch/um/include/asm/pgalloc.h | 4 ++-- arch/um/kernel/mem.c | 4 ++-- arch/unicore32/include/asm/pgalloc.h | 4 ++-- arch/x86/include/asm/pgalloc.h | 4 ++-- arch/x86/mm/pgtable.c | 4 ++-- arch/xtensa/include/asm/pgalloc.h | 8 +++----- include/linux/mm.h | 13 ++++++------- mm/huge_memory.c | 8 ++++---- mm/kasan/kasan_init.c | 2 +- mm/memory.c | 17 ++++++++--------- mm/migrate.c | 2 +- mm/mremap.c | 2 +- mm/userfaultfd.c | 2 +- virt/kvm/arm/mmu.c | 2 +- 44 files changed, 97 insertions(+), 147 deletions(-) diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h index ab3e3a8638fb..02f9f91bb4f0 100644 --- a/arch/alpha/include/asm/pgalloc.h +++ b/arch/alpha/include/asm/pgalloc.h @@ -52,7 +52,7 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd) } static inline pte_t * -pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); return pte; @@ -65,9 +65,9 @@ pte_free_kernel(struct mm_struct *mm, pte_t *pte) } static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long address) +pte_alloc_one(struct mm_struct *mm) { - pte_t *pte = pte_alloc_one_kernel(mm, address); + pte_t *pte = pte_alloc_one_kernel(mm); struct page *page; if (!pte) diff --git a/arch/arc/include/asm/pgalloc.h b/arch/arc/include/asm/pgalloc.h index 3749234b7419..9c9b5a5ebf2e 100644 --- a/arch/arc/include/asm/pgalloc.h +++ b/arch/arc/include/asm/pgalloc.h @@ -90,8 +90,7 @@ static inline int __get_order_pte(void) return get_order(PTRS_PER_PTE * sizeof(pte_t)); } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -102,7 +101,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, } static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long address) +pte_alloc_one(struct mm_struct *mm) { pgtable_t pte_pg; struct page *page; diff --git a/arch/arm/include/asm/pgalloc.h b/arch/arm/include/asm/pgalloc.h index 2d7344f0e208..17ab72f0cc4e 100644 --- a/arch/arm/include/asm/pgalloc.h +++ b/arch/arm/include/asm/pgalloc.h @@ -81,7 +81,7 @@ static inline void clean_pte_table(pte_t *pte) * +------------+ */ static inline pte_t * -pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) +pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -93,7 +93,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) } static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long addr) +pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h index 2e05bcd944c8..52fa47c73bf0 100644 --- a/arch/arm64/include/asm/pgalloc.h +++ b/arch/arm64/include/asm/pgalloc.h @@ -91,13 +91,13 @@ extern pgd_t *pgd_alloc(struct mm_struct *mm); extern void pgd_free(struct mm_struct *mm, pgd_t *pgdp); static inline pte_t * -pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) +pte_alloc_one_kernel(struct mm_struct *mm) { return (pte_t *)__get_free_page(PGALLOC_GFP); } static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long addr) +pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/hexagon/include/asm/pgalloc.h b/arch/hexagon/include/asm/pgalloc.h index eeebf862c46c..d36183887b60 100644 --- a/arch/hexagon/include/asm/pgalloc.h +++ b/arch/hexagon/include/asm/pgalloc.h @@ -59,8 +59,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_page((unsigned long) pgd); } -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *pte; @@ -75,8 +74,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm, } /* _kernel variant gets to use a different allocator */ -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { gfp_t flags = GFP_KERNEL | __GFP_ZERO; return (pte_t *) __get_free_page(flags); diff --git a/arch/ia64/include/asm/pgalloc.h b/arch/ia64/include/asm/pgalloc.h index 3ee5362f2661..c9e481023c25 100644 --- a/arch/ia64/include/asm/pgalloc.h +++ b/arch/ia64/include/asm/pgalloc.h @@ -83,7 +83,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte) pmd_val(*pmd_entry) = __pa(pte); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page; void *pg; @@ -99,8 +99,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr) return page; } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long addr) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return quicklist_alloc(0, GFP_KERNEL, NULL); } diff --git a/arch/m68k/include/asm/mcf_pgalloc.h b/arch/m68k/include/asm/mcf_pgalloc.h index 12fe700632f4..4399d712f6db 100644 --- a/arch/m68k/include/asm/mcf_pgalloc.h +++ b/arch/m68k/include/asm/mcf_pgalloc.h @@ -12,8 +12,7 @@ extern inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) extern const char bad_pmd_string[]; -extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { unsigned long page = __get_free_page(GFP_DMA); @@ -32,8 +31,6 @@ extern inline pmd_t *pmd_alloc_kernel(pgd_t *pgd, unsigned long address) #define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) -#define pte_alloc_one_fast(mm, addr) pte_alloc_one(mm, addr) - #define pmd_populate(mm, pmd, page) (pmd_val(*pmd) = \ (unsigned long)(page_address(page))) @@ -50,8 +47,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page, #define __pmd_free_tlb(tlb, pmd, address) do { } while (0) -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *page = alloc_pages(GFP_DMA, 0); pte_t *pte; diff --git a/arch/m68k/include/asm/motorola_pgalloc.h b/arch/m68k/include/asm/motorola_pgalloc.h index 7859a86319cf..d04d9ba9b976 100644 --- a/arch/m68k/include/asm/motorola_pgalloc.h +++ b/arch/m68k/include/asm/motorola_pgalloc.h @@ -8,7 +8,7 @@ extern pmd_t *get_pointer_table(void); extern int free_pointer_table(pmd_t *); -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -28,7 +28,7 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) free_page((unsigned long) pte); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page; pte_t *pte; diff --git a/arch/m68k/include/asm/sun3_pgalloc.h b/arch/m68k/include/asm/sun3_pgalloc.h index 11485d38de4e..1456c5eecbd9 100644 --- a/arch/m68k/include/asm/sun3_pgalloc.h +++ b/arch/m68k/include/asm/sun3_pgalloc.h @@ -35,8 +35,7 @@ do { \ tlb_remove_page((tlb), pte); \ } while (0) -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { unsigned long page = __get_free_page(GFP_KERNEL); @@ -47,8 +46,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, return (pte_t *) (page); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page = alloc_pages(GFP_KERNEL, 0); diff --git a/arch/microblaze/include/asm/pgalloc.h b/arch/microblaze/include/asm/pgalloc.h index 7c89390c0c13..f4cc9ffc449e 100644 --- a/arch/microblaze/include/asm/pgalloc.h +++ b/arch/microblaze/include/asm/pgalloc.h @@ -108,10 +108,9 @@ static inline void free_pgd_slow(pgd_t *pgd) #define pmd_alloc_one_fast(mm, address) ({ BUG(); ((pmd_t *)1); }) #define pmd_alloc_one(mm, address) ({ BUG(); ((pmd_t *)2); }) -extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm); -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *ptepage; @@ -132,20 +131,6 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm, return ptepage; } -static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, - unsigned long address) -{ - unsigned long *ret; - - ret = pte_quicklist; - if (ret != NULL) { - pte_quicklist = (unsigned long *)(*ret); - ret[0] = 0; - pgtable_cache_size--; - } - return (pte_t *)ret; -} - static inline void pte_free_fast(pte_t *pte) { *(unsigned long **)pte = pte_quicklist; diff --git a/arch/microblaze/mm/pgtable.c b/arch/microblaze/mm/pgtable.c index 7f525962cdfa..c2ce1e42b888 100644 --- a/arch/microblaze/mm/pgtable.c +++ b/arch/microblaze/mm/pgtable.c @@ -235,8 +235,7 @@ unsigned long iopa(unsigned long addr) return pa; } -__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; if (mem_init_done) { diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h index 39b9f311c4ef..27808d9461f4 100644 --- a/arch/mips/include/asm/pgalloc.h +++ b/arch/mips/include/asm/pgalloc.h @@ -50,14 +50,12 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_pages((unsigned long)pgd, PGD_ORDER); } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return (pte_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, PTE_ORDER); } -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/nds32/include/asm/pgalloc.h b/arch/nds32/include/asm/pgalloc.h index 27448869131a..3c5fee5b5759 100644 --- a/arch/nds32/include/asm/pgalloc.h +++ b/arch/nds32/include/asm/pgalloc.h @@ -22,8 +22,7 @@ extern void pgd_free(struct mm_struct *mm, pgd_t * pgd); #define check_pgt_cache() do { } while (0) -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long addr) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -34,7 +33,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, return pte; } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { pgtable_t pte; diff --git a/arch/nios2/include/asm/pgalloc.h b/arch/nios2/include/asm/pgalloc.h index bb47d08c8ef7..3a149ead1207 100644 --- a/arch/nios2/include/asm/pgalloc.h +++ b/arch/nios2/include/asm/pgalloc.h @@ -37,8 +37,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_pages((unsigned long)pgd, PGD_ORDER); } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -47,8 +46,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, return pte; } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/openrisc/include/asm/pgalloc.h b/arch/openrisc/include/asm/pgalloc.h index 8999b9226512..149c82ee4b8b 100644 --- a/arch/openrisc/include/asm/pgalloc.h +++ b/arch/openrisc/include/asm/pgalloc.h @@ -70,10 +70,9 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_page((unsigned long)pgd); } -extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm); -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *pte; pte = alloc_pages(GFP_KERNEL, 0); diff --git a/arch/openrisc/mm/ioremap.c b/arch/openrisc/mm/ioremap.c index c9697529b3f0..270d1c9bc0d6 100644 --- a/arch/openrisc/mm/ioremap.c +++ b/arch/openrisc/mm/ioremap.c @@ -118,8 +118,7 @@ EXPORT_SYMBOL(iounmap); * the memblock infrastructure. */ -pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +pte_t __ref *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h index cf13275f7c6d..d05c678c77c4 100644 --- a/arch/parisc/include/asm/pgalloc.h +++ b/arch/parisc/include/asm/pgalloc.h @@ -122,7 +122,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte) #define pmd_pgtable(pmd) pmd_page(pmd) static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long address) +pte_alloc_one(struct mm_struct *mm) { struct page *page = alloc_page(GFP_KERNEL|__GFP_ZERO); if (!page) @@ -135,7 +135,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address) } static inline pte_t * -pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) +pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); return pte; diff --git a/arch/powerpc/include/asm/book3s/32/pgalloc.h b/arch/powerpc/include/asm/book3s/32/pgalloc.h index 82e44b1a00ae..af9e13555d95 100644 --- a/arch/powerpc/include/asm/book3s/32/pgalloc.h +++ b/arch/powerpc/include/asm/book3s/32/pgalloc.h @@ -82,8 +82,8 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, #define pmd_pgtable(pmd) pmd_page(pmd) #endif -extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); -extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm); +extern pgtable_t pte_alloc_one(struct mm_struct *mm); static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { diff --git a/arch/powerpc/include/asm/book3s/64/pgalloc.h b/arch/powerpc/include/asm/book3s/64/pgalloc.h index 391ed2c3b697..8f1d92e99fe5 100644 --- a/arch/powerpc/include/asm/book3s/64/pgalloc.h +++ b/arch/powerpc/include/asm/book3s/64/pgalloc.h @@ -42,7 +42,7 @@ extern struct kmem_cache *pgtable_cache[]; pgtable_cache[(shift) - 1]; \ }) -extern pte_t *pte_fragment_alloc(struct mm_struct *, unsigned long, int); +extern pte_t *pte_fragment_alloc(struct mm_struct *, int); extern pmd_t *pmd_fragment_alloc(struct mm_struct *, unsigned long); extern void pte_fragment_free(unsigned long *, int); extern void pmd_fragment_free(unsigned long *); @@ -192,16 +192,14 @@ static inline pgtable_t pmd_pgtable(pmd_t pmd) return (pgtable_t)pmd_page_vaddr(pmd); } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { - return (pte_t *)pte_fragment_alloc(mm, address, 1); + return (pte_t *)pte_fragment_alloc(mm, 1); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { - return (pgtable_t)pte_fragment_alloc(mm, address, 0); + return (pgtable_t)pte_fragment_alloc(mm, 0); } static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) diff --git a/arch/powerpc/include/asm/nohash/32/pgalloc.h b/arch/powerpc/include/asm/nohash/32/pgalloc.h index 8825953c225b..16623f53f0d4 100644 --- a/arch/powerpc/include/asm/nohash/32/pgalloc.h +++ b/arch/powerpc/include/asm/nohash/32/pgalloc.h @@ -83,8 +83,8 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, #define pmd_pgtable(pmd) pmd_page(pmd) #endif -extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); -extern pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm); +extern pgtable_t pte_alloc_one(struct mm_struct *mm); static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { diff --git a/arch/powerpc/include/asm/nohash/64/pgalloc.h b/arch/powerpc/include/asm/nohash/64/pgalloc.h index e2d62d033708..2e7e0230edf4 100644 --- a/arch/powerpc/include/asm/nohash/64/pgalloc.h +++ b/arch/powerpc/include/asm/nohash/64/pgalloc.h @@ -96,14 +96,12 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page; pte_t *pte; diff --git a/arch/powerpc/mm/pgtable-book3s64.c b/arch/powerpc/mm/pgtable-book3s64.c index 9f93c9f985c5..6f9d434b0a4c 100644 --- a/arch/powerpc/mm/pgtable-book3s64.c +++ b/arch/powerpc/mm/pgtable-book3s64.c @@ -384,7 +384,7 @@ static pte_t *__alloc_for_ptecache(struct mm_struct *mm, int kernel) return (pte_t *)ret; } -pte_t *pte_fragment_alloc(struct mm_struct *mm, unsigned long vmaddr, int kernel) +pte_t *pte_fragment_alloc(struct mm_struct *mm, int kernel) { pte_t *pte; diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index bda3c6f1bd32..1d8e2d98db98 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c @@ -43,7 +43,7 @@ EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ extern char etext[], _stext[], _sinittext[], _einittext[]; -__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +__ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -57,7 +57,7 @@ __ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) return pte; } -pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) +pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *ptepage; diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h index a79ed5faff3a..94043cf83c90 100644 --- a/arch/riscv/include/asm/pgalloc.h +++ b/arch/riscv/include/asm/pgalloc.h @@ -82,15 +82,13 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) #endif /* __PAGETABLE_PMD_FOLDED */ -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return (pte_t *)__get_free_page( GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_ZERO); } -static inline struct page *pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h index f0f9bcf94c03..ce2ca8cbd2ec 100644 --- a/arch/s390/include/asm/pgalloc.h +++ b/arch/s390/include/asm/pgalloc.h @@ -139,8 +139,8 @@ static inline void pmd_populate(struct mm_struct *mm, /* * page table entry allocation/free routines. */ -#define pte_alloc_one_kernel(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) -#define pte_alloc_one(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) +#define pte_alloc_one_kernel(mm) ((pte_t *)page_table_alloc(mm)) +#define pte_alloc_one(mm) ((pte_t *)page_table_alloc(mm)) #define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte) #define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte) diff --git a/arch/sh/include/asm/pgalloc.h b/arch/sh/include/asm/pgalloc.h index ed053a359ab7..8ad73cb31121 100644 --- a/arch/sh/include/asm/pgalloc.h +++ b/arch/sh/include/asm/pgalloc.h @@ -32,14 +32,12 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, /* * Allocate and free page tables. */ -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL); } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page; void *pg; diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h index 90459481c6c7..282be50a4adf 100644 --- a/arch/sparc/include/asm/pgalloc_32.h +++ b/arch/sparc/include/asm/pgalloc_32.h @@ -58,10 +58,9 @@ void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep); void pmd_set(pmd_t *pmdp, pte_t *ptep); #define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE) -pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address); +pgtable_t pte_alloc_one(struct mm_struct *mm); -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return srmmu_get_nocache(PTE_SIZE, PTE_SIZE); } diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h index 874632f34f62..48abccba4991 100644 --- a/arch/sparc/include/asm/pgalloc_64.h +++ b/arch/sparc/include/asm/pgalloc_64.h @@ -60,10 +60,8 @@ static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) kmem_cache_free(pgtable_cache, pmd); } -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address); -pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address); +pte_t *pte_alloc_one_kernel(struct mm_struct *mm); +pgtable_t pte_alloc_one(struct mm_struct *mm); void pte_free_kernel(struct mm_struct *mm, pte_t *pte); void pte_free(struct mm_struct *mm, pgtable_t ptepage); diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index 3c8aac21f426..b4221d3727d0 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -2925,8 +2925,7 @@ void __flush_tlb_all(void) : : "r" (pstate)); } -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); pte_t *pte = NULL; @@ -2937,8 +2936,7 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, return pte; } -pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long address) +pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *page = alloc_page(GFP_KERNEL | __GFP_ZERO); if (!page) diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index a6142c5abf61..b609362e846f 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c @@ -364,12 +364,12 @@ pgd_t *get_pgd_fast(void) * Alignments up to the page size are the same for physical and virtual * addresses of the nocache area. */ -pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) +pgtable_t pte_alloc_one(struct mm_struct *mm) { unsigned long pte; struct page *page; - if ((pte = (unsigned long)pte_alloc_one_kernel(mm, address)) == 0) + if ((pte = (unsigned long)pte_alloc_one_kernel(mm)) == 0) return NULL; page = pfn_to_page(__nocache_pa(pte) >> PAGE_SHIFT); if (!pgtable_page_ctor(page)) { diff --git a/arch/um/include/asm/pgalloc.h b/arch/um/include/asm/pgalloc.h index bf90b2aa2002..99eb5682792a 100644 --- a/arch/um/include/asm/pgalloc.h +++ b/arch/um/include/asm/pgalloc.h @@ -25,8 +25,8 @@ extern pgd_t *pgd_alloc(struct mm_struct *); extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); -extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); -extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *); +extern pgtable_t pte_alloc_one(struct mm_struct *); static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c index 1067469ba2ea..e494c7719b24 100644 --- a/arch/um/kernel/mem.c +++ b/arch/um/kernel/mem.c @@ -199,7 +199,7 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_page((unsigned long) pgd); } -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -207,7 +207,7 @@ pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) return pte; } -pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) +pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/unicore32/include/asm/pgalloc.h b/arch/unicore32/include/asm/pgalloc.h index f0fdb268f8f2..7cceabecf4e3 100644 --- a/arch/unicore32/include/asm/pgalloc.h +++ b/arch/unicore32/include/asm/pgalloc.h @@ -34,7 +34,7 @@ extern void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd); * Allocate one PTE table. */ static inline pte_t * -pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) +pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *pte; @@ -46,7 +46,7 @@ pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) } static inline pgtable_t -pte_alloc_one(struct mm_struct *mm, unsigned long addr) +pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h index ec7f43327033..f6861b700f5e 100644 --- a/arch/x86/include/asm/pgalloc.h +++ b/arch/x86/include/asm/pgalloc.h @@ -47,8 +47,8 @@ extern gfp_t __userpte_alloc_gfp; extern pgd_t *pgd_alloc(struct mm_struct *); extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); -extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); -extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); +extern pte_t *pte_alloc_one_kernel(struct mm_struct *); +extern pgtable_t pte_alloc_one(struct mm_struct *); /* Should really implement gc for free page table pages. This could be done with a reference count in struct page. */ diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index 59274e2c1ac4..27f63a74b45d 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -23,12 +23,12 @@ EXPORT_SYMBOL(physical_mask); gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP; -pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { return (pte_t *)__get_free_page(PGALLOC_GFP & ~__GFP_ACCOUNT); } -pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) +pgtable_t pte_alloc_one(struct mm_struct *mm) { struct page *pte; diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h index 1065bc8bcae5..b3b388ff2f01 100644 --- a/arch/xtensa/include/asm/pgalloc.h +++ b/arch/xtensa/include/asm/pgalloc.h @@ -38,8 +38,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) free_page((unsigned long)pgd); } -static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, - unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) { pte_t *ptep; int i; @@ -52,13 +51,12 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, return ptep; } -static inline pgtable_t pte_alloc_one(struct mm_struct *mm, - unsigned long addr) +static inline pgtable_t pte_alloc_one(struct mm_struct *mm) { pte_t *pte; struct page *page; - pte = pte_alloc_one_kernel(mm, addr); + pte = pte_alloc_one_kernel(mm); if (!pte) return NULL; page = virt_to_page(pte); diff --git a/include/linux/mm.h b/include/linux/mm.h index fcf9cc9d535f..8151c00df8c1 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1809,8 +1809,8 @@ static inline void mm_inc_nr_ptes(struct mm_struct *mm) {} static inline void mm_dec_nr_ptes(struct mm_struct *mm) {} #endif -int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address); -int __pte_alloc_kernel(pmd_t *pmd, unsigned long address); +int __pte_alloc(struct mm_struct *mm, pmd_t *pmd); +int __pte_alloc_kernel(pmd_t *pmd); /* * The following ifdef needed to get the 4level-fixup.h header to work. @@ -1948,18 +1948,17 @@ static inline void pgtable_page_dtor(struct page *page) pte_unmap(pte); \ } while (0) -#define pte_alloc(mm, pmd, address) \ - (unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, pmd, address)) +#define pte_alloc(mm, pmd) (unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, pmd)) #define pte_alloc_map(mm, pmd, address) \ - (pte_alloc(mm, pmd, address) ? NULL : pte_offset_map(pmd, address)) + (pte_alloc(mm, pmd) ? NULL : pte_offset_map(pmd, address)) #define pte_alloc_map_lock(mm, pmd, address, ptlp) \ - (pte_alloc(mm, pmd, address) ? \ + (pte_alloc(mm, pmd) ? \ NULL : pte_offset_map_lock(mm, pmd, address, ptlp)) #define pte_alloc_kernel(pmd, address) \ - ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd, address))? \ + ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd))? \ NULL: pte_offset_kernel(pmd, address)) #if USE_SPLIT_PMD_PTLOCKS diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 4e4ef8fa479d..2315fb7ecac3 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -558,7 +558,7 @@ static vm_fault_t __do_huge_pmd_anonymous_page(struct vm_fault *vmf, return VM_FAULT_FALLBACK; } - pgtable = pte_alloc_one(vma->vm_mm, haddr); + pgtable = pte_alloc_one(vma->vm_mm); if (unlikely(!pgtable)) { ret = VM_FAULT_OOM; goto release; @@ -683,7 +683,7 @@ vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf) struct page *zero_page; bool set; vm_fault_t ret; - pgtable = pte_alloc_one(vma->vm_mm, haddr); + pgtable = pte_alloc_one(vma->vm_mm); if (unlikely(!pgtable)) return VM_FAULT_OOM; zero_page = mm_get_huge_zero_page(vma->vm_mm); @@ -772,7 +772,7 @@ vm_fault_t vmf_insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr, return VM_FAULT_SIGBUS; if (arch_needs_pgtable_deposit()) { - pgtable = pte_alloc_one(vma->vm_mm, addr); + pgtable = pte_alloc_one(vma->vm_mm); if (!pgtable) return VM_FAULT_OOM; } @@ -908,7 +908,7 @@ int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm, if (!vma_is_anonymous(vma)) return 0; - pgtable = pte_alloc_one(dst_mm, addr); + pgtable = pte_alloc_one(dst_mm); if (unlikely(!pgtable)) goto out; diff --git a/mm/kasan/kasan_init.c b/mm/kasan/kasan_init.c index c7550eb65922..5edb8b29a827 100644 --- a/mm/kasan/kasan_init.c +++ b/mm/kasan/kasan_init.c @@ -120,7 +120,7 @@ static int __ref zero_pmd_populate(pud_t *pud, unsigned long addr, pte_t *p; if (slab_is_available()) - p = pte_alloc_one_kernel(&init_mm, addr); + p = pte_alloc_one_kernel(&init_mm); else p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); if (!p) diff --git a/mm/memory.c b/mm/memory.c index 4ad2d293ddc2..a9f2eb5bd1d9 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -400,10 +400,10 @@ void free_pgtables(struct mmu_gather *tlb, struct vm_area_struct *vma, } } -int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address) +int __pte_alloc(struct mm_struct *mm, pmd_t *pmd) { spinlock_t *ptl; - pgtable_t new = pte_alloc_one(mm, address); + pgtable_t new = pte_alloc_one(mm); if (!new) return -ENOMEM; @@ -434,9 +434,9 @@ int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address) return 0; } -int __pte_alloc_kernel(pmd_t *pmd, unsigned long address) +int __pte_alloc_kernel(pmd_t *pmd) { - pte_t *new = pte_alloc_one_kernel(&init_mm, address); + pte_t *new = pte_alloc_one_kernel(&init_mm); if (!new) return -ENOMEM; @@ -2895,7 +2895,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf) * * Here we only have down_read(mmap_sem). */ - if (pte_alloc(vma->vm_mm, vmf->pmd, vmf->address)) + if (pte_alloc(vma->vm_mm, vmf->pmd)) return VM_FAULT_OOM; /* See the comment in pte_alloc_one_map() */ @@ -3042,7 +3042,7 @@ static vm_fault_t pte_alloc_one_map(struct vm_fault *vmf) pmd_populate(vma->vm_mm, vmf->pmd, vmf->prealloc_pte); spin_unlock(vmf->ptl); vmf->prealloc_pte = NULL; - } else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd, vmf->address))) { + } else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd))) { return VM_FAULT_OOM; } map_pte: @@ -3121,7 +3121,7 @@ static vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page) * related to pte entry. Use the preallocated table for that. */ if (arch_needs_pgtable_deposit() && !vmf->prealloc_pte) { - vmf->prealloc_pte = pte_alloc_one(vma->vm_mm, vmf->address); + vmf->prealloc_pte = pte_alloc_one(vma->vm_mm); if (!vmf->prealloc_pte) return VM_FAULT_OOM; smp_wmb(); /* See comment in __pte_alloc() */ @@ -3359,8 +3359,7 @@ static vm_fault_t do_fault_around(struct vm_fault *vmf) start_pgoff + nr_pages - 1); if (pmd_none(*vmf->pmd)) { - vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm, - vmf->address); + vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm); if (!vmf->prealloc_pte) goto out; smp_wmb(); /* See comment in __pte_alloc() */ diff --git a/mm/migrate.c b/mm/migrate.c index f7e4bfdc13b7..1777a9327dbf 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -2599,7 +2599,7 @@ static void migrate_vma_insert_page(struct migrate_vma *migrate, * * Here we only have down_read(mmap_sem). */ - if (pte_alloc(mm, pmdp, addr)) + if (pte_alloc(mm, pmdp)) goto abort; /* See the comment in pte_alloc_one_map() */ diff --git a/mm/mremap.c b/mm/mremap.c index 7f9f9180e401..7c9ab747f19d 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -238,7 +238,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma, if (pmd_trans_unstable(old_pmd)) continue; } - if (pte_alloc(new_vma->vm_mm, new_pmd, new_addr)) + if (pte_alloc(new_vma->vm_mm, new_pmd)) break; next = (new_addr + PMD_SIZE) & PMD_MASK; if (extent > next - new_addr) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 5029f241908f..f05c8bc38ca5 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -513,7 +513,7 @@ static __always_inline ssize_t __mcopy_atomic(struct mm_struct *dst_mm, break; } if (unlikely(pmd_none(dst_pmdval)) && - unlikely(__pte_alloc(dst_mm, dst_pmd, dst_addr))) { + unlikely(__pte_alloc(dst_mm, dst_pmd))) { err = -ENOMEM; break; } diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c index 5eca48bdb1a6..0a36b1708b76 100644 --- a/virt/kvm/arm/mmu.c +++ b/virt/kvm/arm/mmu.c @@ -628,7 +628,7 @@ static int create_hyp_pmd_mappings(pud_t *pud, unsigned long start, BUG_ON(pmd_sect(*pmd)); if (pmd_none(*pmd)) { - pte = pte_alloc_one_kernel(NULL, addr); + pte = pte_alloc_one_kernel(NULL); if (!pte) { kvm_err("Cannot allocate Hyp pte\n"); return -ENOMEM; -- 2.19.1.930.g4563a0d9d0-goog ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH -next v2 1/3] mm: treewide: remove unused address argument from pte_alloc functions 2018-11-03 4:00 ` [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) Joel Fernandes @ 2018-11-03 12:51 ` SF Markus Elfring 0 siblings, 0 replies; 13+ messages in thread From: SF Markus Elfring @ 2018-11-03 12:51 UTC (permalink / raw) To: Joel Fernandes, kernel-janitors Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, Lokesh Gidra, sparclinux, linux-riscv, Anton Ivanov, Jonas Bonn, linux-s390, Daniel Colascione, Yoshinori Sato, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Hugh Dickins, James E. J. Bottomley, kasan-dev, kvmarm PiDigKYgVGhlcmUgaXMgY29uY2VybiB0aGF0IOKApgoKRG9lcyB0aGlzIHdvcmRpbmcgbmVlZCBh IHNtYWxsIGFkanVzdG1lbnQ/CgoKPiBUaGUgY2hhbmdlcyB3ZXJlIG9idGFpbmVkIGJ5IGFwcGx5 aW5nIHRoZSBmb2xsb3dpbmcgQ29jY2luZWxsZSBzY3JpcHQuCgpJIHdvdWxkIGZpbmQgaXQgbmlj ZXIgaWYgcHJldmlvdXMgcGF0Y2ggcmV2aWV3IGNvbW1lbnRzIHdpbGwgdHJpZ2dlcgpmdXJ0aGVy IHVzZWZ1bCBlZmZlY3RzIGhlcmUuCmh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gv MTA2Mzc3MDMvIzIyMjY1MjAzCmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4cHBjLWRldi8w M2I1MjRmMy01ZjNhLWJhYTAtMjI1NC05YzU4ODEwM2QyZDZAdXNlcnMuc291cmNlZm9yZ2UubmV0 LwpodHRwczovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2xpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMu b3JnL21zZzE0MDAwOS5odG1sCgoKSWYgeW91IGhhdmUgZ290IGRpZmZpY3VsdGllcyB3aXRoIHRo ZSB1c2FnZSBvZiBhZHZhbmNlZCByZWd1bGFyIGV4cHJlc3Npb25zCmZvciBTbVBMIGNvbnN0cmFp bnRzLCBJIHN1Z2dlc3QgdG8gdXNlIGRlc2lyZWQgZnVuY3Rpb24gbmFtZXMgaW4gU21QTCBsaXN0 cwpvciBkaXNqdW5jdGlvbnMgaW5zdGVhZCBiZWNhdXNlIG9mIGRpZmZlcmVudCBydW4gdGltZSBj aGFyYWN0ZXJpc3RpY3MKZm9yIHN1Y2ggYSBzb3VyY2UgY29kZSB0cmFuc2Zvcm1hdGlvbiBhcHBy b2FjaC4KCgo+IC8vIE5vdGU6IEkgc3BsaXQgdGhlICdpZGVudGlmaWVyIGZuJyBsaW5lLCBzbyBp ZiB5b3UgYXJlIG1hbnVhbGx5Cj4gLy8gcnVubmluZyBpdCwgcGxlYXNlIHVuc3BsaXQgaXQgc28g aXQgcnVucyBmb3IgeW91LgoKUGxlYXNlIGRlbGV0ZSB0aGlzIHF1ZXN0aW9uYWJsZSBjb21tZW50 LgoKKiBUaGUgc2VtYW50aWMgcGF0Y2ggbGFuZ3VhZ2Ugc2hvdWxkIGhhbmRsZSB0aGUgbWVudGlv bmVkIGNvZGUgZm9ybWF0dGluZy4KKiBZb3UgY2FuIHVzZSBtdWx0aS1saW5lIHJlZ3VsYXIgZXhw cmVzc2lvbnMgKGlmIGl0IHdvdWxkIGJlIGRlc2lyZWQpLgoKCj4gQHB0ZV9hbGxvY19mdW5jX2Rl ZiBkZXBlbmRzIG9uIHBhdGNoIGV4aXN0c0AKPiBpZGVudGlmaWVyIEUyOwo+IGlkZW50aWZpZXIg Zm4gPX4KCkhvdyBkbyB5b3UgdGhpbmsgYWJvdXQgdG8gYXZvaWQgdGhlIHJlcGV0aXRpb24gb2Yg YSBTbVBMIGtleSB3b3JkIGF0IHN1Y2ggcGxhY2VzPwoKUmVnYXJkcywKTWFya3VzCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1zbnBzLWFyYyBt YWlsaW5nIGxpc3QKbGludXgtc25wcy1hcmNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXNucHMtYXJj ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) 2018-11-03 4:00 [PATCH -next 0/3] Add support for fast mremap Joel Fernandes 2018-11-03 4:00 ` [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) Joel Fernandes @ 2018-11-03 4:00 ` Joel Fernandes 2018-11-03 16:45 ` kbuild test robot 2018-11-03 16:56 ` kbuild test robot 2018-11-03 4:00 ` [PATCH -next 3/3] mm: select HAVE_MOVE_PMD in x86 for faster mremap Joel Fernandes 2018-11-03 9:15 ` [PATCH -next 0/3] Add support for fast mremap Richard Weinberger 3 siblings, 2 replies; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 4:00 UTC (permalink / raw) To: linux-kernel Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, Joel Fernandes (Google), linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, sparclinux, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE 32-BIT AND 64-BIT, hughd, James E.J. Bottomley, kasan-dev, anton.i From: "Joel Fernandes (Google)" <joel@joelfernandes.org> Android needs to mremap large regions of memory during memory management related operations. The mremap system call can be really slow if THP is not enabled. The bottleneck is move_page_tables, which is copying each pte at a time, and can be really slow across a large map. Turning on THP may not be a viable option, and is not for us. This patch speeds up the performance for non-THP system by copying at the PMD level when possible. The speed up is an order of magnitude on x86 (~20x). On a 1GB mremap, the mremap completion times drops from 3.4-3.6 milliseconds to 144-160 microseconds. Before: Total mremap time for 1GB data: 3521942 nanoseconds. Total mremap time for 1GB data: 3449229 nanoseconds. Total mremap time for 1GB data: 3488230 nanoseconds. After: Total mremap time for 1GB data: 150279 nanoseconds. Total mremap time for 1GB data: 144665 nanoseconds. Total mremap time for 1GB data: 158708 nanoseconds. Incase THP is enabled, the optimization is mostly skipped except in certain situations. Acked-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> --- Note that since the bug fix in [1], we now have to flush the TLB every PMD move. The above numbers were obtained on x86 with a flush done every move. For arm64, I previously encountered performance issues doing a flush everytime we move, however Will Deacon says [2] the performance should be better now with recent release. Until we can evaluate arm64, I am dropping the HAVE_MOVE_PMD config enable patch for ARM64 for now. It can be added back once we finish the performance evaluation. Also of note is that the speed up on arm64 with this patch but without the TLB flush every PMD move is around 500x. [1] https://bugs.chromium.org/p/project-zero/issues/detail?id=1695 [2] https://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg140837.html arch/Kconfig | 5 +++++ mm/mremap.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/arch/Kconfig b/arch/Kconfig index e1e540ffa979..b70c952ac838 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -535,6 +535,11 @@ config HAVE_IRQ_TIME_ACCOUNTING Archs need to ensure they use a high enough resolution clock to support irq time accounting and then call enable_sched_clock_irqtime(). +config HAVE_MOVE_PMD + bool + help + Archs that select this are able to move page tables at the PMD level. + config HAVE_ARCH_TRANSPARENT_HUGEPAGE bool diff --git a/mm/mremap.c b/mm/mremap.c index 7c9ab747f19d..7cf6b0943090 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -191,6 +191,50 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd, drop_rmap_locks(vma); } +static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, + unsigned long new_addr, unsigned long old_end, + pmd_t *old_pmd, pmd_t *new_pmd) +{ + spinlock_t *old_ptl, *new_ptl; + struct mm_struct *mm = vma->vm_mm; + pmd_t pmd; + + if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK) + || old_end - old_addr < PMD_SIZE) + return false; + + /* + * The destination pmd shouldn't be established, free_pgtables() + * should have release it. + */ + if (WARN_ON(!pmd_none(*new_pmd))) + return false; + + /* + * We don't have to worry about the ordering of src and dst + * ptlocks because exclusive mmap_sem prevents deadlock. + */ + old_ptl = pmd_lock(vma->vm_mm, old_pmd); + new_ptl = pmd_lockptr(mm, new_pmd); + if (new_ptl != old_ptl) + spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); + + /* Clear the pmd */ + pmd = *old_pmd; + pmd_clear(old_pmd); + + VM_BUG_ON(!pmd_none(*new_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); + spin_unlock(old_ptl); + + return true; +} + unsigned long move_page_tables(struct vm_area_struct *vma, unsigned long old_addr, struct vm_area_struct *new_vma, unsigned long new_addr, unsigned long len, @@ -237,7 +281,23 @@ unsigned long move_page_tables(struct vm_area_struct *vma, split_huge_pmd(vma, old_pmd, old_addr); if (pmd_trans_unstable(old_pmd)) continue; + } else if (extent == PMD_SIZE && IS_ENABLED(CONFIG_HAVE_MOVE_PMD)) { + /* + * If the extent is PMD-sized, try to speed the move by + * moving at the PMD level if possible. + */ + bool moved; + + if (need_rmap_locks) + take_rmap_locks(vma); + moved = move_normal_pmd(vma, old_addr, new_addr, + old_end, old_pmd, new_pmd); + if (need_rmap_locks) + drop_rmap_locks(vma); + if (moved) + continue; } + if (pte_alloc(new_vma->vm_mm, new_pmd)) break; next = (new_addr + PMD_SIZE) & PMD_MASK; -- 2.19.1.930.g4563a0d9d0-goog ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) 2018-11-03 4:00 ` [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) Joel Fernandes @ 2018-11-03 16:45 ` kbuild test robot 2018-11-03 16:56 ` kbuild test robot 1 sibling, 0 replies; 13+ messages in thread From: kbuild test robot @ 2018-11-03 16:45 UTC (permalink / raw) To: Joel Fernandes Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, Joel Fernandes (Google), linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, sparclinux, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), hughd, James E.J. Bottomley, kasan-dev, ant [-- Attachment #1: Type: text/plain, Size: 2512 bytes --] Hi Joel, Thank you for the patch! Yet something to improve: [auto build test ERROR on next-20181102] url: https://github.com/0day-ci/linux/commits/Joel-Fernandes/Add-support-for-fast-mremap/20181103-224908 config: xtensa-allmodconfig (attached as .config) compiler: xtensa-linux-gcc (GCC) 8.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=8.1.0 make.cross ARCH=xtensa All errors (new ones prefixed by >>): mm/mremap.c: In function 'move_normal_pmd': >> mm/mremap.c:229:2: error: implicit declaration of function 'set_pmd_at'; did you mean 'set_pte_at'? [-Werror=implicit-function-declaration] set_pmd_at(mm, new_addr, new_pmd, pmd); ^~~~~~~~~~ set_pte_at cc1: some warnings being treated as errors vim +229 mm/mremap.c 193 194 static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, 195 unsigned long new_addr, unsigned long old_end, 196 pmd_t *old_pmd, pmd_t *new_pmd) 197 { 198 spinlock_t *old_ptl, *new_ptl; 199 struct mm_struct *mm = vma->vm_mm; 200 pmd_t pmd; 201 202 if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK) 203 || old_end - old_addr < PMD_SIZE) 204 return false; 205 206 /* 207 * The destination pmd shouldn't be established, free_pgtables() 208 * should have release it. 209 */ 210 if (WARN_ON(!pmd_none(*new_pmd))) 211 return false; 212 213 /* 214 * We don't have to worry about the ordering of src and dst 215 * ptlocks because exclusive mmap_sem prevents deadlock. 216 */ 217 old_ptl = pmd_lock(vma->vm_mm, old_pmd); 218 new_ptl = pmd_lockptr(mm, new_pmd); 219 if (new_ptl != old_ptl) 220 spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); 221 222 /* Clear the pmd */ 223 pmd = *old_pmd; 224 pmd_clear(old_pmd); 225 226 VM_BUG_ON(!pmd_none(*new_pmd)); 227 228 /* Set the new pmd */ > 229 set_pmd_at(mm, new_addr, new_pmd, pmd); 230 flush_tlb_range(vma, old_addr, old_addr + PMD_SIZE); 231 if (new_ptl != old_ptl) 232 spin_unlock(new_ptl); 233 spin_unlock(old_ptl); 234 235 return true; 236 } 237 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 55677 bytes --] [-- Attachment #3: Type: text/plain, Size: 169 bytes --] _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) 2018-11-03 4:00 ` [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) Joel Fernandes 2018-11-03 16:45 ` kbuild test robot @ 2018-11-03 16:56 ` kbuild test robot 1 sibling, 0 replies; 13+ messages in thread From: kbuild test robot @ 2018-11-03 16:56 UTC (permalink / raw) To: Joel Fernandes Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, Joel Fernandes (Google), linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, sparclinux, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), hughd, James E.J. Bottomley, kasan-dev, ant [-- Attachment #1: Type: text/plain, Size: 2494 bytes --] Hi Joel, Thank you for the patch! Yet something to improve: [auto build test ERROR on next-20181102] url: https://github.com/0day-ci/linux/commits/Joel-Fernandes/Add-support-for-fast-mremap/20181103-224908 config: openrisc-or1ksim_defconfig (attached as .config) compiler: or1k-linux-gcc (GCC) 6.0.0 20160327 (experimental) reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=openrisc All errors (new ones prefixed by >>): mm/mremap.c: In function 'move_normal_pmd': >> mm/mremap.c:229:2: error: implicit declaration of function 'set_pmd_at' [-Werror=implicit-function-declaration] set_pmd_at(mm, new_addr, new_pmd, pmd); ^~~~~~~~~~ cc1: some warnings being treated as errors vim +/set_pmd_at +229 mm/mremap.c 193 194 static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, 195 unsigned long new_addr, unsigned long old_end, 196 pmd_t *old_pmd, pmd_t *new_pmd) 197 { 198 spinlock_t *old_ptl, *new_ptl; 199 struct mm_struct *mm = vma->vm_mm; 200 pmd_t pmd; 201 202 if ((old_addr & ~PMD_MASK) || (new_addr & ~PMD_MASK) 203 || old_end - old_addr < PMD_SIZE) 204 return false; 205 206 /* 207 * The destination pmd shouldn't be established, free_pgtables() 208 * should have release it. 209 */ 210 if (WARN_ON(!pmd_none(*new_pmd))) 211 return false; 212 213 /* 214 * We don't have to worry about the ordering of src and dst 215 * ptlocks because exclusive mmap_sem prevents deadlock. 216 */ 217 old_ptl = pmd_lock(vma->vm_mm, old_pmd); 218 new_ptl = pmd_lockptr(mm, new_pmd); 219 if (new_ptl != old_ptl) 220 spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING); 221 222 /* Clear the pmd */ 223 pmd = *old_pmd; 224 pmd_clear(old_pmd); 225 226 VM_BUG_ON(!pmd_none(*new_pmd)); 227 228 /* Set the new pmd */ > 229 set_pmd_at(mm, new_addr, new_pmd, pmd); 230 flush_tlb_range(vma, old_addr, old_addr + PMD_SIZE); 231 if (new_ptl != old_ptl) 232 spin_unlock(new_ptl); 233 spin_unlock(old_ptl); 234 235 return true; 236 } 237 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 7869 bytes --] [-- Attachment #3: Type: text/plain, Size: 161 bytes --] _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH -next 3/3] mm: select HAVE_MOVE_PMD in x86 for faster mremap 2018-11-03 4:00 [PATCH -next 0/3] Add support for fast mremap Joel Fernandes 2018-11-03 4:00 ` [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) Joel Fernandes 2018-11-03 4:00 ` [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) Joel Fernandes @ 2018-11-03 4:00 ` Joel Fernandes 2018-11-03 9:15 ` [PATCH -next 0/3] Add support for fast mremap Richard Weinberger 3 siblings, 0 replies; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 4:00 UTC (permalink / raw) To: linux-kernel Cc: linux-mips, Rich Felker, linux-ia64, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, Michal Hocko, linux-mm, lokeshgidra, Joel Fernandes (Google), linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, sparclinux, linux-xtensa, linux-hexagon, Helge Deller, maintainer:X86 ARCHITECTURE 32-BIT AND 64-BIT, hughd, James E.J. Bottomley, kasan-dev, anton.i From: "Joel Fernandes (Google)" <joel@joelfernandes.org> Moving page-tables at the PMD-level on x86 is known to be safe. Enable this option so that we can do fast mremap when possible. Suggested-by: Kirill A. Shutemov <kirill@shutemov.name> Acked-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> --- arch/x86/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ba7e3464ee92..48aef01a0bd1 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -173,6 +173,7 @@ config X86 select HAVE_MEMBLOCK_NODE_MAP select HAVE_MIXED_BREAKPOINTS_REGS select HAVE_MOD_ARCH_SPECIFIC + select HAVE_MOVE_PMD select HAVE_NMI select HAVE_OPROFILE select HAVE_OPTPROBES -- 2.19.1.930.g4563a0d9d0-goog ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-03 4:00 [PATCH -next 0/3] Add support for fast mremap Joel Fernandes ` (2 preceding siblings ...) 2018-11-03 4:00 ` [PATCH -next 3/3] mm: select HAVE_MOVE_PMD in x86 for faster mremap Joel Fernandes @ 2018-11-03 9:15 ` Richard Weinberger 2018-11-03 9:24 ` Anton Ivanov 3 siblings, 1 reply; 13+ messages in thread From: Richard Weinberger @ 2018-11-03 9:15 UTC (permalink / raw) To: Joel Fernandes Cc: Joel Fernandes, linux-mips, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-riscv, linux-ia64, elfring, Jonas Bonn, kvmarm, dancol, Yoshinori Sato, linux-xtensa, linux-hexagon, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley, kasan-dev Sm9lbCwKCkFtIFNhbXN0YWcsIDMuIE5vdmVtYmVyIDIwMTgsIDA1OjAwOjM4IENFVCBzY2hyaWVi IEpvZWwgRmVybmFuZGVzOgo+IEhpLAo+IEhlcmUgaXMgdGhlIGxhdGVzdCAiZmFzdCBtcmVtYXAi IHNlcmllcy4gVGhpcyBqdXN0IGEgcmVwb3N0IHdpdGggS2lyaWxsJ3MKPiBBY2tlZC1ieXMgYWRk ZWQuIEkgd291bGQgbGlrZSB0aGlzIHRvIGJlIGNvbnNpZGVyZWQgZm9yIGxpbnV4IC1uZXh0LiAg SSBhbHNvCj4gZHJvcHBlZCB0aGUgQ09ORklHIGVuYWJsZW1lbnQgcGF0Y2ggZm9yIGFybTY0IHNp bmNlIEkgYW0geWV0IHRvIHRlc3QgaXQgd2l0aAo+IHRoZSBuZXcgVExCIGZsdXNoaW5nIGNvZGUg dGhhdCBpcyBpbiB2ZXJ5IHJlY2VudCBrZXJuZWwgcmVsZWFzZXMuIChOb25lIG9mIG15Cj4gYXJt NjQgZGV2aWNlcyBydW4gbWFpbmxpbmUgcmlnaHQgbm93Likgc28gSSB3aWxsIHBvc3QgdGhlIGFy bTY0IGVuYWJsZW1lbnQgb25jZQo+IEkgZ2V0IHRvIHRoYXQuIFRoZSBwZXJmb3JtYW5jZSBudW1i ZXJzIGluIHRoZSBzZXJpZXMgYXJlIGZvciB4ODYuCj4gCj4gTGlzdCBvZiBwYXRjaGVzIGluIHNl cmllczoKPiAKPiAoMSkgbW06IHNlbGVjdCBIQVZFX01PVkVfUE1EIGluIHg4NiBmb3IgZmFzdGVy IG1yZW1hcAo+IAo+ICgyKSBtbTogc3BlZWQgdXAgbXJlbWFwIGJ5IDIweCBvbiBsYXJnZSByZWdp b25zICh2NCkKPiB2MS0+djI6IEFkZGVkIHN1cHBvcnQgZm9yIHBlci1hcmNoIGVuYWJsZW1lbnQg KEtpcmlsbCBTaHV0ZW1vdikKPiB2Mi0+djM6IFVwZGF0ZWQgY29tbWl0IG1lc3NhZ2UgdG8gc3Rh dGUgdGhlIG9wdGltaXphdGlvbiBtYXkgYWxzbwo+IAlydW4gZm9yIG5vbi10aHAgdHlwZSBvZiBz eXN0ZW1zIChEYW5pZWwgQ29sKS4KPiB2My0+djQ6IFJlbW92ZSB1c2VsZXNzIHBtZF9sb2NrIGNo ZWNrIChLaXJpbGwgU2h1dGVtb3YpCj4gCVJlYmFzZWQgb250b3Agb2YgTGludXMncyBtYXN0ZXIs IHVwZGF0ZWQgcGVyZiByZXN1bHRzIGJhc2VkCj4gICAgICAgICBvbiB4ODYgdGVzdGluZy4gQWRk ZWQgS2lyaWxsJ3MgQWNrcy4KPiAKPiAoMykgbW06IHRyZWV3aWRlOiByZW1vdmUgdW51c2VkIGFk ZHJlc3MgYXJndW1lbnQgZnJvbSBwdGVfYWxsb2MgZnVuY3Rpb25zICh2MikKPiB2MS0+djI6IGZp eCBhcmNoL3VtLyBwcm90b3R5cGUgd2hpY2ggd2FzIG1pc3NlZCBpbiB2MSAoQW50b24gSXZhbm92 KQo+ICAgICAgICAgdXBkYXRlIGNoYW5nZWxvZyB3aXRoIG1hbnVhbCBmaXh1cHMgZm9yIG02OGsg YW5kIG1pY3JvYmxhemUuCj4gCj4gbm90IGluY2x1ZGVkIC0gKDQpIG1tOiBzZWxlY3QgSEFWRV9N T1ZFX1BNRCBpbiBhcm02NCBmb3IgZmFzdGVyIG1yZW1hcAo+ICAgICBUaGlzIHBhdGNoIGlzIGRy b3BwZWQgc2luY2UgbGFzdCBwb3N0aW5nIHBlbmRpbmcgZnVydGhlciBwZXJmb3JtYW5jZQo+ICAg ICB0ZXN0aW5nIG9uIGFybTY0IHdpdGggbmV3IFRMQiBnYXRoZXIgdXBkYXRlcy4gU2VlIG5vdGVz IGluIHBhdGNoCj4gICAgIHRpdGxlZCAibW06IHNwZWVkIHVwIG1yZW1hcCBieSA1MDB4IG9uIGxh cmdlIHJlZ2lvbnMiIGZvciBtb3JlCj4gICAgIGRldGFpbHMuCj4gCgpUaGlzIGJyZWFrcyBVTUwg YnVpbGQ6CiAgQ0MgICAgICBtbS9tcmVtYXAubwptbS9tcmVtYXAuYzogSW4gZnVuY3Rpb24g4oCY bW92ZV9ub3JtYWxfcG1k4oCZOgptbS9tcmVtYXAuYzoyMjk6MjogZXJyb3I6IGltcGxpY2l0IGRl Y2xhcmF0aW9uIG9mIGZ1bmN0aW9uIOKAmHNldF9wbWRfYXTigJk7IGRpZCB5b3UgbWVhbiDigJhz ZXRfcHRlX2F04oCZPyBbLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KICBz ZXRfcG1kX2F0KG1tLCBuZXdfYWRkciwgbmV3X3BtZCwgcG1kKTsKICBefn5+fn5+fn5+CiAgc2V0 X3B0ZV9hdAogIENDICAgICAgY3J5cHRvL3JuZy5vCiAgQ0MgICAgICBmcy9kaXJlY3QtaW8ubwpj YzE6IHNvbWUgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKClRvIHRlc3QgeW91cnNl bGYsIGp1c3QgcnVuIG9uIGEgeDg2IGJveDoKJCBtYWtlIGRlZmNvbmZpZyBBUkNIPXVtCiQgbWFr ZSBsaW51eCBBUkNIPXVtCgpUaGFua3MsCi8vcmljaGFyZAoKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1zbnBzLWFyYyBtYWlsaW5nIGxpc3QK bGludXgtc25wcy1hcmNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXNucHMtYXJj ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-03 9:15 ` [PATCH -next 0/3] Add support for fast mremap Richard Weinberger @ 2018-11-03 9:24 ` Anton Ivanov 2018-11-03 15:20 ` Joel Fernandes 2018-11-03 18:32 ` Joel Fernandes 0 siblings, 2 replies; 13+ messages in thread From: Anton Ivanov @ 2018-11-03 9:24 UTC (permalink / raw) To: Richard Weinberger, Joel Fernandes Cc: Joel Fernandes, linux-mips, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-riscv, linux-ia64, elfring, Jonas Bonn, linux-s390, dancol, Yoshinori Sato, linux-xtensa, linux-hexagon, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley, kasan-dev T24gMDMvMTEvMjAxOCAwOToxNSwgUmljaGFyZCBXZWluYmVyZ2VyIHdyb3RlOgo+IEpvZWwsCj4K PiBBbSBTYW1zdGFnLCAzLiBOb3ZlbWJlciAyMDE4LCAwNTowMDozOCBDRVQgc2NocmllYiBKb2Vs IEZlcm5hbmRlczoKPj4gSGksCj4+IEhlcmUgaXMgdGhlIGxhdGVzdCAiZmFzdCBtcmVtYXAiIHNl cmllcy4gVGhpcyBqdXN0IGEgcmVwb3N0IHdpdGggS2lyaWxsJ3MKPj4gQWNrZWQtYnlzIGFkZGVk LiBJIHdvdWxkIGxpa2UgdGhpcyB0byBiZSBjb25zaWRlcmVkIGZvciBsaW51eCAtbmV4dC4gIEkg YWxzbwo+PiBkcm9wcGVkIHRoZSBDT05GSUcgZW5hYmxlbWVudCBwYXRjaCBmb3IgYXJtNjQgc2lu Y2UgSSBhbSB5ZXQgdG8gdGVzdCBpdCB3aXRoCj4+IHRoZSBuZXcgVExCIGZsdXNoaW5nIGNvZGUg dGhhdCBpcyBpbiB2ZXJ5IHJlY2VudCBrZXJuZWwgcmVsZWFzZXMuIChOb25lIG9mIG15Cj4+IGFy bTY0IGRldmljZXMgcnVuIG1haW5saW5lIHJpZ2h0IG5vdy4pIHNvIEkgd2lsbCBwb3N0IHRoZSBh cm02NCBlbmFibGVtZW50IG9uY2UKPj4gSSBnZXQgdG8gdGhhdC4gVGhlIHBlcmZvcm1hbmNlIG51 bWJlcnMgaW4gdGhlIHNlcmllcyBhcmUgZm9yIHg4Ni4KPj4KPj4gTGlzdCBvZiBwYXRjaGVzIGlu IHNlcmllczoKPj4KPj4gKDEpIG1tOiBzZWxlY3QgSEFWRV9NT1ZFX1BNRCBpbiB4ODYgZm9yIGZh c3RlciBtcmVtYXAKPj4KPj4gKDIpIG1tOiBzcGVlZCB1cCBtcmVtYXAgYnkgMjB4IG9uIGxhcmdl IHJlZ2lvbnMgKHY0KQo+PiB2MS0+djI6IEFkZGVkIHN1cHBvcnQgZm9yIHBlci1hcmNoIGVuYWJs ZW1lbnQgKEtpcmlsbCBTaHV0ZW1vdikKPj4gdjItPnYzOiBVcGRhdGVkIGNvbW1pdCBtZXNzYWdl IHRvIHN0YXRlIHRoZSBvcHRpbWl6YXRpb24gbWF5IGFsc28KPj4gCXJ1biBmb3Igbm9uLXRocCB0 eXBlIG9mIHN5c3RlbXMgKERhbmllbCBDb2wpLgo+PiB2My0+djQ6IFJlbW92ZSB1c2VsZXNzIHBt ZF9sb2NrIGNoZWNrIChLaXJpbGwgU2h1dGVtb3YpCj4+IAlSZWJhc2VkIG9udG9wIG9mIExpbnVz J3MgbWFzdGVyLCB1cGRhdGVkIHBlcmYgcmVzdWx0cyBiYXNlZAo+PiAgICAgICAgICBvbiB4ODYg dGVzdGluZy4gQWRkZWQgS2lyaWxsJ3MgQWNrcy4KPj4KPj4gKDMpIG1tOiB0cmVld2lkZTogcmVt b3ZlIHVudXNlZCBhZGRyZXNzIGFyZ3VtZW50IGZyb20gcHRlX2FsbG9jIGZ1bmN0aW9ucyAodjIp Cj4+IHYxLT52MjogZml4IGFyY2gvdW0vIHByb3RvdHlwZSB3aGljaCB3YXMgbWlzc2VkIGluIHYx IChBbnRvbiBJdmFub3YpCj4+ICAgICAgICAgIHVwZGF0ZSBjaGFuZ2Vsb2cgd2l0aCBtYW51YWwg Zml4dXBzIGZvciBtNjhrIGFuZCBtaWNyb2JsYXplLgo+Pgo+PiBub3QgaW5jbHVkZWQgLSAoNCkg bW06IHNlbGVjdCBIQVZFX01PVkVfUE1EIGluIGFybTY0IGZvciBmYXN0ZXIgbXJlbWFwCj4+ICAg ICAgVGhpcyBwYXRjaCBpcyBkcm9wcGVkIHNpbmNlIGxhc3QgcG9zdGluZyBwZW5kaW5nIGZ1cnRo ZXIgcGVyZm9ybWFuY2UKPj4gICAgICB0ZXN0aW5nIG9uIGFybTY0IHdpdGggbmV3IFRMQiBnYXRo ZXIgdXBkYXRlcy4gU2VlIG5vdGVzIGluIHBhdGNoCj4+ICAgICAgdGl0bGVkICJtbTogc3BlZWQg dXAgbXJlbWFwIGJ5IDUwMHggb24gbGFyZ2UgcmVnaW9ucyIgZm9yIG1vcmUKPj4gICAgICBkZXRh aWxzLgo+Pgo+IFRoaXMgYnJlYWtzIFVNTCBidWlsZDoKPiAgICBDQyAgICAgIG1tL21yZW1hcC5v Cj4gbW0vbXJlbWFwLmM6IEluIGZ1bmN0aW9uIOKAmG1vdmVfbm9ybWFsX3BtZOKAmToKPiBtbS9t cmVtYXAuYzoyMjk6MjogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uIOKA mHNldF9wbWRfYXTigJk7IGRpZCB5b3UgbWVhbiDigJhzZXRfcHRlX2F04oCZPyBbLVdlcnJvcj1p bXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KPiAgICBzZXRfcG1kX2F0KG1tLCBuZXdfYWRk ciwgbmV3X3BtZCwgcG1kKTsKPiAgICBefn5+fn5+fn5+Cj4gICAgc2V0X3B0ZV9hdAo+ICAgIEND ICAgICAgY3J5cHRvL3JuZy5vCj4gICAgQ0MgICAgICBmcy9kaXJlY3QtaW8ubwo+IGNjMTogc29t ZSB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycwo+Cj4gVG8gdGVzdCB5b3Vyc2VsZiwg anVzdCBydW4gb24gYSB4ODYgYm94Ogo+ICQgbWFrZSBkZWZjb25maWcgQVJDSD11bQo+ICQgbWFr ZSBsaW51eCBBUkNIPXVtCj4KPiBUaGFua3MsCj4gLy9yaWNoYXJkCj4KPgo+CgpVTSBzb21laG93 IG1hbmFnZWQgdG8gbWlzcyBvbmUgb2YgdGhlIDMtbGV2ZWwgZnVuY3Rpb25zLCBJIHNlbnQgYSBw YXRjaCAKYXQgc29tZSBwb2ludCB0byBhZGQgdG8gdGhlIG1tcmVtYXAgc2VyaWVzLCBidXQgaXQg bG9va3MgbGlrZSBpdCBkaWQgbm90IApnZXQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHZlcnNpb24u CgpZb3UgbmVlZCB0aGVzZSB0d28gaW5jcmVtZW50YWwgb24gdG9wIG9mIEpvZWwncyBwYXRjaC4g UmljaGFyZCAtIGZlZWwgCmZyZWUgdG8gcmVsb2NhdGUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlv biBvZiB0aGUgc2V0X3BnZF9hdCBlbHNld2hlcmUgLSAKSSBwdXQgaXQgYXQgdGhlIGVuZCBvZiB0 bGIuYwoKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91 bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNzQ4NTM5OGQwNzM3Li4xNjkyZGE1NWU2M2Eg MTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvdW0v aW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zNTksNCArMzU5LDcgQEAgZG8ge8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAogwqDCoMKgwqDCoMKgwqAgX19mbHVzaF90bGJf b25lKCh2YWRkcikpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAogwqB9IHdoaWxlICgw KQoKK2V4dGVybiB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVk IGxvbmcgYWRkciwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kX3QgKnBtZHAsIHBt ZF90IHBtZCk7CisKIMKgI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90bGIuYyBi L2FyY2gvdW0va2VybmVsL3RsYi5jCmluZGV4IDc2M2QzNWJkZGEwMS4uZDE3Yjc0MTg0YmEwIDEw MDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90bGIuYworKysgYi9hcmNoL3VtL2tlcm5lbC90bGIu YwpAQCAtNjQ3LDMgKzY0Nyw5IEBAIHZvaWQgZm9yY2VfZmx1c2hfYWxsKHZvaWQpCiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1hID0gdm1hLT52bV9uZXh0OwogwqDCoMKgwqDCoMKg wqAgfQogwqB9Cit2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVk IGxvbmcgYWRkciwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kX3QgKnBtZHAsIHBt ZF90IHBtZCkKK3sKK8KgwqDCoMKgwqDCoCAqcG1kcCA9IHBtZDsKK30KKwoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXNucHMtYXJjIG1haWxp bmcgbGlzdApsaW51eC1zbnBzLWFyY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtc25wcy1hcmM= ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-03 9:24 ` Anton Ivanov @ 2018-11-03 15:20 ` Joel Fernandes 2018-11-03 18:32 ` Joel Fernandes 1 sibling, 0 replies; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 15:20 UTC (permalink / raw) To: Anton Ivanov Cc: linux-mips, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-hexagon, linux-riscv, elfring, Jonas Bonn, linux-s390, dancol, linux-ia64, Yoshinori Sato, linux-xtensa, Richard Weinberger, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley, kasan-dev T24gU2F0LCBOb3YgMDMsIDIwMTggYXQgMDk6MjQ6MDVBTSArMDAwMCwgQW50b24gSXZhbm92IHdy b3RlOgo+IE9uIDAzLzExLzIwMTggMDk6MTUsIFJpY2hhcmQgV2VpbmJlcmdlciB3cm90ZToKPiA+ IEpvZWwsCj4gPiAKPiA+IEFtIFNhbXN0YWcsIDMuIE5vdmVtYmVyIDIwMTgsIDA1OjAwOjM4IENF VCBzY2hyaWViIEpvZWwgRmVybmFuZGVzOgo+ID4gPiBIaSwKPiA+ID4gSGVyZSBpcyB0aGUgbGF0 ZXN0ICJmYXN0IG1yZW1hcCIgc2VyaWVzLiBUaGlzIGp1c3QgYSByZXBvc3Qgd2l0aCBLaXJpbGwn cwo+ID4gPiBBY2tlZC1ieXMgYWRkZWQuIEkgd291bGQgbGlrZSB0aGlzIHRvIGJlIGNvbnNpZGVy ZWQgZm9yIGxpbnV4IC1uZXh0LiAgSSBhbHNvCj4gPiA+IGRyb3BwZWQgdGhlIENPTkZJRyBlbmFi bGVtZW50IHBhdGNoIGZvciBhcm02NCBzaW5jZSBJIGFtIHlldCB0byB0ZXN0IGl0IHdpdGgKPiA+ ID4gdGhlIG5ldyBUTEIgZmx1c2hpbmcgY29kZSB0aGF0IGlzIGluIHZlcnkgcmVjZW50IGtlcm5l bCByZWxlYXNlcy4gKE5vbmUgb2YgbXkKPiA+ID4gYXJtNjQgZGV2aWNlcyBydW4gbWFpbmxpbmUg cmlnaHQgbm93Likgc28gSSB3aWxsIHBvc3QgdGhlIGFybTY0IGVuYWJsZW1lbnQgb25jZQo+ID4g PiBJIGdldCB0byB0aGF0LiBUaGUgcGVyZm9ybWFuY2UgbnVtYmVycyBpbiB0aGUgc2VyaWVzIGFy ZSBmb3IgeDg2Lgo+ID4gPiAKPiA+ID4gTGlzdCBvZiBwYXRjaGVzIGluIHNlcmllczoKPiA+ID4g Cj4gPiA+ICgxKSBtbTogc2VsZWN0IEhBVkVfTU9WRV9QTUQgaW4geDg2IGZvciBmYXN0ZXIgbXJl bWFwCj4gPiA+IAo+ID4gPiAoMikgbW06IHNwZWVkIHVwIG1yZW1hcCBieSAyMHggb24gbGFyZ2Ug cmVnaW9ucyAodjQpCj4gPiA+IHYxLT52MjogQWRkZWQgc3VwcG9ydCBmb3IgcGVyLWFyY2ggZW5h YmxlbWVudCAoS2lyaWxsIFNodXRlbW92KQo+ID4gPiB2Mi0+djM6IFVwZGF0ZWQgY29tbWl0IG1l c3NhZ2UgdG8gc3RhdGUgdGhlIG9wdGltaXphdGlvbiBtYXkgYWxzbwo+ID4gPiAJcnVuIGZvciBu b24tdGhwIHR5cGUgb2Ygc3lzdGVtcyAoRGFuaWVsIENvbCkuCj4gPiA+IHYzLT52NDogUmVtb3Zl IHVzZWxlc3MgcG1kX2xvY2sgY2hlY2sgKEtpcmlsbCBTaHV0ZW1vdikKPiA+ID4gCVJlYmFzZWQg b250b3Agb2YgTGludXMncyBtYXN0ZXIsIHVwZGF0ZWQgcGVyZiByZXN1bHRzIGJhc2VkCj4gPiA+ ICAgICAgICAgIG9uIHg4NiB0ZXN0aW5nLiBBZGRlZCBLaXJpbGwncyBBY2tzLgo+ID4gPiAKPiA+ ID4gKDMpIG1tOiB0cmVld2lkZTogcmVtb3ZlIHVudXNlZCBhZGRyZXNzIGFyZ3VtZW50IGZyb20g cHRlX2FsbG9jIGZ1bmN0aW9ucyAodjIpCj4gPiA+IHYxLT52MjogZml4IGFyY2gvdW0vIHByb3Rv dHlwZSB3aGljaCB3YXMgbWlzc2VkIGluIHYxIChBbnRvbiBJdmFub3YpCj4gPiA+ICAgICAgICAg IHVwZGF0ZSBjaGFuZ2Vsb2cgd2l0aCBtYW51YWwgZml4dXBzIGZvciBtNjhrIGFuZCBtaWNyb2Js YXplLgo+ID4gPiAKPiA+ID4gbm90IGluY2x1ZGVkIC0gKDQpIG1tOiBzZWxlY3QgSEFWRV9NT1ZF X1BNRCBpbiBhcm02NCBmb3IgZmFzdGVyIG1yZW1hcAo+ID4gPiAgICAgIFRoaXMgcGF0Y2ggaXMg ZHJvcHBlZCBzaW5jZSBsYXN0IHBvc3RpbmcgcGVuZGluZyBmdXJ0aGVyIHBlcmZvcm1hbmNlCj4g PiA+ICAgICAgdGVzdGluZyBvbiBhcm02NCB3aXRoIG5ldyBUTEIgZ2F0aGVyIHVwZGF0ZXMuIFNl ZSBub3RlcyBpbiBwYXRjaAo+ID4gPiAgICAgIHRpdGxlZCAibW06IHNwZWVkIHVwIG1yZW1hcCBi eSA1MDB4IG9uIGxhcmdlIHJlZ2lvbnMiIGZvciBtb3JlCj4gPiA+ICAgICAgZGV0YWlscy4KPiA+ ID4gCj4gPiBUaGlzIGJyZWFrcyBVTUwgYnVpbGQ6Cj4gPiAgICBDQyAgICAgIG1tL21yZW1hcC5v Cj4gPiBtbS9tcmVtYXAuYzogSW4gZnVuY3Rpb24g4oCYbW92ZV9ub3JtYWxfcG1k4oCZOgo+ID4g bW0vbXJlbWFwLmM6MjI5OjI6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlv biDigJhzZXRfcG1kX2F04oCZOyBkaWQgeW91IG1lYW4g4oCYc2V0X3B0ZV9hdOKAmT8gWy1XZXJy b3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCj4gPiAgICBzZXRfcG1kX2F0KG1tLCBu ZXdfYWRkciwgbmV3X3BtZCwgcG1kKTsKPiA+ICAgIF5+fn5+fn5+fn4KPiA+ICAgIHNldF9wdGVf YXQKPiA+ICAgIENDICAgICAgY3J5cHRvL3JuZy5vCj4gPiAgICBDQyAgICAgIGZzL2RpcmVjdC1p by5vCj4gPiBjYzE6IHNvbWUgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKPiA+IAo+ ID4gVG8gdGVzdCB5b3Vyc2VsZiwganVzdCBydW4gb24gYSB4ODYgYm94Ogo+ID4gJCBtYWtlIGRl ZmNvbmZpZyBBUkNIPXVtCj4gPiAkIG1ha2UgbGludXggQVJDSD11bQo+ID4gCj4gPiBUaGFua3Ms Cj4gPiAvL3JpY2hhcmQKPiA+IAo+ID4gCj4gPiAKPiAKPiBVTSBzb21laG93IG1hbmFnZWQgdG8g bWlzcyBvbmUgb2YgdGhlIDMtbGV2ZWwgZnVuY3Rpb25zLCBJIHNlbnQgYSBwYXRjaCBhdAo+IHNv bWUgcG9pbnQgdG8gYWRkIHRvIHRoZSBtbXJlbWFwIHNlcmllcywgYnV0IGl0IGxvb2tzIGxpa2Ug aXQgZGlkIG5vdCBnZXQKPiBpbmNsdWRlZCBpbiB0aGUgZmluYWwgdmVyc2lvbi4KPiAKPiBZb3Ug bmVlZCB0aGVzZSB0d28gaW5jcmVtZW50YWwgb24gdG9wIG9mIEpvZWwncyBwYXRjaC4gUmljaGFy ZCAtIGZlZWwgZnJlZQo+IHRvIHJlbG9jYXRlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2Yg dGhlIHNldF9wZ2RfYXQgZWxzZXdoZXJlIC0gSSBwdXQgaXQKPiBhdCB0aGUgZW5kIG9mIHRsYi5j Cj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91 bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKPiBpbmRleCA3NDg1Mzk4ZDA3MzcuLjE2OTJkYTU1ZTYz YSAxMDA2NDQKPiAtLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaAo+ICsrKyBiL2Fy Y2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gQEAgLTM1OSw0ICszNTksNyBAQCBkbyB7wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqAgX19m bHVzaF90bGJfb25lKCh2YWRkcikpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKg fSB3aGlsZSAoMCkKPiAKPiArZXh0ZXJuIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0 ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpOwo+ICsKPiDCoCNlbmRpZgo+IGRpZmYgLS1naXQgYS9h cmNoL3VtL2tlcm5lbC90bGIuYyBiL2FyY2gvdW0va2VybmVsL3RsYi5jCj4gaW5kZXggNzYzZDM1 YmRkYTAxLi5kMTdiNzQxODRiYTAgMTAwNjQ0Cj4gLS0tIGEvYXJjaC91bS9rZXJuZWwvdGxiLmMK PiArKysgYi9hcmNoL3VtL2tlcm5lbC90bGIuYwo+IEBAIC02NDcsMyArNjQ3LDkgQEAgdm9pZCBm b3JjZV9mbHVzaF9hbGwodm9pZCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1h ID0gdm1hLT52bV9uZXh0Owo+IMKgwqDCoMKgwqDCoMKgIH0KPiDCoH0KPiArdm9pZCBzZXRfcG1k X2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKPiArewo+ICvCoMKg wqDCoMKgwqAgKnBtZHAgPSBwbWQ7Cj4gK30KPiArCj4gCgpJIHNlZSBpdCBub3c6Cmh0dHBzOi8v d3d3Lm1haWwtYXJjaGl2ZS5jb20vbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcvbXNnMTQw MDA1Lmh0bWwKClNvcnJ5IGFib3V0IHRoYXQuCkFjdHVhbGx5IHRoZSByZWFzb24gdGhlIHN1Z2dl c3Rpb24gZ290IG1pc3NlZCBpcyBpdCBkaWQgbm90IGJlbG9uZyBpbiB0aGUKcGF0Y2ggcmVtb3Zp bmcgdGhlIHB0ZV9hbGxvYyBhZGRyZXNzIGFyZ3VtZW50LiBUaGUgcHRlX2FsbG9jIHBhcnRzIG9m IHRoZQpwYXRjaCB5b3UgcHJvcG9zZWQgYXJlIGluZmFjdCBhbHJlYWR5IGluY2x1ZGVkLgoKVGhp cyBzZXRfcG1kX2F0IGZvciBVTSBzaG91bGQgZ28gaW50byBhIHNlcGFyYXRlIHBhdGNoIGFuZCBz aG91bGQgbm90IGJlCnJvbGxlZCBpbnRvIGFueSBleGlzdGluZyBvbmUuIENvdWxkIHlvdSBzZW5k IGEgcHJvcGVyIHBhdGNoIGFkZGluZyB0aGlzCmZ1bmN0aW9uIHdpdGggYSBjb21taXQgbWVzc2Fn ZSBhbmQgZXZlcnl0aGluZz8gSSBjYW4gdGhlbiBpbmNsdWRlIGl0IGFzIGEKc2VwYXJhdGUgcGF0 Y2ggb2YgbXkgc2VyaWVzLgoKdGhhbmtzIQoKIC0gSm9lbAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4 LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo= ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-03 9:24 ` Anton Ivanov 2018-11-03 15:20 ` Joel Fernandes @ 2018-11-03 18:32 ` Joel Fernandes 2018-11-04 6:56 ` William Kucharski 1 sibling, 1 reply; 13+ messages in thread From: Joel Fernandes @ 2018-11-03 18:32 UTC (permalink / raw) To: Anton Ivanov Cc: linux-mips, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-hexagon, linux-riscv, elfring, Jonas Bonn, linux-s390, dancol, linux-ia64, Yoshinori Sato, linux-xtensa, Richard Weinberger, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley, kasan-dev T24gU2F0LCBOb3YgMDMsIDIwMTggYXQgMDk6MjQ6MDVBTSArMDAwMCwgQW50b24gSXZhbm92IHdy b3RlOgo+IE9uIDAzLzExLzIwMTggMDk6MTUsIFJpY2hhcmQgV2VpbmJlcmdlciB3cm90ZToKPiA+ IEpvZWwsCj4gPiAKPiA+IEFtIFNhbXN0YWcsIDMuIE5vdmVtYmVyIDIwMTgsIDA1OjAwOjM4IENF VCBzY2hyaWViIEpvZWwgRmVybmFuZGVzOgo+ID4gPiBIaSwKPiA+ID4gSGVyZSBpcyB0aGUgbGF0 ZXN0ICJmYXN0IG1yZW1hcCIgc2VyaWVzLiBUaGlzIGp1c3QgYSByZXBvc3Qgd2l0aCBLaXJpbGwn cwo+ID4gPiBBY2tlZC1ieXMgYWRkZWQuIEkgd291bGQgbGlrZSB0aGlzIHRvIGJlIGNvbnNpZGVy ZWQgZm9yIGxpbnV4IC1uZXh0LiAgSSBhbHNvCj4gPiA+IGRyb3BwZWQgdGhlIENPTkZJRyBlbmFi bGVtZW50IHBhdGNoIGZvciBhcm02NCBzaW5jZSBJIGFtIHlldCB0byB0ZXN0IGl0IHdpdGgKPiA+ ID4gdGhlIG5ldyBUTEIgZmx1c2hpbmcgY29kZSB0aGF0IGlzIGluIHZlcnkgcmVjZW50IGtlcm5l bCByZWxlYXNlcy4gKE5vbmUgb2YgbXkKPiA+ID4gYXJtNjQgZGV2aWNlcyBydW4gbWFpbmxpbmUg cmlnaHQgbm93Likgc28gSSB3aWxsIHBvc3QgdGhlIGFybTY0IGVuYWJsZW1lbnQgb25jZQo+ID4g PiBJIGdldCB0byB0aGF0LiBUaGUgcGVyZm9ybWFuY2UgbnVtYmVycyBpbiB0aGUgc2VyaWVzIGFy ZSBmb3IgeDg2Lgo+ID4gPiAKPiA+ID4gTGlzdCBvZiBwYXRjaGVzIGluIHNlcmllczoKPiA+ID4g Cj4gPiA+ICgxKSBtbTogc2VsZWN0IEhBVkVfTU9WRV9QTUQgaW4geDg2IGZvciBmYXN0ZXIgbXJl bWFwCj4gPiA+IAo+ID4gPiAoMikgbW06IHNwZWVkIHVwIG1yZW1hcCBieSAyMHggb24gbGFyZ2Ug cmVnaW9ucyAodjQpCj4gPiA+IHYxLT52MjogQWRkZWQgc3VwcG9ydCBmb3IgcGVyLWFyY2ggZW5h YmxlbWVudCAoS2lyaWxsIFNodXRlbW92KQo+ID4gPiB2Mi0+djM6IFVwZGF0ZWQgY29tbWl0IG1l c3NhZ2UgdG8gc3RhdGUgdGhlIG9wdGltaXphdGlvbiBtYXkgYWxzbwo+ID4gPiAJcnVuIGZvciBu b24tdGhwIHR5cGUgb2Ygc3lzdGVtcyAoRGFuaWVsIENvbCkuCj4gPiA+IHYzLT52NDogUmVtb3Zl IHVzZWxlc3MgcG1kX2xvY2sgY2hlY2sgKEtpcmlsbCBTaHV0ZW1vdikKPiA+ID4gCVJlYmFzZWQg b250b3Agb2YgTGludXMncyBtYXN0ZXIsIHVwZGF0ZWQgcGVyZiByZXN1bHRzIGJhc2VkCj4gPiA+ ICAgICAgICAgIG9uIHg4NiB0ZXN0aW5nLiBBZGRlZCBLaXJpbGwncyBBY2tzLgo+ID4gPiAKPiA+ ID4gKDMpIG1tOiB0cmVld2lkZTogcmVtb3ZlIHVudXNlZCBhZGRyZXNzIGFyZ3VtZW50IGZyb20g cHRlX2FsbG9jIGZ1bmN0aW9ucyAodjIpCj4gPiA+IHYxLT52MjogZml4IGFyY2gvdW0vIHByb3Rv dHlwZSB3aGljaCB3YXMgbWlzc2VkIGluIHYxIChBbnRvbiBJdmFub3YpCj4gPiA+ICAgICAgICAg IHVwZGF0ZSBjaGFuZ2Vsb2cgd2l0aCBtYW51YWwgZml4dXBzIGZvciBtNjhrIGFuZCBtaWNyb2Js YXplLgo+ID4gPiAKPiA+ID4gbm90IGluY2x1ZGVkIC0gKDQpIG1tOiBzZWxlY3QgSEFWRV9NT1ZF X1BNRCBpbiBhcm02NCBmb3IgZmFzdGVyIG1yZW1hcAo+ID4gPiAgICAgIFRoaXMgcGF0Y2ggaXMg ZHJvcHBlZCBzaW5jZSBsYXN0IHBvc3RpbmcgcGVuZGluZyBmdXJ0aGVyIHBlcmZvcm1hbmNlCj4g PiA+ICAgICAgdGVzdGluZyBvbiBhcm02NCB3aXRoIG5ldyBUTEIgZ2F0aGVyIHVwZGF0ZXMuIFNl ZSBub3RlcyBpbiBwYXRjaAo+ID4gPiAgICAgIHRpdGxlZCAibW06IHNwZWVkIHVwIG1yZW1hcCBi eSA1MDB4IG9uIGxhcmdlIHJlZ2lvbnMiIGZvciBtb3JlCj4gPiA+ICAgICAgZGV0YWlscy4KPiA+ ID4gCj4gPiBUaGlzIGJyZWFrcyBVTUwgYnVpbGQ6Cj4gPiAgICBDQyAgICAgIG1tL21yZW1hcC5v Cj4gPiBtbS9tcmVtYXAuYzogSW4gZnVuY3Rpb24g4oCYbW92ZV9ub3JtYWxfcG1k4oCZOgo+ID4g bW0vbXJlbWFwLmM6MjI5OjI6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlv biDigJhzZXRfcG1kX2F04oCZOyBkaWQgeW91IG1lYW4g4oCYc2V0X3B0ZV9hdOKAmT8gWy1XZXJy b3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCj4gPiAgICBzZXRfcG1kX2F0KG1tLCBu ZXdfYWRkciwgbmV3X3BtZCwgcG1kKTsKPiA+ICAgIF5+fn5+fn5+fn4KPiA+ICAgIHNldF9wdGVf YXQKPiA+ICAgIENDICAgICAgY3J5cHRvL3JuZy5vCj4gPiAgICBDQyAgICAgIGZzL2RpcmVjdC1p by5vCj4gPiBjYzE6IHNvbWUgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKPiA+IAo+ ID4gVG8gdGVzdCB5b3Vyc2VsZiwganVzdCBydW4gb24gYSB4ODYgYm94Ogo+ID4gJCBtYWtlIGRl ZmNvbmZpZyBBUkNIPXVtCj4gPiAkIG1ha2UgbGludXggQVJDSD11bQo+ID4gCj4gPiBUaGFua3Ms Cj4gPiAvL3JpY2hhcmQKPiA+IAo+ID4gCj4gPiAKPiAKPiBVTSBzb21laG93IG1hbmFnZWQgdG8g bWlzcyBvbmUgb2YgdGhlIDMtbGV2ZWwgZnVuY3Rpb25zLCBJIHNlbnQgYSBwYXRjaCBhdAo+IHNv bWUgcG9pbnQgdG8gYWRkIHRvIHRoZSBtbXJlbWFwIHNlcmllcywgYnV0IGl0IGxvb2tzIGxpa2Ug aXQgZGlkIG5vdCBnZXQKPiBpbmNsdWRlZCBpbiB0aGUgZmluYWwgdmVyc2lvbi4KPiAKPiBZb3Ug bmVlZCB0aGVzZSB0d28gaW5jcmVtZW50YWwgb24gdG9wIG9mIEpvZWwncyBwYXRjaC4gUmljaGFy ZCAtIGZlZWwgZnJlZQo+IHRvIHJlbG9jYXRlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2Yg dGhlIHNldF9wZ2RfYXQgZWxzZXdoZXJlIC0gSSBwdXQgaXQKPiBhdCB0aGUgZW5kIG9mIHRsYi5j Cj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91 bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKPiBpbmRleCA3NDg1Mzk4ZDA3MzcuLjE2OTJkYTU1ZTYz YSAxMDA2NDQKPiAtLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaAo+ICsrKyBiL2Fy Y2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gQEAgLTM1OSw0ICszNTksNyBAQCBkbyB7wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqAgX19m bHVzaF90bGJfb25lKCh2YWRkcikpO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKg fSB3aGlsZSAoMCkKPiAKPiArZXh0ZXJuIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0 ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBtZF90ICpwbWRwLCBwbWRfdCBwbWQpOwo+ICsKPiDCoCNlbmRpZgo+IGRpZmYgLS1naXQgYS9h cmNoL3VtL2tlcm5lbC90bGIuYyBiL2FyY2gvdW0va2VybmVsL3RsYi5jCj4gaW5kZXggNzYzZDM1 YmRkYTAxLi5kMTdiNzQxODRiYTAgMTAwNjQ0Cj4gLS0tIGEvYXJjaC91bS9rZXJuZWwvdGxiLmMK PiArKysgYi9hcmNoL3VtL2tlcm5lbC90bGIuYwo+IEBAIC02NDcsMyArNjQ3LDkgQEAgdm9pZCBm b3JjZV9mbHVzaF9hbGwodm9pZCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1h ID0gdm1hLT52bV9uZXh0Owo+IMKgwqDCoMKgwqDCoMKgIH0KPiDCoH0KPiArdm9pZCBzZXRfcG1k X2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKPiArewo+ICvCoMKg wqDCoMKgwqAgKnBtZHAgPSBwbWQ7Cj4gK30KPiArCj4gCgpMb29rcyBsaWtlIG1vcmUgYXJjaGl0 ZWN0dXJlcyBkb24ndCBkZWZpbmUgc2V0X3BtZF9hdC4gSSBhbSB0aGlua2luZyB0aGUKZWFzaWVz dCB3YXkgZm9yd2FyZCBpcyB0byBqdXN0IGRvIHRoZSBmb2xsb3dpbmcsIGluc3RlYWQgb2YgZGVm aW5pbmcKc2V0X3BtZF9hdCBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlIHRoYXQgZG9lc24ndCBjYXJl IGFib3V0IGl0LiBUaG91Z2h0cz8KCmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1h cC5jCmluZGV4IDdjZjZiMDk0MzA5MC4uMzFhZDY0ZGNkYWU2IDEwMDY0NAotLS0gYS9tbS9tcmVt YXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjgxLDcgKzI4MSw4IEBAIHVuc2lnbmVkIGxvbmcg bW92ZV9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXNwbGl0X2h1 Z2VfcG1kKHZtYSwgb2xkX3BtZCwgb2xkX2FkZHIpOwogCQkJaWYgKHBtZF90cmFuc191bnN0YWJs ZShvbGRfcG1kKSkKIAkJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChleHRlbnQgPT0gUE1EX1NJ WkUgJiYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9NT1ZFX1BNRCkpIHsKKwkJfSBlbHNlIGlmIChl eHRlbnQgPT0gUE1EX1NJWkUpIHsKKyNpZmRlZiBDT05GSUdfSEFWRV9NT1ZFX1BNRAogCQkJLyoK IAkJCSAqIElmIHRoZSBleHRlbnQgaXMgUE1ELXNpemVkLCB0cnkgdG8gc3BlZWQgdGhlIG1vdmUg YnkKIAkJCSAqIG1vdmluZyBhdCB0aGUgUE1EIGxldmVsIGlmIHBvc3NpYmxlLgpAQCAtMjk2LDYg KzI5Nyw3IEBAIHVuc2lnbmVkIGxvbmcgbW92ZV9wYWdlX3RhYmxlcyhzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwKIAkJCQlkcm9wX3JtYXBfbG9ja3Modm1hKTsKIAkJCWlmIChtb3ZlZCkKIAkJ CQljb250aW51ZTsKKyNlbmRpZgogCQl9CiAKIAkJaWYgKHB0ZV9hbGxvYyhuZXdfdm1hLT52bV9t bSwgbmV3X3BtZCkpCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1zbnBzLWFyYyBtYWlsaW5nIGxpc3QKbGludXgtc25wcy1hcmNAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXNucHMtYXJj ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-03 18:32 ` Joel Fernandes @ 2018-11-04 6:56 ` William Kucharski 2018-11-06 4:36 ` Joel Fernandes 0 siblings, 1 reply; 13+ messages in thread From: William Kucharski @ 2018-11-04 6:56 UTC (permalink / raw) To: Joel Fernandes Cc: linux-mips, linux-m68k, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-hexagon, linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, linux-ia64, Yoshinori Sato, linux-xtensa, Richard Weinberger, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley > On Nov 3, 2018, at 12:32 PM, Joel Fernandes <joel@joelfernandes.org> wrote: > > Looks like more architectures don't define set_pmd_at. I am thinking the > easiest way forward is to just do the following, instead of defining > set_pmd_at for every architecture that doesn't care about it. Thoughts? > > diff --git a/mm/mremap.c b/mm/mremap.c > index 7cf6b0943090..31ad64dcdae6 100644 > --- a/mm/mremap.c > +++ b/mm/mremap.c > @@ -281,7 +281,8 @@ unsigned long move_page_tables(struct vm_area_struct *vma, > split_huge_pmd(vma, old_pmd, old_addr); > if (pmd_trans_unstable(old_pmd)) > continue; > - } else if (extent == PMD_SIZE && IS_ENABLED(CONFIG_HAVE_MOVE_PMD)) { > + } else if (extent == PMD_SIZE) { > +#ifdef CONFIG_HAVE_MOVE_PMD > /* > * If the extent is PMD-sized, try to speed the move by > * moving at the PMD level if possible. > @@ -296,6 +297,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma, > drop_rmap_locks(vma); > if (moved) > continue; > +#endif > } > > if (pte_alloc(new_vma->vm_mm, new_pmd)) > That seems reasonable as there are going to be a lot of architectures that never have mappings at the PMD level. Have you thought about what might be needed to extend this paradigm to be able to perform remaps at the PUD level, given many architectures already support PUD-mapped pages? William Kucharski ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH -next 0/3] Add support for fast mremap 2018-11-04 6:56 ` William Kucharski @ 2018-11-06 4:36 ` Joel Fernandes 0 siblings, 0 replies; 13+ messages in thread From: Joel Fernandes @ 2018-11-06 4:36 UTC (permalink / raw) To: William Kucharski Cc: linux-mips, linux-m68k, Rich Felker, linux-sh, Peter Zijlstra, Catalin Marinas, Dave Hansen, Will Deacon, maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), Michal Hocko, linux-mm, lokeshgidra, sparclinux, linux-hexagon, linux-riscv, elfring, Jonas Bonn, kvmarm, dancol, linux-ia64, Yoshinori Sato, linux-xtensa, Richard Weinberger, Helge Deller, r.kernel.org, hughd, James E.J. Bottomley On Sun, Nov 04, 2018 at 12:56:48AM -0600, William Kucharski wrote: > > > > On Nov 3, 2018, at 12:32 PM, Joel Fernandes <joel@joelfernandes.org> wrote: > > > > Looks like more architectures don't define set_pmd_at. I am thinking the > > easiest way forward is to just do the following, instead of defining > > set_pmd_at for every architecture that doesn't care about it. Thoughts? > > > > diff --git a/mm/mremap.c b/mm/mremap.c > > index 7cf6b0943090..31ad64dcdae6 100644 > > --- a/mm/mremap.c > > +++ b/mm/mremap.c > > @@ -281,7 +281,8 @@ unsigned long move_page_tables(struct vm_area_struct *vma, > > split_huge_pmd(vma, old_pmd, old_addr); > > if (pmd_trans_unstable(old_pmd)) > > continue; > > - } else if (extent == PMD_SIZE && IS_ENABLED(CONFIG_HAVE_MOVE_PMD)) { > > + } else if (extent == PMD_SIZE) { > > +#ifdef CONFIG_HAVE_MOVE_PMD > > /* > > * If the extent is PMD-sized, try to speed the move by > > * moving at the PMD level if possible. > > @@ -296,6 +297,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma, > > drop_rmap_locks(vma); > > if (moved) > > continue; > > +#endif > > } > > > > if (pte_alloc(new_vma->vm_mm, new_pmd)) > > > > That seems reasonable as there are going to be a lot of architectures that never have > mappings at the PMD level. Ok, I will do it like this and resend. > Have you thought about what might be needed to extend this paradigm to be able to > perform remaps at the PUD level, given many architectures already support PUD-mapped > pages? > I have thought about this. I believe it is doable in the future. Off the top I don't see an issue doing it, and it will also reduce the number of flushes. thanks, - Joel ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-11-06 4:36 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-03 4:00 [PATCH -next 0/3] Add support for fast mremap Joel Fernandes 2018-11-03 4:00 ` [PATCH -next 1/3] mm: treewide: remove unused address argument from pte_alloc functions (v2) Joel Fernandes 2018-11-03 12:51 ` [PATCH -next v2 1/3] mm: treewide: remove unused address argument from pte_alloc functions SF Markus Elfring 2018-11-03 4:00 ` [PATCH -next 2/3] mm: speed up mremap by 20x on large regions (v4) Joel Fernandes 2018-11-03 16:45 ` kbuild test robot 2018-11-03 16:56 ` kbuild test robot 2018-11-03 4:00 ` [PATCH -next 3/3] mm: select HAVE_MOVE_PMD in x86 for faster mremap Joel Fernandes 2018-11-03 9:15 ` [PATCH -next 0/3] Add support for fast mremap Richard Weinberger 2018-11-03 9:24 ` Anton Ivanov 2018-11-03 15:20 ` Joel Fernandes 2018-11-03 18:32 ` Joel Fernandes 2018-11-04 6:56 ` William Kucharski 2018-11-06 4:36 ` Joel Fernandes
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).