On 7/19/21 2:03 PM, Sean Christopherson wrote:
On Mon, Jul 19, 2021, Brijesh Singh wrote:
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.
Ah, not firmwrare, gotcha. But we can still use a helper, e.g. an inner
double-underscore helper, __rmp_make_private().
In that case we are basically passing the all the fields defined in the
'struct rmpupdate' as individual arguments. How about something like this:
* core kernel exports the rmpupdate()
* the include/linux/sev.h header file defines the helper functions
int rmp_make_private(u64 pfn, u64 gpa, int psize, int asid)
int rmp_make_firmware(u64 pfn, int psize);
int rmp_make_shared(u64 pfn, int psize);
In most of the case above 3 helpers are good. If driver finds that the
above helper does not fit its need (such as SNP_LAUNCH_UPDATE) then call
the rmpupdate() without going through the helper.
-Brijesh