From: Ryan Roberts <ryan.roberts@arm.com>
To: Anshuman Khandual <anshuman.khandual@arm.com>,
linux-arm-kernel@lists.infradead.org
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] arm64/mm: Avoid direct referencing page table enties in map_range()
Date: Thu, 25 Jul 2024 11:36:56 +0100 [thread overview]
Message-ID: <3e82687a-0183-42f3-b32c-6d99dbd4fe49@arm.com> (raw)
In-Reply-To: <20240725091052.314750-1-anshuman.khandual@arm.com>
On 25/07/2024 10:10, Anshuman Khandual wrote:
> Like else where in arm64 platform, use WRITE_ONCE() in map_range() while
> creating page table entries. This avoids referencing page table entries
> directly.
I could be wrong, but I don't think this code is ever operating on live
pgtables? So there is never a potential to race with the HW walker and therefore
no need to guarrantee copy atomicity? As long as the correct barriers are placed
at the point where you load the pgdir into the TTBRx there should be no problem?
If my assertion is correct, I don't think there is any need for this change.
Thanks,
Ryan
>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Ryan Roberts <ryan.roberts@arm.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
> ---
> arch/arm64/kernel/pi/map_range.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/kernel/pi/map_range.c b/arch/arm64/kernel/pi/map_range.c
> index 5410b2cac590..b93b70cdfb62 100644
> --- a/arch/arm64/kernel/pi/map_range.c
> +++ b/arch/arm64/kernel/pi/map_range.c
> @@ -56,8 +56,8 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot,
> * table mapping if necessary and recurse.
> */
> if (pte_none(*tbl)) {
> - *tbl = __pte(__phys_to_pte_val(*pte) |
> - PMD_TYPE_TABLE | PMD_TABLE_UXN);
> + WRITE_ONCE(*tbl, __pte(__phys_to_pte_val(*pte) |
> + PMD_TYPE_TABLE | PMD_TABLE_UXN));
> *pte += PTRS_PER_PTE * sizeof(pte_t);
> }
> map_range(pte, start, next, pa, prot, level + 1,
> @@ -79,7 +79,7 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot,
> protval &= ~PTE_CONT;
>
> /* Put down a block or page mapping */
> - *tbl = __pte(__phys_to_pte_val(pa) | protval);
> + WRITE_ONCE(*tbl, __pte(__phys_to_pte_val(pa) | protval));
> }
> pa += next - start;
> start = next;
next prev parent reply other threads:[~2024-07-25 10:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-25 9:10 [PATCH] arm64/mm: Avoid direct referencing page table enties in map_range() Anshuman Khandual
2024-07-25 10:36 ` Ryan Roberts [this message]
2024-07-26 11:26 ` Anshuman Khandual
2024-08-01 11:34 ` Will Deacon
2024-08-01 12:48 ` Ryan Roberts
2024-08-01 13:23 ` Will Deacon
2024-08-01 14:07 ` Ryan Roberts
2024-08-01 14:46 ` Will Deacon
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=3e82687a-0183-42f3-b32c-6d99dbd4fe49@arm.com \
--to=ryan.roberts@arm.com \
--cc=anshuman.khandual@arm.com \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox