From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yb1-f175.google.com (mail-yb1-f175.google.com [209.85.219.175]) by mx.groups.io with SMTP id smtpd.web10.156.1637109152861867557 for ; Tue, 16 Nov 2021 16:32:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@google.com header.s=20210112 header.b=JwkswS7g; spf=pass (domain: google.com, ip: 209.85.219.175, mailfrom: erdemaktas@google.com) Received: by mail-yb1-f175.google.com with SMTP id v64so2001356ybi.5 for ; Tue, 16 Nov 2021 16:32:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=sUEBdL6y+n3+pA2aPrbiJ6RSCRHmCV2n8f2iGL482+I=; b=JwkswS7gwQC4BfGKprvtHrjg+ZPnrCHcwsS6il5JQMMY1yZ1A2QOTkFkly8Exwb1dy nC7jfvhXISAMfRofuAUBw7ZZkwzAAHZMnjMVDgb9+X4RhhdzKrWZiwIiypSminxg7dgr l4kXJyk3UegucXCdXS1xH2odPWqamj/LpiwMKCX43lZDElScNWPmc8b1iDPjne+YfP9o hY4SMKbdCaf+CZDXro1b1Lsb6075HFe8IJqQVj/sYLb+XZoF6oqDAe/cP1yutnOAXyvm F4PSciOaro84WmIBwXLyYL1T5Uu7tzuqmdSa2otzmzdNfh0EsItV8vYm8Ez6DXt/g03v 0epg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=sUEBdL6y+n3+pA2aPrbiJ6RSCRHmCV2n8f2iGL482+I=; b=hKW6u2rSDWSSc7B2I42oEtOnqp6UJziqItSx+o9/boeUEyeIY0Xebf+J4gMv/GmqmN xel/xHqHaLLvByl5Sn9+wptGD1hX8e3Xh6MFnDQmezct+9pIvanuEF/hMeqEH5an855+ Q52WAmCpozEMlm4HAzk9cIpu1+NbAGgt6wo1G7Fzz1kSuYK5A0DbmNFzce4J2s0i+7WE gXCldHO/yTU5beNWGyA/j5XGFW9T7s6w3FUOGW5tTTgUCB2E0aZq6YzgsdTvaQzZgH/f GzHA2LumHHRp5WKV/nOuvcl+xi909Yr/FeWxFmAYF/sro5dYwAajmsHxPhCLnVMK/sqY Vw8w== X-Gm-Message-State: AOAM53151YtYmrX+Rhz/0ARBoIbIJ/c8qkyYBSOPxfSFnAjmqTH4/hrH EjnYUAOdbLn3wwTgtWUHFGGoU0XO57/Tf7SyOMMgkw== X-Google-Smtp-Source: ABdhPJz5DK/GA7PBIFWpjPBH2Ry6LBTbrQ62atjBh+2GhTEs4k4VAvvwiEyZNrdjFFEwNI2yw9e0Z89yevfUL4EErTw= X-Received: by 2002:a25:d652:: with SMTP id n79mr14088130ybg.398.1637109151746; Tue, 16 Nov 2021 16:32:31 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: "Erdem Aktas" Date: Tue, 16 Nov 2021 16:32:20 -0800 Message-ID: Subject: Re: [PATCH V3 04/29] OvmfPkg: Extend VmgExitLib to handle #VE exception To: Min Xu Cc: devel@edk2.groups.io, Ard Biesheuvel , Jiewen Yao , Jordan Justen , Brijesh Singh , James Bottomley , Tom Lendacky , Gerd Hoffmann Content-Type: multipart/alternative; boundary="00000000000073255005d0f12d50" --00000000000073255005d0f12d50 Content-Type: text/plain; charset="UTF-8" Hi Min, On Mon, Nov 1, 2021 at 6:16 AM Min Xu wrote: > > +VmTdExitHandleVe ( > + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, > + IN OUT EFI_SYSTEM_CONTEXT SystemContext > + ) > +{ > + UINT64 Status; > + TD_RETURN_DATA ReturnData; > + EFI_SYSTEM_CONTEXT_X64 *Regs; > + > + Regs = SystemContext.SystemContextX64; > + Status = TdCall (TDCALL_TDGETVEINFO, 0, 0, 0, &ReturnData); > + ASSERT (Status == 0); > + if (Status != 0) { > + DEBUG ((DEBUG_ERROR, "#VE happened. TDGETVEINFO failed with Status = > 0x%llx\n", Status)); > + TdVmCall (TDVMCALL_HALT, 0, 0, 0, 0, 0); > + } > What is the difference between TdVmCall (EXIT_REASON_HLT, 0, 0, 0, 0, 0) vs TdVmCall (TDVMCALL_HALT, 0, 0, 0, 0, 0); >>From the VMM stand point both seems the same? + > + switch (ReturnData.VeInfo.ExitReason) { > + case EXIT_REASON_CPUID: > + Status = CpuIdExit (Regs, &ReturnData.VeInfo); > + DEBUG ((DEBUG_VERBOSE , > + "CPUID #VE happened, ExitReasion is %d, ExitQualification = > 0x%x.\n", > + ReturnData.VeInfo.ExitReason, > ReturnData.VeInfo.ExitQualification.Val > + )); > + break; > + > + case EXIT_REASON_HLT: > + if (FixedPcdGetBool (PcdIgnoreVeHalt) == FALSE) { > + Status = TdVmCall (EXIT_REASON_HLT, 0, 0, 0, 0, 0); > + } > + break; > > --00000000000073255005d0f12d50 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Min,


On Mon, Nov 1, 2021= at 6:16 AM Min Xu <min.m.xu@intel= .com> wrote:

+VmTdExitHandleVe (
+=C2=A0 IN OUT EFI_EXCEPTION_TYPE=C2=A0 *ExceptionType,
+=C2=A0 IN OUT EFI_SYSTEM_CONTEXT=C2=A0 SystemContext
+=C2=A0 )
+{
+=C2=A0 UINT64=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 Status;
+=C2=A0 TD_RETURN_DATA=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ReturnData;=
+=C2=A0 EFI_SYSTEM_CONTEXT_X64=C2=A0 =C2=A0 *Regs;
+
+=C2=A0 Regs =3D SystemContext.SystemContextX64;
+=C2=A0 Status =3D TdCall (TDCALL_TDGETVEINFO, 0, 0, 0, &ReturnData); +=C2=A0 ASSERT (Status =3D=3D 0);
+=C2=A0 if (Status !=3D 0) {
+=C2=A0 =C2=A0 DEBUG ((DEBUG_ERROR, "#VE happened. TDGETVEINFO failed = with Status =3D 0x%llx\n", Status));
+=C2=A0 =C2=A0 TdVmCall (TDVMCALL_HALT, 0, 0, 0, 0, 0);
+=C2=A0 }


What is the difference between= TdVmCall (EXIT_REASON_HLT, 0, 0, 0, 0, 0) vs TdVmCall (TDVMCALL_HALT, 0, 0= , 0, 0, 0);
From the VMM stand point both seems the same?
=

+
+=C2=A0 switch (ReturnData.VeInfo.ExitReason) {
+=C2=A0 =C2=A0 case EXIT_REASON_CPUID:
+=C2=A0 =C2=A0 Status =3D CpuIdExit (Regs, &ReturnData.VeInfo);
+=C2=A0 =C2=A0 DEBUG ((DEBUG_VERBOSE ,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "CPUID #VE happened, ExitReasion i= s %d, ExitQualification =3D 0x%x.\n",
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ReturnData.VeInfo.ExitReason, ReturnDat= a.VeInfo.ExitQualification.Val
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ));
+=C2=A0 =C2=A0 break;
+
+=C2=A0 =C2=A0 case EXIT_REASON_HLT:
+=C2=A0 =C2=A0 if (FixedPcdGetBool (PcdIgnoreVeHalt) =3D=3D FALSE) {
+=C2=A0 =C2=A0 =C2=A0 Status =3D TdVmCall (EXIT_REASON_HLT, 0, 0, 0, 0, 0);=
+=C2=A0 =C2=A0 }
+=C2=A0 =C2=A0 break;

--00000000000073255005d0f12d50--