On 05/22/20 16:48, Laszlo Ersek wrote:
> On 05/19/20 23:50, Lendacky, Thomas wrote:
>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2198
>>
>> Under SEV-ES, a VMMCALL intercept generates a #VC exception. VMGEXIT must
>> be used to allow the hypervisor to handle this intercept.
>>
>> Cc: Jordan Justen <[email protected]>
>> Cc: Laszlo Ersek <[email protected]>
>> Cc: Ard Biesheuvel <[email protected]>
>> Signed-off-by: Tom Lendacky <[email protected]>
>> ---
>> .../Library/VmgExitLib/X64/VmgExitVcHandler.c | 48 +++++++++++++++++++
>> 1 file changed, 48 insertions(+)
>>
>> diff --git a/OvmfPkg/Library/VmgExitLib/X64/VmgExitVcHandler.c
>> b/OvmfPkg/Library/VmgExitLib/X64/VmgExitVcHandler.c
>> index 0b7f24fd962c..bf1555234d69 100644
>> --- a/OvmfPkg/Library/VmgExitLib/X64/VmgExitVcHandler.c
>> +++ b/OvmfPkg/Library/VmgExitLib/X64/VmgExitVcHandler.c
>> @@ -875,6 +875,50 @@ WbinvdExit (
>> return 0;
>> }
>>
>> +/**
>> + Handle a VMMCALL event.
>> +
>> + Use the VMGEXIT instruction to handle either a VMMCALL event.
(2) pls drop the word "either".
Thanks
Laszlo
>> +
>> + @param[in, out] Ghcb Pointer to the Guest-Hypervisor
>> Communication
>> + Block
>> + @param[in, out] Regs x64 processor context
>> + @param[in] InstructionData Instruction parsing context
>> +
>> + @retval 0 Event handled successfully
>> + @retval Others New exception value to propagate
>> +
>> +**/
>> +STATIC
>> +UINT64
>> +VmmCallExit (
>> + IN OUT GHCB *Ghcb,
>> + IN OUT EFI_SYSTEM_CONTEXT_X64 *Regs,
>> + IN SEV_ES_INSTRUCTION_DATA *InstructionData
>> + )
>> +{
>> + UINT64 Status;
>> +
>> + DecodeModRm (Regs, InstructionData);
>> +
>> + Ghcb->SaveArea.Rax = Regs->Rax;
>> + GhcbSetRegValid (Ghcb, GhcbRax);
>> + Ghcb->SaveArea.Cpl = (UINT8) (Regs->Cs & 0x3);
>> + GhcbSetRegValid (Ghcb, GhcbCpl);
>> +
>> + Status = VmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0);
>> + if (Status) {
>
> (1) Please write (Status > 0) or (Status != 0).
>
> Acked-by: Laszlo Ersek <[email protected]>
>
> Thanks
> Laszlo
>
>> + return Status;
>> + }
>> +
>> + if (!GhcbIsRegValid (Ghcb, GhcbRax)) {
>> + return UnsupportedExit (Ghcb, Regs, InstructionData);
>> + }
>> + Regs->Rax = Ghcb->SaveArea.Rax;
>> +
>> + return 0;
>> +}
>> +
>> /**
>> Handle an MSR event.
>>
>> @@ -1395,6 +1439,10 @@ VmgExitHandleVc (
>> NaeExit = MsrExit;
>> break;
>>
>> + case SVM_EXIT_VMMCALL:
>> + NaeExit = VmmCallExit;
>> + break;
>> +
>> case SVM_EXIT_WBINVD:
>> NaeExit = WbinvdExit;
>> break;
>>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#60151): https://edk2.groups.io/g/devel/message/60151
Mute This Topic: https://groups.io/mt/74336577/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-