From: Ingo Molnar <mingo@kernel.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org, linux-tip-commits@vger.kernel.org,
kernel test robot <lkp@intel.com>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
x86@kernel.org
Subject: [PATCH] x86/mm: Define PTRS_PER_PMD for assembly code too
Date: Thu, 6 Mar 2025 23:00:16 +0100 [thread overview]
Message-ID: <Z8oa8AUVyi2HWfo9@gmail.com> (raw)
In-Reply-To: <Z8oSAQiBvVJ_METQ@gmail.com>
* Ingo Molnar <mingo@kernel.org> wrote:
> Separating out the assembler-compatible defines from the types
> headers appears to be a bigger patch, since it's all mixed in with C
> syntax:
>
> <=-----------------------------------===============================
> typedef struct { pud_t pud; } pmd_t;
>
> #define PMD_SHIFT PUD_SHIFT
> #define PTRS_PER_PMD 1
> #define PMD_SIZE (1UL << PMD_SHIFT)
> #define PMD_MASK (~(PMD_SIZE-1))
>
> /*
> * The "pud_xxx()" functions here are trivial for a folded two-level
> * setup: the pmd is never bad, and a pmd always exists (as it's folded
> * into the pud entry)
> */
> static inline int pud_none(pud_t pud) { return 0; }
> static inline int pud_bad(pud_t pud) { return 0; }
> static inline int pud_present(pud_t pud) { return 1; }
> ================================================================>
>
> In any case I've removed the commit for the time being until this all
> is cleared up.
So there's a simple solution: define it on i386 too, via the patch
below. It appears the double-definition doesn't create any warnings, on
GCC at least.
But if it's an issue, we could do something like this in
<asm-generic/pgtable-nopmd.h>:
#if defined(PTRS_PER_PMD) && (PTRS_PER_PMD != 1)
# error "mm: Wait a minute, that's a super confusing pagetable setup ..."
#endif
?
Thanks,
Ingo
=========================>
From: Ingo Molnar <mingo@kernel.org>
Date: Thu, 6 Mar 2025 22:53:49 +0100
Subject: [PATCH] x86/mm: Define PTRS_PER_PMD for assembly code too
Andy reported the following build warning from head_32.S:
In file included from arch/x86/kernel/head_32.S:29:
arch/x86/include/asm/pgtable_32.h:59:5: error: "PTRS_PER_PMD" is not defined, evaluates to 0 [-Werror=undef]
59 | #if PTRS_PER_PMD > 1
The reason is that on 2-level i386 paging the folded in PMD's
PTRS_PER_PMD constant is not defined in assembly headers,
only in generic MM C headers.
Instead of trying to fish out the definition from the generic
headers, just define it - it even has a comment for it already...
Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/include/asm/pgtable-2level_types.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/pgtable-2level_types.h b/arch/x86/include/asm/pgtable-2level_types.h
index 7f6ccff0ba72..4a12c276b181 100644
--- a/arch/x86/include/asm/pgtable-2level_types.h
+++ b/arch/x86/include/asm/pgtable-2level_types.h
@@ -23,17 +23,17 @@ typedef union {
#define ARCH_PAGE_TABLE_SYNC_MASK PGTBL_PMD_MODIFIED
/*
- * traditional i386 two-level paging structure:
+ * Traditional i386 two-level paging structure:
*/
#define PGDIR_SHIFT 22
#define PTRS_PER_PGD 1024
-
/*
- * the i386 is two-level, so we don't really have any
- * PMD directory physically.
+ * The i386 is two-level, so we don't really have any
+ * PMD directory physically:
*/
+#define PTRS_PER_PMD 1
#define PTRS_PER_PTE 1024
next prev parent reply other threads:[~2025-03-06 22:00 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-06 9:25 [PATCH v2 1/1] x86/mm: Check if PTRS_PER_PMD is defined before use Andy Shevchenko
2025-03-06 10:13 ` [tip: x86/mm] " tip-bot2 for Andy Shevchenko
2025-03-06 19:49 ` Linus Torvalds
2025-03-06 21:22 ` Ingo Molnar
2025-03-06 22:00 ` Ingo Molnar [this message]
2025-03-07 16:51 ` [PATCH] x86/mm: Define PTRS_PER_PMD for assembly code too Andy Shevchenko
2025-03-07 23:09 ` Ingo Molnar
2025-03-07 23:21 ` [tip: x86/urgent] " tip-bot2 for Ingo Molnar
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=Z8oa8AUVyi2HWfo9@gmail.com \
--to=mingo@kernel.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=lkp@intel.com \
--cc=torvalds@linux-foundation.org \
--cc=x86@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.