All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-tip-commits@vger.kernel.org,
	kernel test robot <lkp@intel.com>,
	x86@kernel.org
Subject: Re: [PATCH] x86/mm: Define PTRS_PER_PMD for assembly code too
Date: Fri, 7 Mar 2025 18:51:35 +0200	[thread overview]
Message-ID: <Z8skF4rtRzaDL2Ou@smile.fi.intel.com> (raw)
In-Reply-To: <Z8oa8AUVyi2HWfo9@gmail.com>

On Thu, Mar 06, 2025 at 11:00:16PM +0100, Ingo Molnar wrote:
> * 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.

Fine by me as long as it gets fixed. Currently it prevents the WERROR=y
to be used along with `make W=1` for x86_32 by both compilers.

> 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

Should I give a try?

Okay, just

Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

for x86_32 with Clang 19.1.7 and GCC 14.2.0.

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2025-03-07 16:51 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       ` [PATCH] x86/mm: Define PTRS_PER_PMD for assembly code too Ingo Molnar
2025-03-07 16:51         ` Andy Shevchenko [this message]
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=Z8skF4rtRzaDL2Ou@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=mingo@kernel.org \
    --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.