On 7/19/21 12:18 PM, Sean Christopherson wrote:
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.
+ /* Transition the page state to pre-guest */
+ memset(&e, 0, sizeof(e));
+ e.assigned = 1;
+ e.gpa = gpa;
+ e.asid = sev_get_asid(kvm);
+ e.immutable = true;
+ e.pagesize = X86_TO_RMP_PG_LEVEL(level);
+ ret = rmpupdate(inpages[i], &e);
thanks