On Mon, Jul 19, 2021, Sean Christopherson wrote:
On Mon, Jul 19, 2021, Brijesh Singh wrote:
quoted
On 7/19/21 12:18 PM, Sean Christopherson wrote:
quoted
quoted
Okay, I will add helper to make things easier. One case where we will
need to directly call the rmpupdate() is during the LAUNCH_UPDATE
command. In that case the page is private and its immutable bit is also
set. This is because the firmware makes change to the page, and we are
required to set the immutable bit before the call.
Or do "int rmp_make_firmware(u64 pfn, bool immutable)"?
That's not what we need.
We need 'rmp_make_private() + immutable' all in one RMPUPDATE. Here is the
snippet from SNP_LAUNCH_UPDATE.
Ah, not firmwrare, gotcha. But we can still use a helper, e.g. an inner
double-underscore helper, __rmp_make_private().
Hmm, looking at it again, I think I also got confused by the comment for the VMSA
page:
/* Transition the VMSA page to a firmware state. */
e.assigned = 1;
e.immutable = 1;
e.asid = sev->asid;
e.gpa = -1;
e.pagesize = RMP_PG_SIZE_4K;
Unlike __snp_alloc_firmware_pages() in the CCP code, the VMSA is associated with
the guest's ASID, just not a GPA. I.e. the VMSA is more of a specialized guest
private page, as opposed to a dedicated firmware page. I.e. a __rmp_make_private()
and/or rmp_make_private_immutable() definitely seems like a good idea.