On 2021-12-10 09:43:07 -0600, Brijesh Singh wrote: > The set_memory_{encrypt,decrypt}() are used for changing the pages s/set_memory_{encrypt,decrypt}/snp_set_memory_{shared,private}/ > from decrypted (shared) to encrypted (private) and vice versa. > When SEV-SNP is active, the page state transition needs to go through > additional steps. > > If the page is transitioned from shared to private, then perform the > following after the encryption attribute is set in the page table: > > 1. Issue the page state change VMGEXIT to add the memory region in > the RMP table. > 2. Validate the memory region after the RMP entry is added. > > To maintain the security guarantees, if the page is transitioned from > private to shared, then perform the following before encryption attribute > is removed from the page table: > > 1. Invalidate the page. > 2. Issue the page state change VMGEXIT to remove the page from RMP table. > > To change the page state in the RMP table, use the Page State Change > VMGEXIT defined in the GHCB specification. > > The GHCB specification provides the flexibility to use either 4K or 2MB > page size in during the page state change (PSC) request. For now use the > 4K page size for all the PSC until page size tracking is supported in the > kernel. > > Signed-off-by: Brijesh Singh <brijesh.singh@xxxxxxx> [snip] > diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c > index 2971aa280ce6..35c772bf9f6c 100644 > --- a/arch/x86/kernel/sev.c > +++ b/arch/x86/kernel/sev.c > @@ -574,7 +574,7 @@ static void pvalidate_pages(unsigned long vaddr, unsigned int npages, bool valid > } > } > > -static void __init early_set_page_state(unsigned long paddr, unsigned int npages, enum psc_op op) > +static void __init early_set_pages_state(unsigned long paddr, unsigned int npages, enum psc_op op) Is there a need to change the name? "npages" can take a value of 1 too. Hence, early_set_page_state() appears to be a better name! > + /* > + * Page State Change VMGEXIT can pass error code through > + * exit_info_2. > + */ Collapse into one line? > +void snp_set_memory_shared(unsigned long vaddr, unsigned int npages) > +{ > + if (!cc_platform_has(CC_ATTR_SEV_SNP)) > + return; > + > + pvalidate_pages(vaddr, npages, 0); Replace '0' with "false"? > + > + set_pages_state(vaddr, npages, SNP_PAGE_STATE_SHARED); > +} > + > +void snp_set_memory_private(unsigned long vaddr, unsigned int npages) > +{ > + if (!cc_platform_has(CC_ATTR_SEV_SNP)) > + return; > + > + set_pages_state(vaddr, npages, SNP_PAGE_STATE_PRIVATE); > + > + pvalidate_pages(vaddr, npages, 1); Replace '1' with "true"? Venu