All of lore.kernel.org
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@arm.com>
To: Zhang Jianhua <chris.zjh@huawei.com>
Cc: will@kernel.org, ryan.roberts@arm.com, joey.gouly@arm.com,
	anshuman.khandual@arm.com, ardb@kernel.org, mark.rutland@arm.com,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH -next v2] arm64: fix build warning for ARM64_MEMSTART_SHIFT
Date: Mon, 24 Jul 2023 16:11:56 +0100	[thread overview]
Message-ID: <ZL6UvLlyz3MyVfjr@arm.com> (raw)
In-Reply-To: <20230724172751.3048501-1-chris.zjh@huawei.com>

On Mon, Jul 24, 2023 at 05:27:51PM +0000, Zhang Jianhua wrote:
> When building with W=1, the following warning occurs.
> 
> arch/arm64/include/asm/kernel-pgtable.h:129:41: error: "PUD_SHIFT" is not defined, evaluates to 0 [-Werror=undef]
>   129 | #define ARM64_MEMSTART_SHIFT            PUD_SHIFT
>       |                                         ^~~~~~~~~
> arch/arm64/include/asm/kernel-pgtable.h:142:5: note: in expansion of macro ‘ARM64_MEMSTART_SHIFT’
>   142 | #if ARM64_MEMSTART_SHIFT < SECTION_SIZE_BITS
>       |     ^~~~~~~~~~~~~~~~~~~~

Another thing that's missing here is that the warning is probably when
this file is included from asm-offests.h or some .S file.

> diff --git a/arch/arm64/include/asm/kernel-pgtable.h b/arch/arm64/include/asm/kernel-pgtable.h
> index 577773870b66..51bdce66885d 100644
> --- a/arch/arm64/include/asm/kernel-pgtable.h
> +++ b/arch/arm64/include/asm/kernel-pgtable.h
> @@ -125,12 +125,14 @@
>   * (64k granule), or a multiple that can be mapped using contiguous bits
>   * in the page tables: 32 * PMD_SIZE (16k granule)
>   */
> -#if defined(CONFIG_ARM64_4K_PAGES)
> +#if defined(CONFIG_ARM64_4K_PAGES) && defined(PUD_SHIFT)
>  #define ARM64_MEMSTART_SHIFT		PUD_SHIFT

That's not the correct fix since PUD_SHIFT should always be defined.
When CONFIG_PGTABLE_LEVELS == 3, pgtable-types.h includes
asm-generic/pgtable-nopud.h and this defines PUD_SHIFT. We either got
ARM64_MEMSTART_SHIFT defined in the wrong file or kernel-pgtable.h does
not pull the relevant headers (either directly or via an included
header). Even if kernel-pgtable.h ends up including the nopud/nopmd
headers, P*D_SHIFT is guarded by an #indef __ASSEMBLY__ in those files.

Something like below appears to fix this, though I'm not particularly
fond of guarding the ARM64_MEMSTART_* definitions by #ifndef
__ASSEMBLY__ for no apparent reason (could add a comment though):

-----------------------8<---------------------------
diff --git a/arch/arm64/include/asm/kernel-pgtable.h b/arch/arm64/include/asm/kernel-pgtable.h
index 577773870b66..fcea7e87a6ca 100644
--- a/arch/arm64/include/asm/kernel-pgtable.h
+++ b/arch/arm64/include/asm/kernel-pgtable.h
@@ -118,6 +118,8 @@
 #define SWAPPER_RX_MMUFLAGS	(SWAPPER_RW_MMUFLAGS | PTE_RDONLY)
 #endif
 
+#ifndef __ASSEMBLY__
+
 /*
  * To make optimal use of block mappings when laying out the linear
  * mapping, round down the base of physical memory to a size that can
@@ -145,4 +147,6 @@
 #define ARM64_MEMSTART_ALIGN	(1UL << ARM64_MEMSTART_SHIFT)
 #endif
 
+#endif /* __ASSEMBLY__ */
+
 #endif	/* __ASM_KERNEL_PGTABLE_H */
diff --git a/arch/arm64/include/asm/pgtable-hwdef.h b/arch/arm64/include/asm/pgtable-hwdef.h
index e4944d517c99..22b36f2d5d93 100644
--- a/arch/arm64/include/asm/pgtable-hwdef.h
+++ b/arch/arm64/include/asm/pgtable-hwdef.h
@@ -6,6 +6,7 @@
 #define __ASM_PGTABLE_HWDEF_H
 
 #include <asm/memory.h>
+#include <asm/pgtable-types.h>
 
 /*
  * Number of page-table levels required to address 'va_bits' wide
diff --git a/arch/arm64/include/asm/pgtable-types.h b/arch/arm64/include/asm/pgtable-types.h
index b8f158ae2527..ae86e66fdb11 100644
--- a/arch/arm64/include/asm/pgtable-types.h
+++ b/arch/arm64/include/asm/pgtable-types.h
@@ -11,6 +11,8 @@
 
 #include <asm/types.h>
 
+#ifndef __ASSEMBLY__
+
 typedef u64 pteval_t;
 typedef u64 pmdval_t;
 typedef u64 pudval_t;
@@ -44,6 +46,8 @@ typedef struct { pteval_t pgprot; } pgprot_t;
 #define pgprot_val(x)	((x).pgprot)
 #define __pgprot(x)	((pgprot_t) { (x) } )
 
+#endif /* __ASSEMBLY__ */
+
 #if CONFIG_PGTABLE_LEVELS == 2
 #include <asm-generic/pgtable-nopmd.h>
 #elif CONFIG_PGTABLE_LEVELS == 3
-----------------------8<---------------------------

To avoid guarding the ARM64_MEMSTART_* definitions, we could instead
move the P*D_SHIFT definitions in asm-generic/pgtable-nop*d.h outside
the #ifndef __ASSEMBLY__ block.

-- 
Catalin

  reply	other threads:[~2023-07-24 15:12 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-24 17:27 [PATCH -next v2] arm64: fix build warning for ARM64_MEMSTART_SHIFT Zhang Jianhua
2023-07-24 15:11 ` Catalin Marinas [this message]
2023-07-25  4:22   ` Anshuman Khandual
2023-07-25  8:47     ` zhangjianhua (E)
2023-07-25 10:15       ` Catalin Marinas
2023-07-25 12:03         ` zhangjianhua (E)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZL6UvLlyz3MyVfjr@arm.com \
    --to=catalin.marinas@arm.com \
    --cc=anshuman.khandual@arm.com \
    --cc=ardb@kernel.org \
    --cc=chris.zjh@huawei.com \
    --cc=joey.gouly@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=ryan.roberts@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.