Hi Andrew, Today's linux-next merge of the akpm-current tree got conflicts in: arch/powerpc/include/asm/book3s/32/pgalloc.h arch/powerpc/include/asm/nohash/32/pgalloc.h arch/powerpc/mm/pgtable-book3s64.c between commits: a95d133c8643 ("powerpc/mm: Move pte_fragment_alloc() to a common location") 32ea4c149990 ("powerpc/mm: Extend pte_fragment functionality to PPC32") from the powerpc tree and commit: 913c2d755b39 ("mm: treewide: remove unused address argument from pte_alloc functions") from the akpm-current tree. I fixed it up (see below, plus the extra merge fix patch) and can carry the fix as necessary. This is now fixed as far as linux-next is concerned, but any non trivial conflicts should be mentioned to your upstream maintainer when your tree is submitted for merging. You may also want to consider cooperating with the maintainer of the conflicting tree to minimise any particularly complex conflicts. From: Stephen Rothwell Date: Thu, 6 Dec 2018 17:41:27 +1100 Subject: [PATCH] fix up for "mm: treewide: remove unused address argument from pte_alloc functions" Signed-off-by: Stephen Rothwell --- arch/powerpc/mm/pgtable-frag.c | 2 +- arch/powerpc/mm/pgtable_32.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/mm/pgtable-frag.c b/arch/powerpc/mm/pgtable-frag.c index af23a587f019..a7b05214760c 100644 --- a/arch/powerpc/mm/pgtable-frag.c +++ b/arch/powerpc/mm/pgtable-frag.c @@ -95,7 +95,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 deda68e02338..5b1e1adeb4d2 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c @@ -48,12 +48,12 @@ __ref pte_t *pte_alloc_one_kernel(struct mm_struct *mm) if (!slab_is_available()) return memblock_alloc(PTE_FRAG_SIZE, PTE_FRAG_SIZE); - return (pte_t *)pte_fragment_alloc(mm, address, 1); + return (pte_t *)pte_fragment_alloc(mm, 1); } 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); } void __iomem * -- 2.19.1 -- Cheers, Stephen Rothwell diff --cc arch/powerpc/include/asm/book3s/32/pgalloc.h index b5b955eb2fb7,af9e13555d95..000000000000 --- a/arch/powerpc/include/asm/book3s/32/pgalloc.h +++ b/arch/powerpc/include/asm/book3s/32/pgalloc.h @@@ -56,16 -61,29 +56,16 @@@ static inline void pmd_populate_kernel( static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, pgtable_t pte_page) { - *pmdp = __pmd((page_to_pfn(pte_page) << PAGE_SHIFT) | _PMD_PRESENT); -} - -#define pmd_pgtable(pmd) pmd_page(pmd) -#else - -static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, - pte_t *pte) -{ - *pmdp = __pmd((unsigned long)pte | _PMD_PRESENT); -} - -static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, - pgtable_t pte_page) -{ - *pmdp = __pmd((unsigned long)lowmem_page_address(pte_page) | _PMD_PRESENT); + *pmdp = __pmd(__pa(pte_page) | _PMD_PRESENT); } -#define pmd_pgtable(pmd) pmd_page(pmd) -#endif +#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(pmd)) - 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); +void pte_frag_destroy(void *pte_frag); - 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); +void pte_fragment_free(unsigned long *table, int kernel); static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { diff --cc arch/powerpc/include/asm/nohash/32/pgalloc.h index 17963951bdb0,16623f53f0d4..000000000000 --- a/arch/powerpc/include/asm/nohash/32/pgalloc.h +++ b/arch/powerpc/include/asm/nohash/32/pgalloc.h @@@ -73,17 -77,14 +73,17 @@@ static inline void pmd_populate_kernel( static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, pgtable_t pte_page) { - *pmdp = __pmd((unsigned long)lowmem_page_address(pte_page) | _PMD_PRESENT); + *pmdp = __pmd((unsigned long)pte_page | _PMD_PRESENT); } -#define pmd_pgtable(pmd) pmd_page(pmd) +#define pmd_pgtable(pmd) ((pgtable_t)pmd_page_vaddr(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); +void pte_frag_destroy(void *pte_frag); - 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); +void pte_fragment_free(unsigned long *table, int kernel); static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) { diff --cc arch/powerpc/mm/pgtable-book3s64.c index f3c31f5e1026,6f9d434b0a4c..000000000000 --- a/arch/powerpc/mm/pgtable-book3s64.c +++ b/arch/powerpc/mm/pgtable-book3s64.c