From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web11.14394.1590159035173741109 for ; Fri, 22 May 2020 07:50:35 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=XBLQgi9u; spf=pass (domain: redhat.com, ip: 205.139.110.61, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1590159034; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=agjxswerJ/m4qyWwxgxhPI1S9Hhyjw8H5MjpG/1t8tw=; b=XBLQgi9ukXnA7TRGUiUVhy9+L1yA9NDxuHmZSv09Csqrhx83IEKgCvnIev/u9jGblp70QU ENHJCY8XVyfon3bHwJoCxVV0lTKgO0EDMUkJ9cH8V/9JC6nx12e7x0AO3OQkpVPy9EeKHv oa3eH6P1G7+6EufBEmhLcFXQhZsuKJw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-432-BfuJmdc3OLibC9XPhCEruw-1; Fri, 22 May 2020 10:50:32 -0400 X-MC-Unique: BfuJmdc3OLibC9XPhCEruw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EDFC08018A5; Fri, 22 May 2020 14:50:30 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-112-40.ams2.redhat.com [10.36.112.40]) by smtp.corp.redhat.com (Postfix) with ESMTP id E46D460C20; Fri, 22 May 2020 14:50:28 +0000 (UTC) Subject: Re: [edk2-devel] [PATCH v8 22/46] OvmfPkg/VmgExitLib: Add support for VMMCALL NAE events From: "Laszlo Ersek" To: devel@edk2.groups.io, thomas.lendacky@amd.com Cc: Jordan Justen , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , Brijesh Singh , Ard Biesheuvel References: <0b9f13ded4d404ffee90a73848fc67b91010269f.1589925074.git.thomas.lendacky@amd.com> Message-ID: Date: Fri, 22 May 2020 16:50:27 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit 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 >> Cc: Laszlo Ersek >> Cc: Ard Biesheuvel >> Signed-off-by: Tom Lendacky >> --- >> .../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 > > 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; >> >