All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] fix recent nds32 build breakage
@ 2019-12-23 11:00 Mike Rapoport
  2019-12-23 11:00 ` [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives Mike Rapoport
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Mike Rapoport @ 2019-12-23 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Nick Hu, Greentime Hu, Vincent Chen, Arnd Bergmann, linux-arch,
	Mike Rapoport, Mike Rapoport

From: Mike Rapoport <rppt@linux.ibm.com>

Hi,

The kbuild robot reported build breakage of nds32 architecture [1] that
happens with CONFIG_CPU_CACHE_ALIASING=n and CONFIG_HUGHMEM=y.

There are two issues: one with a missing macro during conversion of page
folding and another one is a conflict between cacheflush.h definitions in
arch/nds32 and asm-generic.

[1] https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/

Mike Rapoport (2):
  asm-generic/nds32: don't redefine cacheflush primitives
  nds32: fix build failure caused by page table folding updates

 arch/nds32/include/asm/cacheflush.h | 11 ++++++----
 arch/nds32/include/asm/pgtable.h    |  2 +-
 include/asm-generic/cacheflush.h    | 33 ++++++++++++++++++++++++++++-
 3 files changed, 40 insertions(+), 6 deletions(-)

-- 
2.24.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives
  2019-12-23 11:00 [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
@ 2019-12-23 11:00 ` Mike Rapoport
  2019-12-24  2:13   ` Greentime Hu
  2019-12-23 11:00 ` [PATCH 2/2] nds32: fix build failure caused by page table folding updates Mike Rapoport
  2019-12-27 11:07 ` [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
  2 siblings, 1 reply; 7+ messages in thread
From: Mike Rapoport @ 2019-12-23 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Nick Hu, Greentime Hu, Vincent Chen, Arnd Bergmann, linux-arch,
	Mike Rapoport, Mike Rapoport, kbuild test robot

From: Mike Rapoport <rppt@linux.ibm.com>

The commit c296d4dc13ae ("asm-generic: fix a compilation warning") changed
asm-generic/cachflush.h to use static inlines instead of macros and as a
result the nds32 build with CONFIG_CPU_CACHE_ALIASING=n fails:

  CC      init/main.o
In file included from arch/nds32/include/asm/cacheflush.h:43,
                 from include/linux/highmem.h:12,
                 from include/linux/pagemap.h:11,
                 from include/linux/blkdev.h:16,
                 from include/linux/blk-cgroup.h:23,
                 from include/linux/writeback.h:14,
                 from init/main.c:44:
include/asm-generic/cacheflush.h:50:20: error: static declaration of 'flush_icache_range' follows non-static declaration
 static inline void flush_icache_range(unsigned long start, unsigned long end)
                    ^~~~~~~~~~~~~~~~~~
In file included from include/linux/highmem.h:12,
                 from include/linux/pagemap.h:11,
                 from include/linux/blkdev.h:16,
                 from include/linux/blk-cgroup.h:23,
                 from include/linux/writeback.h:14,
                 from init/main.c:44:
arch/nds32/include/asm/cacheflush.h:11:6: note: previous declaration of 'flush_icache_range' was here
 void flush_icache_range(unsigned long start, unsigned long end);
      ^~~~~~~~~~~~~~~~~~

Surround the inline functions in asm-generic/cacheflush.h by ifdef's so
that architectures could override them and add the required overrides to
nds32.

Fixes: c296d4dc13ae ("asm-generic: fix a compilation warning")
Link: https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/
Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/nds32/include/asm/cacheflush.h | 11 ++++++----
 include/asm-generic/cacheflush.h    | 33 ++++++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/arch/nds32/include/asm/cacheflush.h b/arch/nds32/include/asm/cacheflush.h
index d9ac7e6408ef..caddded56e77 100644
--- a/arch/nds32/include/asm/cacheflush.h
+++ b/arch/nds32/include/asm/cacheflush.h
@@ -9,7 +9,11 @@
 #define PG_dcache_dirty PG_arch_1
 
 void flush_icache_range(unsigned long start, unsigned long end);
+#define flush_icache_range flush_icache_range
+
 void flush_icache_page(struct vm_area_struct *vma, struct page *page);
+#define flush_icache_page flush_icache_page
+
 #ifdef CONFIG_CPU_CACHE_ALIASING
 void flush_cache_mm(struct mm_struct *mm);
 void flush_cache_dup_mm(struct mm_struct *mm);
@@ -40,12 +44,11 @@ void invalidate_kernel_vmap_range(void *addr, int size);
 #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&(mapping)->i_pages)
 
 #else
-#include <asm-generic/cacheflush.h>
-#undef flush_icache_range
-#undef flush_icache_page
-#undef flush_icache_user_range
 void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
 	                     unsigned long addr, int len);
+#define flush_icache_user_range flush_icache_user_range
+
+#include <asm-generic/cacheflush.h>
 #endif
 
 #endif /* __NDS32_CACHEFLUSH_H__ */
diff --git a/include/asm-generic/cacheflush.h b/include/asm-generic/cacheflush.h
index a950a22c4890..cac7404b2bdd 100644
--- a/include/asm-generic/cacheflush.h
+++ b/include/asm-generic/cacheflush.h
@@ -11,71 +11,102 @@
  * The cache doesn't need to be flushed when TLB entries change when
  * the cache is mapped to physical memory, not virtual memory
  */
+#ifndef flush_cache_all
 static inline void flush_cache_all(void)
 {
 }
+#endif
 
+#ifndef flush_cache_mm
 static inline void flush_cache_mm(struct mm_struct *mm)
 {
 }
+#endif
 
+#ifndef flush_cache_dup_mm
 static inline void flush_cache_dup_mm(struct mm_struct *mm)
 {
 }
+#endif
 
+#ifndef flush_cache_range
 static inline void flush_cache_range(struct vm_area_struct *vma,
 				     unsigned long start,
 				     unsigned long end)
 {
 }
+#endif
 
+#ifndef flush_cache_page
 static inline void flush_cache_page(struct vm_area_struct *vma,
 				    unsigned long vmaddr,
 				    unsigned long pfn)
 {
 }
+#endif
 
+#ifndef flush_dcache_page
 static inline void flush_dcache_page(struct page *page)
 {
 }
+#endif
 
+#ifndef flush_dcache_mmap_lock
 static inline void flush_dcache_mmap_lock(struct address_space *mapping)
 {
 }
+#endif
 
+#ifndef flush_dcache_mmap_unlock
 static inline void flush_dcache_mmap_unlock(struct address_space *mapping)
 {
 }
+#endif
 
+#ifndef flush_icache_range
 static inline void flush_icache_range(unsigned long start, unsigned long end)
 {
 }
+#endif
 
+#ifndef flush_icache_page
 static inline void flush_icache_page(struct vm_area_struct *vma,
 				     struct page *page)
 {
 }
+#endif
 
+#ifndef flush_icache_user_range
 static inline void flush_icache_user_range(struct vm_area_struct *vma,
 					   struct page *page,
 					   unsigned long addr, int len)
 {
 }
+#endif
 
+#ifndef flush_cache_vmap
 static inline void flush_cache_vmap(unsigned long start, unsigned long end)
 {
 }
+#endif
 
+#ifndef flush_cache_vunmap
 static inline void flush_cache_vunmap(unsigned long start, unsigned long end)
 {
 }
+#endif
 
-#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
+#ifndef copy_to_user_page
+#define copy_to_user_page(vma, page, vaddr, dst, src, len)	\
 	do { \
 		memcpy(dst, src, len); \
 		flush_icache_user_range(vma, page, vaddr, len); \
 	} while (0)
+#endif
+
+#ifndef copy_from_user_page
 #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
 	memcpy(dst, src, len)
+#endif
 
 #endif /* __ASM_CACHEFLUSH_H */
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] nds32: fix build failure caused by page table folding updates
  2019-12-23 11:00 [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
  2019-12-23 11:00 ` [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives Mike Rapoport
@ 2019-12-23 11:00 ` Mike Rapoport
  2019-12-24  2:14   ` Greentime Hu
  2019-12-27 11:07 ` [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
  2 siblings, 1 reply; 7+ messages in thread
From: Mike Rapoport @ 2019-12-23 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Nick Hu, Greentime Hu, Vincent Chen, Arnd Bergmann, linux-arch,
	Mike Rapoport, Mike Rapoport, kbuild test robot

From: Mike Rapoport <rppt@linux.ibm.com>

The commit 7c2763c42326 ("nds32: use pgtable-nopmd instead of
4level-fixup") missed the pmd_off_k() macro which caused the following
build error:

  CC      arch/nds32/mm/highmem.o
In file included from arch/nds32/include/asm/page.h:57,
                 from include/linux/mm_types_task.h:16,
                 from include/linux/mm_types.h:5,
                 from include/linux/mmzone.h:21,
                 from include/linux/gfp.h:6,
                 from include/linux/xarray.h:14,
                 from include/linux/radix-tree.h:18,
                 from include/linux/fs.h:15,
                 from include/linux/highmem.h:5,
                 from arch/nds32/mm/highmem.c:5:
arch/nds32/mm/highmem.c: In function 'kmap_atomic':
arch/nds32/include/asm/pgtable.h:360:44: error: passing argument 1 of 'pmd_offset' from incompatible pointer type [-Werror=incompatible-pointer-types]
 #define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address))
                                 ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
arch/nds32/include/asm/memory.h:33:29: note: in definition of macro '__phys_to_virt'
 #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)
                             ^
arch/nds32/include/asm/pgtable.h:193:55: note: in expansion of macro '__va'
 #define pmd_page_kernel(pmd)         ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
                                                       ^~~~
include/asm-generic/pgtable-nop4d.h:41:24: note: in expansion of macro 'pgd_val'
 #define p4d_val(x)    (pgd_val((x).pgd))
                        ^~~~~~~
include/asm-generic/pgtable-nopud.h:50:24: note: in expansion of macro 'p4d_val'
 #define pud_val(x)    (p4d_val((x).p4d))
                        ^~~~~~~
include/asm-generic/pgtable-nopmd.h:49:24: note: in expansion of macro 'pud_val'
 #define pmd_val(x)    (pud_val((x).pud))
                        ^~~~~~~
arch/nds32/include/asm/pgtable.h:193:60: note: in expansion of macro 'pmd_val'
 #define pmd_page_kernel(pmd)         ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
                                                            ^~~~~~~
arch/nds32/include/asm/pgtable.h:190:56: note: in expansion of macro 'pmd_page_kernel'
 #define pte_offset_kernel(dir, address)      ((pte_t *)pmd_page_kernel(*(dir)) + pte_index(address))
                                                        ^~~~~~~~~~~~~~~
arch/nds32/mm/highmem.c:52:9: note: in expansion of macro 'pte_offset_kernel'
  ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
         ^~~~~~~~~~~~~~~~~
arch/nds32/include/asm/pgtable.h:362:33: note: in expansion of macro 'pgd_offset'
 #define pgd_offset_k(addr)      pgd_offset(&init_mm, addr)
                                 ^~~~~~~~~~
arch/nds32/include/asm/pgtable.h:198:39: note: in expansion of macro 'pgd_offset_k'
 #define pmd_off_k(address) pmd_offset(pgd_offset_k(address), address)
                                       ^~~~~~~~~~~~
arch/nds32/mm/highmem.c:52:27: note: in expansion of macro 'pmd_off_k'
  ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
                           ^~~~~~~~~
In file included from arch/nds32/include/asm/pgtable.h:7,
                 from include/linux/mm.h:99,
                 from include/linux/highmem.h:8,
                 from arch/nds32/mm/highmem.c:5:
include/asm-generic/pgtable-nopmd.h:44:42: note: expected 'pud_t *' {aka 'struct <anonymous> *'} but argument is of type 'pgd_t *' {aka 'long unsigned int *'}
 static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
                                  ~~~~~~~~^~~
In file included from arch/nds32/include/asm/page.h:57,
                 from include/linux/mm_types_task.h:16,
                 from include/linux/mm_types.h:5,
                 from include/linux/mmzone.h:21,
                 from include/linux/gfp.h:6,
                 from include/linux/xarray.h:14,
                 from include/linux/radix-tree.h:18,
                 from include/linux/fs.h:15,
                 from include/linux/highmem.h:5,
                 from arch/nds32/mm/highmem.c:5:

Updating the pmd_off_k() macro to use the correct page table unfolding
fixes the issue.

Fixes: 7c2763c42326 ("nds32: use pgtable-nopmd instead of 4level-fixup")
Link: https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/
Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/nds32/include/asm/pgtable.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/nds32/include/asm/pgtable.h b/arch/nds32/include/asm/pgtable.h
index 0214e4150539..6abc58ac406d 100644
--- a/arch/nds32/include/asm/pgtable.h
+++ b/arch/nds32/include/asm/pgtable.h
@@ -195,7 +195,7 @@ extern void paging_init(void);
 #define pte_unmap(pte)		do { } while (0)
 #define pte_unmap_nested(pte)	do { } while (0)
 
-#define pmd_off_k(address)	pmd_offset(pgd_offset_k(address), address)
+#define pmd_off_k(address)	pmd_offset(pud_offset(p4d_offset(pgd_offset_k(address), (address)), (address)), (address))
 
 #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
 /*
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives
  2019-12-23 11:00 ` [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives Mike Rapoport
@ 2019-12-24  2:13   ` Greentime Hu
  0 siblings, 0 replies; 7+ messages in thread
From: Greentime Hu @ 2019-12-24  2:13 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Linux Kernel Mailing List, Nick Hu, Vincent Chen, Arnd Bergmann,
	linux-arch, Mike Rapoport, kbuild test robot

Mike Rapoport <rppt@kernel.org> 於 2019年12月23日 週一 下午7:00寫道:
>
> From: Mike Rapoport <rppt@linux.ibm.com>
>
> The commit c296d4dc13ae ("asm-generic: fix a compilation warning") changed
> asm-generic/cachflush.h to use static inlines instead of macros and as a
> result the nds32 build with CONFIG_CPU_CACHE_ALIASING=n fails:
>
>   CC      init/main.o
> In file included from arch/nds32/include/asm/cacheflush.h:43,
>                  from include/linux/highmem.h:12,
>                  from include/linux/pagemap.h:11,
>                  from include/linux/blkdev.h:16,
>                  from include/linux/blk-cgroup.h:23,
>                  from include/linux/writeback.h:14,
>                  from init/main.c:44:
> include/asm-generic/cacheflush.h:50:20: error: static declaration of 'flush_icache_range' follows non-static declaration
>  static inline void flush_icache_range(unsigned long start, unsigned long end)
>                     ^~~~~~~~~~~~~~~~~~
> In file included from include/linux/highmem.h:12,
>                  from include/linux/pagemap.h:11,
>                  from include/linux/blkdev.h:16,
>                  from include/linux/blk-cgroup.h:23,
>                  from include/linux/writeback.h:14,
>                  from init/main.c:44:
> arch/nds32/include/asm/cacheflush.h:11:6: note: previous declaration of 'flush_icache_range' was here
>  void flush_icache_range(unsigned long start, unsigned long end);
>       ^~~~~~~~~~~~~~~~~~
>
> Surround the inline functions in asm-generic/cacheflush.h by ifdef's so
> that architectures could override them and add the required overrides to
> nds32.
>
> Fixes: c296d4dc13ae ("asm-generic: fix a compilation warning")
> Link: https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/
> Reported-by: kbuild test robot <lkp@intel.com>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
>  arch/nds32/include/asm/cacheflush.h | 11 ++++++----
>  include/asm-generic/cacheflush.h    | 33 ++++++++++++++++++++++++++++-
>  2 files changed, 39 insertions(+), 5 deletions(-)
>
> diff --git a/arch/nds32/include/asm/cacheflush.h b/arch/nds32/include/asm/cacheflush.h
> index d9ac7e6408ef..caddded56e77 100644
> --- a/arch/nds32/include/asm/cacheflush.h
> +++ b/arch/nds32/include/asm/cacheflush.h
> @@ -9,7 +9,11 @@
>  #define PG_dcache_dirty PG_arch_1
>
>  void flush_icache_range(unsigned long start, unsigned long end);
> +#define flush_icache_range flush_icache_range
> +
>  void flush_icache_page(struct vm_area_struct *vma, struct page *page);
> +#define flush_icache_page flush_icache_page
> +
>  #ifdef CONFIG_CPU_CACHE_ALIASING
>  void flush_cache_mm(struct mm_struct *mm);
>  void flush_cache_dup_mm(struct mm_struct *mm);
> @@ -40,12 +44,11 @@ void invalidate_kernel_vmap_range(void *addr, int size);
>  #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&(mapping)->i_pages)
>
>  #else
> -#include <asm-generic/cacheflush.h>
> -#undef flush_icache_range
> -#undef flush_icache_page
> -#undef flush_icache_user_range
>  void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
>                              unsigned long addr, int len);
> +#define flush_icache_user_range flush_icache_user_range
> +
> +#include <asm-generic/cacheflush.h>
>  #endif
>
>  #endif /* __NDS32_CACHEFLUSH_H__ */
> diff --git a/include/asm-generic/cacheflush.h b/include/asm-generic/cacheflush.h
> index a950a22c4890..cac7404b2bdd 100644
> --- a/include/asm-generic/cacheflush.h
> +++ b/include/asm-generic/cacheflush.h
> @@ -11,71 +11,102 @@
>   * The cache doesn't need to be flushed when TLB entries change when
>   * the cache is mapped to physical memory, not virtual memory
>   */
> +#ifndef flush_cache_all
>  static inline void flush_cache_all(void)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_mm
>  static inline void flush_cache_mm(struct mm_struct *mm)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_dup_mm
>  static inline void flush_cache_dup_mm(struct mm_struct *mm)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_range
>  static inline void flush_cache_range(struct vm_area_struct *vma,
>                                      unsigned long start,
>                                      unsigned long end)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_page
>  static inline void flush_cache_page(struct vm_area_struct *vma,
>                                     unsigned long vmaddr,
>                                     unsigned long pfn)
>  {
>  }
> +#endif
>
> +#ifndef flush_dcache_page
>  static inline void flush_dcache_page(struct page *page)
>  {
>  }
> +#endif
>
> +#ifndef flush_dcache_mmap_lock
>  static inline void flush_dcache_mmap_lock(struct address_space *mapping)
>  {
>  }
> +#endif
>
> +#ifndef flush_dcache_mmap_unlock
>  static inline void flush_dcache_mmap_unlock(struct address_space *mapping)
>  {
>  }
> +#endif
>
> +#ifndef flush_icache_range
>  static inline void flush_icache_range(unsigned long start, unsigned long end)
>  {
>  }
> +#endif
>
> +#ifndef flush_icache_page
>  static inline void flush_icache_page(struct vm_area_struct *vma,
>                                      struct page *page)
>  {
>  }
> +#endif
>
> +#ifndef flush_icache_user_range
>  static inline void flush_icache_user_range(struct vm_area_struct *vma,
>                                            struct page *page,
>                                            unsigned long addr, int len)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_vmap
>  static inline void flush_cache_vmap(unsigned long start, unsigned long end)
>  {
>  }
> +#endif
>
> +#ifndef flush_cache_vunmap
>  static inline void flush_cache_vunmap(unsigned long start, unsigned long end)
>  {
>  }
> +#endif
>
> -#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
> +#ifndef copy_to_user_page
> +#define copy_to_user_page(vma, page, vaddr, dst, src, len)     \
>         do { \
>                 memcpy(dst, src, len); \
>                 flush_icache_user_range(vma, page, vaddr, len); \
>         } while (0)
> +#endif
> +
> +#ifndef copy_from_user_page
>  #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
>         memcpy(dst, src, len)
> +#endif
>
>  #endif /* __ASM_CACHEFLUSH_H */

Thank you, Mike.
Reviewed-by: Greentime Hu <green.hu@gmail.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] nds32: fix build failure caused by page table folding updates
  2019-12-23 11:00 ` [PATCH 2/2] nds32: fix build failure caused by page table folding updates Mike Rapoport
@ 2019-12-24  2:14   ` Greentime Hu
  0 siblings, 0 replies; 7+ messages in thread
From: Greentime Hu @ 2019-12-24  2:14 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Linux Kernel Mailing List, Nick Hu, Vincent Chen, Arnd Bergmann,
	linux-arch, Mike Rapoport, kbuild test robot

Mike Rapoport <rppt@kernel.org> 於 2019年12月23日 週一 下午7:00寫道:
>
> From: Mike Rapoport <rppt@linux.ibm.com>
>
> The commit 7c2763c42326 ("nds32: use pgtable-nopmd instead of
> 4level-fixup") missed the pmd_off_k() macro which caused the following
> build error:
>
>   CC      arch/nds32/mm/highmem.o
> In file included from arch/nds32/include/asm/page.h:57,
>                  from include/linux/mm_types_task.h:16,
>                  from include/linux/mm_types.h:5,
>                  from include/linux/mmzone.h:21,
>                  from include/linux/gfp.h:6,
>                  from include/linux/xarray.h:14,
>                  from include/linux/radix-tree.h:18,
>                  from include/linux/fs.h:15,
>                  from include/linux/highmem.h:5,
>                  from arch/nds32/mm/highmem.c:5:
> arch/nds32/mm/highmem.c: In function 'kmap_atomic':
> arch/nds32/include/asm/pgtable.h:360:44: error: passing argument 1 of 'pmd_offset' from incompatible pointer type [-Werror=incompatible-pointer-types]
>  #define pgd_offset(mm, address) ((mm)->pgd + pgd_index(address))
>                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
> arch/nds32/include/asm/memory.h:33:29: note: in definition of macro '__phys_to_virt'
>  #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET)
>                              ^
> arch/nds32/include/asm/pgtable.h:193:55: note: in expansion of macro '__va'
>  #define pmd_page_kernel(pmd)         ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
>                                                        ^~~~
> include/asm-generic/pgtable-nop4d.h:41:24: note: in expansion of macro 'pgd_val'
>  #define p4d_val(x)    (pgd_val((x).pgd))
>                         ^~~~~~~
> include/asm-generic/pgtable-nopud.h:50:24: note: in expansion of macro 'p4d_val'
>  #define pud_val(x)    (p4d_val((x).p4d))
>                         ^~~~~~~
> include/asm-generic/pgtable-nopmd.h:49:24: note: in expansion of macro 'pud_val'
>  #define pmd_val(x)    (pud_val((x).pud))
>                         ^~~~~~~
> arch/nds32/include/asm/pgtable.h:193:60: note: in expansion of macro 'pmd_val'
>  #define pmd_page_kernel(pmd)         ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
>                                                             ^~~~~~~
> arch/nds32/include/asm/pgtable.h:190:56: note: in expansion of macro 'pmd_page_kernel'
>  #define pte_offset_kernel(dir, address)      ((pte_t *)pmd_page_kernel(*(dir)) + pte_index(address))
>                                                         ^~~~~~~~~~~~~~~
> arch/nds32/mm/highmem.c:52:9: note: in expansion of macro 'pte_offset_kernel'
>   ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
>          ^~~~~~~~~~~~~~~~~
> arch/nds32/include/asm/pgtable.h:362:33: note: in expansion of macro 'pgd_offset'
>  #define pgd_offset_k(addr)      pgd_offset(&init_mm, addr)
>                                  ^~~~~~~~~~
> arch/nds32/include/asm/pgtable.h:198:39: note: in expansion of macro 'pgd_offset_k'
>  #define pmd_off_k(address) pmd_offset(pgd_offset_k(address), address)
>                                        ^~~~~~~~~~~~
> arch/nds32/mm/highmem.c:52:27: note: in expansion of macro 'pmd_off_k'
>   ptep = pte_offset_kernel(pmd_off_k(vaddr), vaddr);
>                            ^~~~~~~~~
> In file included from arch/nds32/include/asm/pgtable.h:7,
>                  from include/linux/mm.h:99,
>                  from include/linux/highmem.h:8,
>                  from arch/nds32/mm/highmem.c:5:
> include/asm-generic/pgtable-nopmd.h:44:42: note: expected 'pud_t *' {aka 'struct <anonymous> *'} but argument is of type 'pgd_t *' {aka 'long unsigned int *'}
>  static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
>                                   ~~~~~~~~^~~
> In file included from arch/nds32/include/asm/page.h:57,
>                  from include/linux/mm_types_task.h:16,
>                  from include/linux/mm_types.h:5,
>                  from include/linux/mmzone.h:21,
>                  from include/linux/gfp.h:6,
>                  from include/linux/xarray.h:14,
>                  from include/linux/radix-tree.h:18,
>                  from include/linux/fs.h:15,
>                  from include/linux/highmem.h:5,
>                  from arch/nds32/mm/highmem.c:5:
>
> Updating the pmd_off_k() macro to use the correct page table unfolding
> fixes the issue.
>
> Fixes: 7c2763c42326 ("nds32: use pgtable-nopmd instead of 4level-fixup")
> Link: https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/
> Reported-by: kbuild test robot <lkp@intel.com>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
>  arch/nds32/include/asm/pgtable.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/nds32/include/asm/pgtable.h b/arch/nds32/include/asm/pgtable.h
> index 0214e4150539..6abc58ac406d 100644
> --- a/arch/nds32/include/asm/pgtable.h
> +++ b/arch/nds32/include/asm/pgtable.h
> @@ -195,7 +195,7 @@ extern void paging_init(void);
>  #define pte_unmap(pte)         do { } while (0)
>  #define pte_unmap_nested(pte)  do { } while (0)
>
> -#define pmd_off_k(address)     pmd_offset(pgd_offset_k(address), address)
> +#define pmd_off_k(address)     pmd_offset(pud_offset(p4d_offset(pgd_offset_k(address), (address)), (address)), (address))
>
>  #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
>  /*

Thank you, Mike.
Reviewed-by: Greentime Hu <green.hu@gmail.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] fix recent nds32 build breakage
  2019-12-23 11:00 [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
  2019-12-23 11:00 ` [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives Mike Rapoport
  2019-12-23 11:00 ` [PATCH 2/2] nds32: fix build failure caused by page table folding updates Mike Rapoport
@ 2019-12-27 11:07 ` Mike Rapoport
  2019-12-30 10:21   ` Arnd Bergmann
  2 siblings, 1 reply; 7+ messages in thread
From: Mike Rapoport @ 2019-12-27 11:07 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Nick Hu, Greentime Hu, Vincent Chen, linux-arch, linux-kernel,
	Mike Rapoport, Mike Rapoport

Arnd,

Can you please take these via asm-generic tree?

On Mon, Dec 23, 2019 at 01:00:02PM +0200, Mike Rapoport wrote:
> From: Mike Rapoport <rppt@linux.ibm.com>
> 
> Hi,
> 
> The kbuild robot reported build breakage of nds32 architecture [1] that
> happens with CONFIG_CPU_CACHE_ALIASING=n and CONFIG_HUGHMEM=y.
> 
> There are two issues: one with a missing macro during conversion of page
> folding and another one is a conflict between cacheflush.h definitions in
> arch/nds32 and asm-generic.
> 
> [1] https://lore.kernel.org/lkml/201912212139.yptX8CsV%25lkp@intel.com/
> 
> Mike Rapoport (2):
>   asm-generic/nds32: don't redefine cacheflush primitives
>   nds32: fix build failure caused by page table folding updates
> 
>  arch/nds32/include/asm/cacheflush.h | 11 ++++++----
>  arch/nds32/include/asm/pgtable.h    |  2 +-
>  include/asm-generic/cacheflush.h    | 33 ++++++++++++++++++++++++++++-
>  3 files changed, 40 insertions(+), 6 deletions(-)
> 
> -- 
> 2.24.0
> 

-- 
Sincerely yours,
Mike.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] fix recent nds32 build breakage
  2019-12-27 11:07 ` [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
@ 2019-12-30 10:21   ` Arnd Bergmann
  0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2019-12-30 10:21 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Nick Hu, Greentime Hu, Vincent Chen, linux-arch, linux-kernel,
	Mike Rapoport

On Fri, Dec 27, 2019 at 12:07 PM Mike Rapoport <rppt@kernel.org> wrote:
> Can you please take these via asm-generic tree?

Merged into my asm-generic tree now, I'll send a pull request in a few days
after the build bots have had a chance to check for remaining problems.

       Arnd

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-12-30 10:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-23 11:00 [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
2019-12-23 11:00 ` [PATCH 1/2] asm-generic/nds32: don't redefine cacheflush primitives Mike Rapoport
2019-12-24  2:13   ` Greentime Hu
2019-12-23 11:00 ` [PATCH 2/2] nds32: fix build failure caused by page table folding updates Mike Rapoport
2019-12-24  2:14   ` Greentime Hu
2019-12-27 11:07 ` [PATCH 0/2] fix recent nds32 build breakage Mike Rapoport
2019-12-30 10:21   ` Arnd Bergmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.