2022-04-19 16:06:25

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH] x86/mm/ptdump: display page encryption state

From: Mike Rapoport <[email protected]>

When memory encryption is enabled, for instance in SEV guest, it is useful
to see what memory ranges are mapped as encrypted in the kernel page tables
and what ranges are left plain.

Add printing of 'ENC' for the encrypted ranges to the page table dumps.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/x86/mm/dump_pagetables.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index e1b599ecbbc2..187dd17b8780 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -201,6 +201,10 @@ static void printk_prot(struct seq_file *m, pgprotval_t pr, int level, bool dmsg
pt_dump_cont_printf(m, dmsg, "PCD ");
else
pt_dump_cont_printf(m, dmsg, " ");
+ if (pr & _PAGE_ENC)
+ pt_dump_cont_printf(m, dmsg, "ENC ");
+ else
+ pt_dump_cont_printf(m, dmsg, " ");

/* Bit 7 has a different meaning on level 3 vs 4 */
if (level <= 3 && pr & _PAGE_PSE)

base-commit: b2d229d4ddb17db541098b83524d901257e93845
--
2.28.0


2022-04-20 13:42:42

by Mike Rapoport

[permalink] [raw]
Subject: Re: [PATCH] x86/mm/ptdump: display page encryption state

On Tue, Apr 19, 2022 at 11:57:47AM -0700, Dave Hansen wrote:
> On 4/19/22 07:35, Mike Rapoport wrote:
> > When memory encryption is enabled, for instance in SEV guest, it is useful
> > to see what memory ranges are mapped as encrypted in the kernel page tables
> > and what ranges are left plain.
> >
> > Add printing of 'ENC' for the encrypted ranges to the page table dumps.
> >
> > Signed-off-by: Mike Rapoport <[email protected]>
> > ---
> > arch/x86/mm/dump_pagetables.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
> > index e1b599ecbbc2..187dd17b8780 100644
> > --- a/arch/x86/mm/dump_pagetables.c
> > +++ b/arch/x86/mm/dump_pagetables.c
> > @@ -201,6 +201,10 @@ static void printk_prot(struct seq_file *m, pgprotval_t pr, int level, bool dmsg
> > pt_dump_cont_printf(m, dmsg, "PCD ");
> > else
> > pt_dump_cont_printf(m, dmsg, " ");
> > + if (pr & _PAGE_ENC)
> > + pt_dump_cont_printf(m, dmsg, "ENC ");
> > + else
> > + pt_dump_cont_printf(m, dmsg, " ");
>
> _PAGE_ENC is AMD-specific. Could we do this with a new generic "cc_"
> function, maybe cc_is_enc()?
>
> Something like this would (I think) work for both SEV and TDX:
>
> bool cc_is_enc(u64 prot)
> {
> return cc_mkdec(prot) != prot;
> }

It works for SEV. I can repost with this and you'll confirm it works on
TDX?

--
Sincerely yours,
Mike.

2022-04-22 02:33:21

by Dave Hansen

[permalink] [raw]
Subject: Re: [PATCH] x86/mm/ptdump: display page encryption state

On 4/20/22 00:17, Mike Rapoport wrote:
>> _PAGE_ENC is AMD-specific. Could we do this with a new generic "cc_"
>> function, maybe cc_is_enc()?
>>
>> Something like this would (I think) work for both SEV and TDX:
>>
>> bool cc_is_enc(u64 prot)
>> {
>> return cc_mkdec(prot) != prot;
>> }
> It works for SEV. I can repost with this and you'll confirm it works on
> TDX?

I don't have a TDX setup handy, but Kirill certainly does. I'm sure
he'd be happy to give you a tested-by.

2022-04-22 20:06:37

by Dave Hansen

[permalink] [raw]
Subject: Re: [PATCH] x86/mm/ptdump: display page encryption state

On 4/19/22 07:35, Mike Rapoport wrote:
> When memory encryption is enabled, for instance in SEV guest, it is useful
> to see what memory ranges are mapped as encrypted in the kernel page tables
> and what ranges are left plain.
>
> Add printing of 'ENC' for the encrypted ranges to the page table dumps.
>
> Signed-off-by: Mike Rapoport <[email protected]>
> ---
> arch/x86/mm/dump_pagetables.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
> index e1b599ecbbc2..187dd17b8780 100644
> --- a/arch/x86/mm/dump_pagetables.c
> +++ b/arch/x86/mm/dump_pagetables.c
> @@ -201,6 +201,10 @@ static void printk_prot(struct seq_file *m, pgprotval_t pr, int level, bool dmsg
> pt_dump_cont_printf(m, dmsg, "PCD ");
> else
> pt_dump_cont_printf(m, dmsg, " ");
> + if (pr & _PAGE_ENC)
> + pt_dump_cont_printf(m, dmsg, "ENC ");
> + else
> + pt_dump_cont_printf(m, dmsg, " ");

_PAGE_ENC is AMD-specific. Could we do this with a new generic "cc_"
function, maybe cc_is_enc()?

Something like this would (I think) work for both SEV and TDX:

bool cc_is_enc(u64 prot)
{
return cc_mkdec(prot) != prot;
}