mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] sparc64: Define p4d_page() instead of stubbing it to NULL
@ 2026-10-05 20:39 Rosen Penev
  2026-10-06  7:59 ` Kjetil Oftedal
  0 siblings, 1 reply; 3+ messages in thread
From: Rosen Penev @ 2026-10-05 20:39 UTC (permalink / raw)
  To: sparclinux
  Cc: David S. Miller, Andreas Larsson, Nathan Chancellor,
	Nick Desaulniers, Bill Wendling, Justin Stitt, open list,
	open list:CLANG/LLVM BUILD SUPPORT:Keyword:b(?i:clang|llvm)b

A sparc64 allmodconfig build with LLVM fails in vmalloc_to_page():

  mm/vmalloc.c: error: performing pointer arithmetic on a null pointer
  has undefined behavior [-Werror,-Wnull-pointer-arithmetic]

sparc64 defines p4d_page() as NULL, on the assumption that it is only
used by stubbed out hugetlb gup code. Generic code now uses it in
vmalloc_to_page(), ptdump and KASAN. In vmalloc_to_page() the NULL is
used in pointer arithmetic, which clang diagnoses even though the
branch is unreachable on sparc64.

Define p4d_page() in terms of p4d_pgtable(), the same way pud_page() is
defined in terms of pud_pgtable(). sparc64 has no p4d leaf mappings, so
there is no functional change.

Assisted-by: LLM
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 arch/sparc/include/asm/pgtable_64.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h
index 35a217bf6e5c..c5eff6efe514 100644
--- a/arch/sparc/include/asm/pgtable_64.h
+++ b/arch/sparc/include/asm/pgtable_64.h
@@ -850,8 +850,7 @@ static inline pmd_t *pud_pgtable(pud_t pud)
 #define p4d_present(p4d)		(p4d_val(p4d) != 0U)
 #define p4d_clear(p4dp)			(p4d_val(*(p4dp)) = 0UL)
 
-/* only used by the stubbed out hugetlb gup code, should never be called */
-#define p4d_page(p4d)			NULL
+#define p4d_page(p4d)			virt_to_page((void *)p4d_pgtable(p4d))
 
 #define pud_leaf pud_leaf
 static inline bool pud_leaf(pud_t pud)
-- 
2.56.0


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

* Re: [PATCH] sparc64: Define p4d_page() instead of stubbing it to NULL
  2026-10-05 20:39 [PATCH] sparc64: Define p4d_page() instead of stubbing it to NULL Rosen Penev
@ 2026-10-06  7:59 ` Kjetil Oftedal
  2026-10-06  8:31   ` Nathan Chancellor
  0 siblings, 1 reply; 3+ messages in thread
From: Kjetil Oftedal @ 2026-10-06  7:59 UTC (permalink / raw)
  To: Rosen Penev
  Cc: sparclinux, David S. Miller, Andreas Larsson, Nathan Chancellor,
	Nick Desaulniers, Bill Wendling, Justin Stitt, open list,
	open list:CLANG/LLVM BUILD SUPPORT:Keyword:b(?i:clang|llvm)b

On Mon, 5 Oct 2026 at 22:41, Rosen Penev <rosenp@gmail.com> wrote:
>
> A sparc64 allmodconfig build with LLVM fails in vmalloc_to_page():
>
>   mm/vmalloc.c: error: performing pointer arithmetic on a null pointer
>   has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
>
> sparc64 defines p4d_page() as NULL, on the assumption that it is only
> used by stubbed out hugetlb gup code. Generic code now uses it in
> vmalloc_to_page(), ptdump and KASAN. In vmalloc_to_page() the NULL is
> used in pointer arithmetic, which clang diagnoses even though the
> branch is unreachable on sparc64.
>

Has this been reported as a bug to the clang project?
As it throwing an error on a rather obviously unreachable branch.


Best regards,
Kjetil Oftedal

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

* Re: [PATCH] sparc64: Define p4d_page() instead of stubbing it to NULL
  2026-10-06  7:59 ` Kjetil Oftedal
@ 2026-10-06  8:31   ` Nathan Chancellor
  0 siblings, 0 replies; 3+ messages in thread
From: Nathan Chancellor @ 2026-10-06  8:31 UTC (permalink / raw)
  To: Kjetil Oftedal
  Cc: Rosen Penev, sparclinux, David S. Miller, Andreas Larsson,
	Nick Desaulniers, Bill Wendling, Justin Stitt, open list,
	open list:CLANG/LLVM BUILD SUPPORT:Keyword:b(?i:clang|llvm)b

On Tue, Oct 06, 2026 at 09:59:19AM +0200, Kjetil Oftedal wrote:
> On Mon, 5 Oct 2026 at 22:41, Rosen Penev <rosenp@gmail.com> wrote:
> >
> > A sparc64 allmodconfig build with LLVM fails in vmalloc_to_page():
> >
> >   mm/vmalloc.c: error: performing pointer arithmetic on a null pointer
> >   has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
> >
> > sparc64 defines p4d_page() as NULL, on the assumption that it is only
> > used by stubbed out hugetlb gup code. Generic code now uses it in
> > vmalloc_to_page(), ptdump and KASAN. In vmalloc_to_page() the NULL is
> > used in pointer arithmetic, which clang diagnoses even though the
> > branch is unreachable on sparc64.
> >
> 
> Has this been reported as a bug to the clang project?
> As it throwing an error on a rather obviously unreachable branch.

Technically the error part is self-inflicted on the part of the kernel
since allmodconfig enables CONFIG_WERROR. That said, while it might be
nice for the compiler not to warn in any case of dead code, that's just
not how it works for either GCC or clang (none of these should be
visible if that were the case):

  https://godbolt.org/z/K3nfW4n5f

-- 
Cheers,
Nathan

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

end of thread, other threads:[~2026-10-06  8:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-05 20:39 [PATCH] sparc64: Define p4d_page() instead of stubbing it to NULL Rosen Penev
2026-10-06  7:59 ` Kjetil Oftedal
2026-10-06  8:31   ` Nathan Chancellor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®