From: "Laszlo Ersek" <lersek@redhat.com>
To: Tom Lendacky <thomas.lendacky@amd.com>,
"Dong, Eric" <eric.dong@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Brijesh Singh <brijesh.singh@amd.com>,
Ard Biesheuvel <ard.biesheuvel@arm.com>,
"Justen, Jordan L" <jordan.l.justen@intel.com>,
"Gao, Liming" <liming.gao@intel.com>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
"Ni, Ray" <ray.ni@intel.com>
Subject: Re: [edk2-devel] [PATCH v9 08/46] UefiCpuPkg: Implement library support for VMGEXIT
Date: Wed, 8 Jul 2020 18:25:47 +0200 [thread overview]
Message-ID: <bb7acac3-42b4-8292-f8c5-eb306a34f4eb@redhat.com> (raw)
In-Reply-To: <cacaa920-8d3e-5cc8-1bae-5da82f292988@amd.com>
On 07/08/20 15:07, Tom Lendacky wrote:
> On 7/7/20 12:11 PM, Tom Lendacky wrote:
>> On 7/7/20 10:50 AM, Tom Lendacky wrote:
>>> On 7/7/20 10:36 AM, Laszlo Ersek wrote:
>>>> On 07/06/20 22:03, Tom Lendacky wrote:
>>>>> On 7/2/20 2:04 AM, Dong, Eric wrote:
>>>>>> Hi Tom,
>>>>>
>>>>> Hi Eric,
>>>>>
>>>>>>
>>>>>> We have root cause this Mac file format issue. The patch mail from your side include extra two "=0D=0D" , and our test tool convert them to "\r\r". This is Mac file line ending format. So this issue been reported. We have updated our tool to handle this special case.
>>>>>
>>>>> Good to know, thanks!
>>>>>
>>>>>>
>>>>>> With that change, now I met below error when use VS2015 tool chain. Can you help to fix it?
>>>>>>
>>>>>> Building ... g:\edk2-open-source\edk2\MdePkg\Library\PeiCoreEntryPoint\PeiCoreEntryPoint.inf [X64]
>>>>>> PeCoffLoaderEx.c
>>>>>> g:\edk2-open-source\edk2\OvmfPkg\Library\VmgExitLib\VmgExitVcHandler.c(386): warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)
>>>>>> NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Vc\bin\x86_amd64\cl.exe"' : return code '0x2'
>>>>
>>>> This is for the line
>>>>
>>>> Displacement *= (1 << Ext->Sib.Scale);
>>>>
>>>> from
>>>>
>>>> [edk2-devel] [PATCH v9 17/46]
>>>> OvmfPkg/VmgExitLib: Add support for NPF NAE events (MMIO)
>>>>
>>>>>
>>>>> Yup, looks like that needs to be a "1ULL <<" instead of "1 <<".
>>>>> I have verified that fixes the issue.
>>>>
>>>> I disagree.
>>>>
>>>> At that point, Displacement is of type INT64, and it may well be a
>>>> negative value. We definitely want to multiply it by a signed int
>>>> (values 1, 2, 4, 8).
>>>>
>>>> I commented on this before. Please see:
>>>>
>>>> (i) my comment block (10) here -- especially comment (10c):
>>>>
>>>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F60144&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cec0cb2ad96694b66d8ff08d8228b7c8e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637297329772337705&sdata=g%2BGooY1Sv0G7ydr11Jh%2BTXxo4Wy6ZWcT5Mq9VmWddi8%3D&reserved=0
>>>>
>>>> (alternative link:
>>>> <https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmid.mail-archive.com%2F169e44cb-2c1c-6d9a-342a-2a1f618e3753%40redhat.com&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cec0cb2ad96694b66d8ff08d8228b7c8e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637297329772337705&sdata=6p91db%2F6oz%2FHc65Sq4fvH%2FcPmiAfdS8MImsaznaoaXA%3D&reserved=0>)
>>>>
>>>> (ii) and my comment here:
>>>>
>>>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F60146&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cec0cb2ad96694b66d8ff08d8228b7c8e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637297329772337705&sdata=iNIBJCIlfEEsY37cdwUbH27tx5HvXVs3PZiOQfaGeLQ%3D&reserved=0
>>>>
>>>> (alternative link:
>>>> <https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmid.mail-archive.com%2F139ce789-b938-c8b9-030e-c1b6c67e47ea%40redhat.com&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cec0cb2ad96694b66d8ff08d8228b7c8e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637297329772337705&sdata=mWCAHqTOpp7B9nWUJjTRJ9VZ74iwdElRTOoNhEpFs%2Bc%3D&reserved=0>).
>>>>
>>>>
>>>> The compiler warning is well-meaning, but unnecessary. A 64-bit shift is
>>>> *NOT* intended. We want to end up with one of the signed int (aka INT32)
>>>> values 1, 2, 4 or 8. And then multiply the INT64 Displacement with that
>>>> value. For the multiplication, the INT32 value 1, 2, 4 or 8 will be
>>>> implicitly converted to INT64. That's entirely intentional.
>>>>
>>>> If we want to suppress the warning, while keeping the logic intact, we
>>>> should employ an explicit cast:
>>>>
>>>> Displacement *= (INT64)(1 << Ext->Sib.Scale);
>>>
>>> Ok, that makes sense. I'll use the explicit cast.
>>>
>>>>
>>>>>
>>>>> One thing I noticed is that the 32-bit builds
>>>>> (PlatformCI_OvmfPkg_Windows_VS2019_PR, Platform_CI OVMF_IA32_NOOPT and
>>>>> Platform_CI OVMF_IA32X64_NOOPT) encounter an error:
>>>>>
>>>>> ERROR - Linker #2001 from SecMain.lib(SecMain.obj) : unresolved external symbol __allshl
>>>>> ERROR - Linker #1120 from d:\a\1\s\Build\Ovmf3264\NOOPT_VS2019\IA32\OvmfPkg\Sec\SecMain\DEBUG\SecMain.dll : fatal 1 unresolved externals
>>>>> ERROR - Compiler #1077 from NMAKE : fatal '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.26.28801\bin\Hostx86\x86\link.exe"' : return code '0x460'
>>>>>
>>>>> Any idea what is causing this error?
>>>>
>>>> A left-shift operator (<<) applied to a 64-bit operand is somehow
>>>> finding its way into the 32-bit SEC build.
>>>>
>>>> That is indeed wrong (for such cases, we're supposed to use LShiftU64()
>>>> from BaseLib).
>>>>
>>>> What I don't understand however is that all of the "<<" operator uses,
>>>> on 64-bit operands, should already be limited to code that is *only*
>>>> built for X64!
>>>>
>>>> For example, with this series applied, SecMain in OVMF consumes
>>>> "UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf".
>>>> And the latter consumes VmgExitLib.
>>>>
>>>> But VmgExitLib is resolved to
>>>> "UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf", in the IA32 and
>>>> IA32X64 DSC files. This Null instance contains no left-shifts.
>>>>
>>>> Therefore any << operators, applied to 64-bit operands, present in
>>>> "OvmfPkg/Library/VmgExitLib", should never be compiled for IA32 and IA32X64.
>>>>
>>>> So I don't know where the problematic "<<" comes from. It does not come
>>>> from VmgExitLib, as far as I can tell.
>>>
>>> Yes, I don't think it's coming from VmgExitLib, either.
>>>
>>> I wonder if it somehow might be coming from the MSR_SEV_ES_GHCB_REGISTER
>>> struct and the bit fields that are used within it? That code, while not
>>> executed in non-X64 builds because SEV-ES is not active, is still built
>>> and maybe the bit fields result in implicit shifts occurring, specifically
>>> in SevEsProtocolFailure()?
>>>
>>> I'll experiment with some things and see if that is the issue.
>>
>> I commented out the setting of the GhcbTerminate fields in the
>> SevEsProtocolFailure() routine of OvmfPkg/Sec/SecMain.c and the error
>> disappeared. I'll see if changing from using UINT64 to multiple UINT32
>> entries fixes the problem, but I wouldn't think that the bit fields
>> would/should cause an issue here with 32-bit builds.
>
> Changing the bit fields from UINT64 to UINT32 fixed the error and SEV-ES
> support continues to function properly. Since the architecture is little
> endian, there was no need to pad out to the full UINT64 size for the
> structs (the union takes care of that in general). The change looks like
> this:
>
> diff --git a/MdePkg/Include/Register/Amd/Fam17Msr.h b/MdePkg/Include/Register/Amd/Fam17Msr.h
> index 466a3143599c..3cbe593868d4 100644
> --- a/MdePkg/Include/Register/Amd/Fam17Msr.h
> +++ b/MdePkg/Include/Register/Amd/Fam17Msr.h
> @@ -28,7 +28,7 @@
> **/
> typedef union {
> struct {
> - UINT64 Function:12;
> + UINT32 Function:12;
> } GhcbInfo;
>
> struct {
> @@ -39,9 +39,9 @@ typedef union {
> } GhcbProtocol;
>
> struct {
> - UINT64 Function:12;
> - UINT64 ReasonCodeSet:4;
> - UINT64 ReasonCode:8;
> + UINT32 Function:12;
> + UINT32 ReasonCodeSet:4;
> + UINT32 ReasonCode:8;
> } GhcbTerminate;
>
> VOID *Ghcb;
>
> Unless there are any concerns, I'll incorporate this change.
Right, my general disapproval of bit-fields notwithstanding, this looks
consistent with most of the bit-fields under MdePkg!
Thanks
Laszlo
next prev parent reply other threads:[~2020-07-08 16:25 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-05 13:26 [PATCH v9 00/46] SEV-ES guest support Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 01/46] MdeModulePkg: Create PCDs to be used in support of SEV-ES Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 02/46] UefiCpuPkg: Create PCD " Lendacky, Thomas
2020-06-12 0:50 ` [edk2-devel] " Dong, Eric
2020-06-05 13:26 ` [PATCH v9 03/46] MdePkg: Add the MSR definition for the GHCB register Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 04/46] MdePkg: Add a structure definition for the GHCB Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 05/46] MdeModulePkg/DxeIplPeim: Support GHCB pages when creating page tables Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 06/46] MdePkg/BaseLib: Add support for the XGETBV instruction Lendacky, Thomas
2020-07-03 2:39 ` [edk2-devel] " Zhiguang Liu
2020-07-06 20:13 ` Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 07/46] MdePkg/BaseLib: Add support for the VMGEXIT instruction Lendacky, Thomas
2020-06-05 13:26 ` [PATCH v9 08/46] UefiCpuPkg: Implement library support for VMGEXIT Lendacky, Thomas
2020-06-12 0:56 ` Dong, Eric
2020-06-18 7:23 ` Dong, Eric
2020-06-18 14:09 ` Lendacky, Thomas
2020-06-19 7:47 ` [edk2-devel] " Dong, Eric
2020-06-19 13:50 ` Lendacky, Thomas
2020-06-19 14:21 ` Dong, Eric
2020-06-19 15:38 ` Laszlo Ersek
2020-06-23 1:16 ` Dong, Eric
2020-06-23 12:58 ` Lendacky, Thomas
2020-07-02 7:04 ` Dong, Eric
2020-07-06 20:03 ` Lendacky, Thomas
2020-07-07 15:36 ` Laszlo Ersek
2020-07-07 15:50 ` Lendacky, Thomas
2020-07-07 17:11 ` Lendacky, Thomas
2020-07-08 13:07 ` Lendacky, Thomas
2020-07-08 16:25 ` Laszlo Ersek [this message]
2020-07-08 15:24 ` bit-fields [was: PATCH v9 08/46 UefiCpuPkg: Implement library support for VMGEXIT] Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 09/46] OvmfPkg: Prepare OvmfPkg to use the VmgExitLib library Lendacky, Thomas
2020-06-10 12:08 ` Laszlo Ersek
2020-06-10 14:15 ` Lendacky, Thomas
2020-06-11 14:20 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 10/46] UefiPayloadPkg: Prepare UefiPayloadPkg " Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 11/46] UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC exception Lendacky, Thomas
2020-06-12 1:02 ` Dong, Eric
2020-06-05 13:27 ` [PATCH v9 12/46] OvmfPkg/VmgExitLib: Implement library support for VmgExitLib in OVMF Lendacky, Thomas
2020-06-10 12:26 ` Laszlo Ersek
2020-06-10 14:54 ` Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 13/46] OvmfPkg/VmgExitLib: Add support for IOIO_PROT NAE events Lendacky, Thomas
2020-06-10 12:34 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 14/46] OvmfPkg/VmgExitLib: Support string IO " Lendacky, Thomas
2020-06-10 12:39 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 15/46] OvmfPkg/VmgExitLib: Add support for CPUID " Lendacky, Thomas
2020-06-10 12:41 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 16/46] OvmfPkg/VmgExitLib: Add support for MSR_PROT " Lendacky, Thomas
2020-06-10 12:43 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 17/46] OvmfPkg/VmgExitLib: Add support for NPF NAE events (MMIO) Lendacky, Thomas
2020-06-11 8:30 ` Laszlo Ersek
2020-06-11 15:09 ` Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 18/46] OvmfPkg/VmgExitLib: Add support for WBINVD NAE events Lendacky, Thomas
2020-06-11 8:33 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 19/46] OvmfPkg/VmgExitLib: Add support for RDTSC " Lendacky, Thomas
2020-06-11 8:35 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 20/46] OvmfPkg/VmgExitLib: Add support for RDPMC " Lendacky, Thomas
2020-06-11 9:05 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 21/46] OvmfPkg/VmgExitLib: Add support for INVD " Lendacky, Thomas
2020-06-11 9:06 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 22/46] OvmfPkg/VmgExitLib: Add support for VMMCALL " Lendacky, Thomas
2020-06-11 9:08 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 23/46] OvmfPkg/VmgExitLib: Add support for RDTSCP " Lendacky, Thomas
2020-06-11 9:09 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 24/46] OvmfPkg/VmgExitLib: Add support for MONITOR/MONITORX " Lendacky, Thomas
2020-06-11 9:10 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 25/46] OvmfPkg/VmgExitLib: Add support for MWAIT/MWAITX " Lendacky, Thomas
2020-06-11 9:10 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 26/46] OvmfPkg/VmgExitLib: Add support for DR7 Read/Write " Lendacky, Thomas
2020-06-11 9:24 ` Laszlo Ersek
2020-06-11 9:31 ` Laszlo Ersek
2020-06-11 15:16 ` Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 27/46] OvmfPkg/MemEncryptSevLib: Add an SEV-ES guest indicator function Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 28/46] OvmfPkg: Add support to perform SEV-ES initialization Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 29/46] OvmfPkg: Create a GHCB page for use during Sec phase Lendacky, Thomas
2020-06-11 9:56 ` Laszlo Ersek
2020-06-11 15:25 ` Lendacky, Thomas
2020-06-11 17:52 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 30/46] OvmfPkg/PlatformPei: Reserve GHCB-related areas if S3 is supported Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 31/46] OvmfPkg: Create GHCB pages for use during Pei and Dxe phase Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 32/46] OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabled Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 33/46] UefiCpuPkg: Create an SEV-ES workarea PCD Lendacky, Thomas
2020-06-12 1:03 ` Dong, Eric
2020-06-05 13:27 ` [PATCH v9 34/46] OvmfPkg: Reserve a page in memory for the SEV-ES usage Lendacky, Thomas
2020-06-11 10:03 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 35/46] OvmfPkg/PlatformPei: Reserve SEV-ES work area if S3 is supported Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 36/46] OvmfPkg/ResetVector: Add support for a 32-bit SEV check Lendacky, Thomas
2020-06-11 10:08 ` Laszlo Ersek
2020-06-05 13:27 ` [PATCH v9 37/46] OvmfPkg/Sec: Add #VC exception handling for Sec phase Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 38/46] OvmfPkg/Sec: Enable cache early to speed up booting Lendacky, Thomas
2020-06-05 13:27 ` [PATCH v9 39/46] OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Bypass flash detection with SEV-ES Lendacky, Thomas
2020-06-05 17:58 ` [PATCH v9 40/46] UefiCpuPkg: Add a 16-bit protected mode code segment descriptor Lendacky, Thomas
2020-06-16 8:24 ` Dong, Eric
2020-06-05 17:58 ` [PATCH v9 41/46] UefiCpuPkg/MpInitLib: Add CPU MP data flag to indicate if SEV-ES is enabled Lendacky, Thomas
2020-06-12 1:03 ` Dong, Eric
2020-06-05 17:58 ` [PATCH v9 42/46] UefiCpuPkg: Allow AP booting under SEV-ES Lendacky, Thomas
2020-06-05 17:58 ` [PATCH v9 43/46] OvmfPkg: Use the SEV-ES work area for the SEV-ES AP reset vector Lendacky, Thomas
2020-06-18 7:43 ` Dong, Eric
2020-06-18 14:50 ` Lendacky, Thomas
2020-06-19 7:40 ` [edk2-devel] " Dong, Eric
2020-06-05 17:58 ` [PATCH v9 44/46] OvmfPkg: Move the GHCB allocations into reserved memory Lendacky, Thomas
2020-06-05 17:58 ` [PATCH v9 45/46] UefiCpuPkg/MpInitLib: Prepare SEV-ES guest APs for OS use Lendacky, Thomas
2020-06-05 17:58 ` [PATCH v9 46/46] Maintainers.txt: Add reviewers for the OvmfPkg SEV-related files Lendacky, Thomas
2020-06-11 10:21 ` Laszlo Ersek
2020-06-11 11:06 ` Brijesh Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bb7acac3-42b4-8292-f8c5-eb306a34f4eb@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox