From: Marc Zyngier <maz@kernel.org>
To: Sebastian Ene <sebastianene@google.com>
Cc: akpm@linux-foundation.org, alexghiti@rivosinc.com,
ankita@nvidia.com, ardb@kernel.org, catalin.marinas@arm.com,
christophe.leroy@csgroup.eu, james.morse@arm.com,
vdonnefort@google.com, mark.rutland@arm.com,
oliver.upton@linux.dev, rananta@google.com, ryan.roberts@arm.com,
shahuang@redhat.com, suzuki.poulose@arm.com, will@kernel.org,
yuzenghui@huawei.com, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, kernel-team@android.com
Subject: Re: [PATCH v8 3/6] arm64: ptdump: Use the mask from the state structure
Date: Tue, 20 Aug 2024 14:49:04 +0100 [thread overview]
Message-ID: <86seuzxq27.wl-maz@kernel.org> (raw)
In-Reply-To: <20240816123906.3683425-4-sebastianene@google.com>
On Fri, 16 Aug 2024 13:39:03 +0100,
Sebastian Ene <sebastianene@google.com> wrote:
>
> Printing the descriptor attributes requires accessing a mask which has a
> different set of attributes for stage-2. In preparation for adding support
> for the stage-2 pagetables dumping, use the mask from the local context
> and not from the globally defined pg_level array. Store a pointer to
> the pg_level array in the ptdump state structure. This will allow us to
> extract the mask which is wrapped in the pg_level array and use it for
> descriptor parsing in the note_page.
>
> Signed-off-by: Sebastian Ene <sebastianene@google.com>
> ---
> arch/arm64/include/asm/ptdump.h | 1 +
> arch/arm64/mm/ptdump.c | 13 ++++++++-----
> 2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm64/include/asm/ptdump.h b/arch/arm64/include/asm/ptdump.h
> index bd5d3ee3e8dc..71a7ed01153a 100644
> --- a/arch/arm64/include/asm/ptdump.h
> +++ b/arch/arm64/include/asm/ptdump.h
> @@ -44,6 +44,7 @@ struct ptdump_pg_level {
> */
> struct ptdump_pg_state {
> struct ptdump_state ptdump;
> + struct ptdump_pg_level *pg_level;
> struct seq_file *seq;
> const struct addr_marker *marker;
> const struct mm_struct *mm;
> diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c
> index 404751fd30fe..ca53ef274a8b 100644
> --- a/arch/arm64/mm/ptdump.c
> +++ b/arch/arm64/mm/ptdump.c
> @@ -117,7 +117,7 @@ static const struct ptdump_prot_bits pte_bits[] = {
> }
> };
>
> -static struct ptdump_pg_level pg_level[] __ro_after_init = {
> +static struct ptdump_pg_level kernel_pg_levels[] __ro_after_init = {
Do you actually need this sort of renaming? Given that it is static,
this looks like some slightly abusive repainting which isn't warranted
here.
I also didn't understand the commit message: you're not tracking any
mask here, but a page table level. You are also not using it for
anything yet, see below.
> { /* pgd */
> .name = "PGD",
> .bits = pte_bits,
> @@ -192,6 +192,7 @@ void note_page(struct ptdump_state *pt_st, unsigned long addr, int level,
> u64 val)
> {
> struct ptdump_pg_state *st = container_of(pt_st, struct ptdump_pg_state, ptdump);
> + struct ptdump_pg_level *pg_level = st->pg_level;
This is what I mean. What is this pg_level used for?
> static const char units[] = "KMGTPE";
> u64 prot = 0;
>
> @@ -262,6 +263,7 @@ void ptdump_walk(struct seq_file *s, struct ptdump_info *info)
> .seq = s,
> .marker = info->markers,
> .mm = info->mm,
> + .pg_level = &kernel_pg_levels[0],
> .level = -1,
> .ptdump = {
> .note_page = note_page,
> @@ -279,10 +281,10 @@ static void __init ptdump_initialize(void)
> {
> unsigned i, j;
>
> - for (i = 0; i < ARRAY_SIZE(pg_level); i++)
> - if (pg_level[i].bits)
> - for (j = 0; j < pg_level[i].num; j++)
> - pg_level[i].mask |= pg_level[i].bits[j].mask;
> + for (i = 0; i < ARRAY_SIZE(kernel_pg_levels); i++)
> + if (kernel_pg_levels[i].bits)
> + for (j = 0; j < kernel_pg_levels[i].num; j++)
> + kernel_pg_levels[i].mask |= kernel_pg_levels[i].bits[j].mask;
> }
>
> static struct ptdump_info kernel_ptdump_info __ro_after_init = {
> @@ -297,6 +299,7 @@ bool ptdump_check_wx(void)
> { 0, NULL},
> { -1, NULL},
> },
> + .pg_level = &kernel_pg_levels[0],
> .level = -1,
> .check_wx = true,
> .ptdump = {
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2024-08-20 13:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 12:39 [PATCH v8 0/6] arm64: ptdump: View the second stage page-tables Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 1/6] KVM: arm64: Move pagetable definitions to common header Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 2/6] arm64: ptdump: Expose the attribute parsing functionality Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 3/6] arm64: ptdump: Use the mask from the state structure Sebastian Ene
2024-08-20 13:49 ` Marc Zyngier [this message]
2024-08-20 14:13 ` Sebastian Ene
2024-08-20 14:25 ` Marc Zyngier
2024-08-20 14:39 ` Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 4/6] KVM: arm64: Register ptdump with debugfs on guest creation Sebastian Ene
2024-08-20 14:06 ` Marc Zyngier
2024-08-23 10:45 ` Sebastian Ene
2024-08-23 10:53 ` Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 5/6] KVM: arm64: Initialize the ptdump parser with stage-2 attributes Sebastian Ene
2024-08-19 10:28 ` Vincent Donnefort
2024-08-19 12:18 ` Sebastian Ene
2024-08-20 14:20 ` Marc Zyngier
2024-08-22 16:15 ` Marc Zyngier
2024-08-23 5:21 ` Sebastian Ene
2024-08-16 12:39 ` [PATCH v8 6/6] KVM: arm64: Expose guest stage-2 pagetable config to debugfs Sebastian Ene
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=86seuzxq27.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=alexghiti@rivosinc.com \
--cc=ankita@nvidia.com \
--cc=ardb@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=james.morse@arm.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=oliver.upton@linux.dev \
--cc=rananta@google.com \
--cc=ryan.roberts@arm.com \
--cc=sebastianene@google.com \
--cc=shahuang@redhat.com \
--cc=suzuki.poulose@arm.com \
--cc=vdonnefort@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.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 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.