linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Jessica Clarke <jrtc27@jrtc27.com>
To: Mike Rapoport <rppt@kernel.org>
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
	Tony Luck <tony.luck@intel.com>,
	linux-ia64@vger.kernel.org, Anatoly Pugachev <matorola@gmail.com>,
	Sergei Trofimovich <slyfox@gentoo.org>,
	linux-mm@kvack.org, Frank Scheiner <frank.scheiner@web.de>,
	Mike Rapoport <rppt@linux.ibm.com>
Subject: Re: [PATCH v4] arch/ia64: Restore arch-specific pgd_offset_k implementation
Date: Thu, 13 Aug 2020 21:00:06 +0100	[thread overview]
Message-ID: <4BAE916F-BC99-4CE8-9A9B-266AC69CF346@jrtc27.com> (raw)
In-Reply-To: <20200813195129.5099-1-rppt@kernel.org>

On 13 Aug 2020, at 20:51, Mike Rapoport <rppt@kernel.org> wrote:
> 
> From: Jessica Clarke <jrtc27@jrtc27.com>
> 
> IA-64 is special and treats pgd_offset_k() differently to pgd_offset(),
> using different formulae to calculate the indices into the kernel and user
> PGDs.  The index into the user PGDs takes into account the region number,
> but the index into the kernel (init_mm) PGD always assumes a predefined
> kernel region number. Commit 974b9b2c68 ("mm: consolidate pte_index() and
> pte_offset_*() definitions") made IA-64 use a generic pgd_offset_k() which
> incorrectly used pgd_index() for kernel page tables.  As a result, the
> index into the kernel PGD was going out of bounds and the kernel hung
> during early boot.
> 
> Allow overrides of pgd_offset_k() and override it on IA-64 with the old
> implementation that will correctly index the kernel PGD.
> 
> Fixes: 974b9b2c68 ("mm: consolidate pte_index() and pte_offset_*() definitions")
> Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
> Signed-off-by: Jessica Clarke <jrtc27@jrtc27.com>
> Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> 
> Changes since v3:
> * Correct commit message as Jessica suggested

I also corrected the comment to:

/*
 * In the kernel's mapped region we know everything is in region number 5, so
 * as an optimisation its PGD already points to the area for that region.
 * However, this also means that we cannot use pgd_index() and we must
 * never add the region here.
 */

> Changes since v2:
> * Rephrase commit message and comment about pgd_offset_k()
> 
> Changes since v1:
> * Fixed typo in commit message
> * Slightly reworded commit message to sound less weird
> * Included Adrian's Tested-by
> 
> 
> arch/ia64/include/asm/pgtable.h | 9 +++++++++
> include/linux/pgtable.h         | 2 ++
> 2 files changed, 11 insertions(+)
> 
> diff --git a/arch/ia64/include/asm/pgtable.h b/arch/ia64/include/asm/pgtable.h
> index 10850897a91c..6ef501cd0166 100644
> --- a/arch/ia64/include/asm/pgtable.h
> +++ b/arch/ia64/include/asm/pgtable.h
> @@ -366,6 +366,15 @@ pgd_index (unsigned long address)
> }
> #define pgd_index pgd_index
> 
> +/*
> + * In the kernel's mapped region we know everything is in region number 5, so
> + * as an optimisation its PGD already points to the area for that region.
> + * However, this also means that we cannot use pgd_index() and we never
> + * should add the region here.
> + */
> +#define pgd_offset_k(addr) \
> +	(init_mm.pgd + (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)))
> +
> /* Look up a pgd entry in the gate area.  On IA-64, the gate-area
>    resides in the kernel-mapped segment, hence we use pgd_offset_k()
>    here.  */
> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index a124c21e3204..e8cbc2e795d5 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -117,7 +117,9 @@ static inline pgd_t *pgd_offset_pgd(pgd_t *pgd, unsigned long address)
>  * a shortcut which implies the use of the kernel's pgd, instead
>  * of a process's
>  */
> +#ifndef pgd_offset_k
> #define pgd_offset_k(address)		pgd_offset(&init_mm, (address))
> +#endif
> 
> /*
>  * In many cases it is known that a virtual address is mapped at PMD or PTE
> -- 
> 2.26.2
> 



      reply	other threads:[~2020-08-13 20:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-13 19:51 Mike Rapoport
2020-08-13 20:00 ` Jessica Clarke [this message]

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=4BAE916F-BC99-4CE8-9A9B-266AC69CF346@jrtc27.com \
    --to=jrtc27@jrtc27.com \
    --cc=frank.scheiner@web.de \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matorola@gmail.com \
    --cc=rppt@kernel.org \
    --cc=rppt@linux.ibm.com \
    --cc=slyfox@gentoo.org \
    --cc=tony.luck@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox