Re: [PATCHv2 22/29] x86/tdx: Make pages shared in ioremap()

From: Kirill A. Shutemov
Date: Mon Feb 14 2022 - 17:09:22 EST


On Mon, Feb 07, 2022 at 06:28:04PM +0100, Borislav Petkov wrote:
> On Mon, Feb 07, 2022 at 08:57:39AM -0800, Dave Hansen wrote:
> > We can surely *do* this with cc_something() helpers. It's just not as
> > easy as making cc_set/cc_clear().
>
> Sure, that's easy: cc_pgprot_{enc,dec}() or so.

So, I've ended up with this in <asm/pgtable.h>

/*
* Macros to add or remove encryption attribute
*/
#ifdef CONFIG_ARCH_HAS_CC_PLATFORM
pgprotval_t cc_enc(pgprotval_t protval);
pgprotval_t cc_dec(pgprotval_t protval);
#define pgprot_encrypted(prot) __pgprot(cc_enc(pgprot_val(prot)))
#define pgprot_decrypted(prot) __pgprot(cc_dec(pgprot_val(prot)))
#else
#define pgprot_encrypted(prot) (prot)
#define pgprot_decrypted(prot) (prot)
#endif

And cc_platform.c:

pgprotval_t cc_enc(pgprotval_t protval)
{
if (sme_me_mask)
return __sme_set(protval);
else if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST))
return protval & ~tdx_shared_mask();
else
return protval;
}

pgprotval_t cc_dec(pgprotval_t protval)
{
if (sme_me_mask)
return __sme_clr(protval);
else if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST))
return protval | tdx_shared_mask();
else
return protval;
}
EXPORT_SYMBOL_GPL(cc_dec);
--
Kirill A. Shutemov