On Wed, Jul 07, 2021 at 01:14:39PM -0500, Brijesh Singh wrote: > @@ -274,16 +274,31 @@ static int set_clr_page_flags(struct x86_mapping_info *info, > /* > * Changing encryption attributes of a page requires to flush it from > * the caches. > + * > + * If the encryption attribute is being cleared, then change the page > + * state to shared in the RMP table. That comment... > */ > - if ((set | clr) & _PAGE_ENC) > + if ((set | clr) & _PAGE_ENC) { > clflush_page(address); > ... goes here: <--- > + if (clr) > + snp_set_page_shared(pte_pfn(*ptep) << PAGE_SHIFT); > + } > + ... > diff --git a/arch/x86/boot/compressed/sev.c b/arch/x86/boot/compressed/sev.c > index 2f3081e9c78c..f386d45a57b6 100644 > --- a/arch/x86/boot/compressed/sev.c > +++ b/arch/x86/boot/compressed/sev.c > @@ -164,6 +164,47 @@ static bool is_vmpl0(void) > return true; > } > > +static void __page_state_change(unsigned long paddr, int op) That op should be: enum psc_op { SNP_PAGE_STATE_SHARED, SNP_PAGE_STATE_PRIVATE, }; and have static void __page_state_change(unsigned long paddr, enum psc_op op) so that the compiler can check you're at least passing from the correct set of defines. > diff --git a/arch/x86/include/asm/sev-common.h b/arch/x86/include/asm/sev-common.h > index ea508835ab33..aee07d1bb138 100644 > --- a/arch/x86/include/asm/sev-common.h > +++ b/arch/x86/include/asm/sev-common.h > @@ -45,6 +45,23 @@ > (((unsigned long)reg & GHCB_MSR_CPUID_REG_MASK) << GHCB_MSR_CPUID_REG_POS) | \ > (((unsigned long)fn) << GHCB_MSR_CPUID_FUNC_POS)) > > +/* SNP Page State Change */ > +#define GHCB_MSR_PSC_REQ 0x014 > +#define SNP_PAGE_STATE_PRIVATE 1 > +#define SNP_PAGE_STATE_SHARED 2 > +#define GHCB_MSR_PSC_GFN_POS 12 > +#define GHCB_MSR_PSC_GFN_MASK GENMASK_ULL(39, 0) > +#define GHCB_MSR_PSC_OP_POS 52 > +#define GHCB_MSR_PSC_OP_MASK 0xf > +#define GHCB_MSR_PSC_REQ_GFN(gfn, op) \ > + (((unsigned long)((op) & GHCB_MSR_PSC_OP_MASK) << GHCB_MSR_PSC_OP_POS) | \ > + ((unsigned long)((gfn) & GHCB_MSR_PSC_GFN_MASK) << GHCB_MSR_PSC_GFN_POS) | \ > + GHCB_MSR_PSC_REQ) > + > +#define GHCB_MSR_PSC_RESP 0x015 > +#define GHCB_MSR_PSC_ERROR_POS 32 > +#define GHCB_MSR_PSC_RESP_VAL(val) ((val) >> GHCB_MSR_PSC_ERROR_POS) > + Also get rid of eccessive defines... -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette