From: Dev Jain <dev.jain@arm.com>
To: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org
Cc: ardb@kernel.org, ryan.roberts@arm.com, mark.rutland@arm.com,
suzuki.poulose@arm.com, broonie@kernel.org, James.Morse@arm.com,
Anshuman.Khandual@arm.com, Dev Jain <dev.jain@arm.com>
Subject: [PATCH] arm64: kernel: Replace manual computation with macro
Date: Fri, 17 May 2024 18:54:21 +0530 [thread overview]
Message-ID: <20240517132421.285667-1-dev.jain@arm.com> (raw)
Use macro from pgtable-hwdef.h for better readability.
I have boot tested this patch on all page table level configs, including
LVA/LPA/LPA2 configurations, and forced 52 bit userspace VA.
- Claim: There should be no functional change after applying this patch.
Proof: lshift is being used only for computing lmask and tbl. It suffices
to prove that lmask and tbl remain invariant.
Let s = PAGE_SHIFT, l = level.
new_lshift ---> (expand macro) = (s - 3) * (4 - l) + 3 =
4s - sl - 12 + 3l + 3 = 4s - sl + 3l - 9 = (3s - sl + 3l - 9) + s =
s(3 - l) + 3(l - 3) + s = (3 - l) * (s - 3) + s = old_lshift + s
Hence, new_lshift = old_lshift + PAGE_SHIFT. => tbl is invariant. Noting
that old_lmask = (PAGE_SIZE << old_lshift) = ((1 << PAGE_SHIFT) <<
old_lshift) = (1 << (PAGE_SHIFT + old_lshift)) = (1 << new_lshift) =
new_lmask, we are done. Q.E.D
Signed-off-by: Dev Jain <dev.jain@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..4b145be7f846 100644
--- a/arch/arm64/kernel/pi/map_range.c
+++ b/arch/arm64/kernel/pi/map_range.c
@@ -31,14 +31,14 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot,
{
u64 cmask = (level == 3) ? CONT_PTE_SIZE - 1 : U64_MAX;
u64 protval = pgprot_val(prot) & ~PTE_TYPE_MASK;
- int lshift = (3 - level) * (PAGE_SHIFT - 3);
- u64 lmask = (PAGE_SIZE << lshift) - 1;
+ int lshift = ARM64_HW_PGTABLE_LEVEL_SHIFT(level);
+ u64 lmask = ((u64)1 << lshift) - 1;
start &= PAGE_MASK;
pa &= PAGE_MASK;
/* Advance tbl to the entry that covers start */
- tbl += (start >> (lshift + PAGE_SHIFT)) % PTRS_PER_PTE;
+ tbl += (start >> lshift) % PTRS_PER_PTE;
/*
* Set the right block/page bits for this level unless we are
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2024-05-17 13:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-17 13:24 Dev Jain [this message]
2024-05-17 15:31 ` [PATCH] arm64: kernel: Replace manual computation with macro Catalin Marinas
2024-05-23 13:02 ` Dave Martin
2024-05-23 16:59 ` Catalin Marinas
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=20240517132421.285667-1-dev.jain@arm.com \
--to=dev.jain@arm.com \
--cc=Anshuman.Khandual@arm.com \
--cc=James.Morse@arm.com \
--cc=ardb@kernel.org \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=ryan.roberts@arm.com \
--cc=suzuki.poulose@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).