From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (NAM02-BL2-obe.outbound.protection.outlook.com [40.107.75.72]) by mx.groups.io with SMTP id smtpd.web12.16852.1597245511795905763 for ; Wed, 12 Aug 2020 08:18:32 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amdcloud.onmicrosoft.com header.s=selector2-amdcloud-onmicrosoft-com header.b=YlnGAJ3P; spf=none, err=SPF record not found (domain: amd.com, ip: 40.107.75.72, mailfrom: thomas.lendacky@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j8nY81pxhlb5TW5gwqpUr6b3GuN93aodZ5t2QQdPzZ0FPX44sy1+ITlGiXqvixWLXGU1W6RwnFL+59k5IoZe5hxsmquMVOJ0Rrt7b5LWqLMGpJR2OGGfIJPMsqRgR2ztmMcv3vs/A76AHocKYSWkTGrUN3JBOMqolQN+C/uPXAXZvIHnKadZ6PMh8Lh3MqvRb2I1Ev6FQnoLvJNhc+qL8+lEh4/rmkEnYU42OtU53ojHW/1VIG+CiDwEURR4llmNfv9bc4zxZ0xqXgPpm4tixMdYUjW65EjnVva5BRbRIsHLyk+GCBD0hsgl6DV4S10KlSesQKrw3Sd3m80vrelB5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dn+OfLm6FiqGWyYRyQ/NuPHledmLC8yTpsIj9qVe8Dk=; b=Q0VDt90JN6uIjYsVhu2nch2zdIaLPVss7ofNydK+gCpctA+GHUaF4etTDOOdWjxUwCMYv4s4TOXjtxj+SFHeu2znpBehXFdNv7XCUK7gQakkQhV5wc7egXSc3A3k1ST7ARGkiJT/LFLo3rVC5F40Xm5aaBRRFoscXmb9HU/vU1zVlqCuGFb8E55XehhrQ3TJUcxxgIQ1LJAq6d9slqlHyfEeyWcQAayiiwnpJbiUE+wVeZQICu0poWJw5au2ZmpYoegYkhHJZXllWqojhu5UHiUwAu/qgTOezxjQb2PobpbDueFRy8mKa+jbRwyeCMfguW9dlPEVHsvvu5CMekjdQQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dn+OfLm6FiqGWyYRyQ/NuPHledmLC8yTpsIj9qVe8Dk=; b=YlnGAJ3Pvfuon5XIbizWXBqr4hFyp2ilbhP0CcKTmHSWNj3zeGp5urXpDfRv8W5drtD6iFaUj5zn0iaslAwVy9xyizFyjBM8Lf6bB48snWAGW1yjrJbs+GZk+oBvj+YWxFt6e1RnlphLYvO3jre91DW9iEPwbGEYOGFW45xLNT4= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=amd.com; Received: from DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) by DM6PR12MB2780.namprd12.prod.outlook.com (2603:10b6:5:4e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.16; Wed, 12 Aug 2020 15:18:29 +0000 Received: from DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::25ec:e6ba:197c:4eb0]) by DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::25ec:e6ba:197c:4eb0%8]) with mapi id 15.20.3261.025; Wed, 12 Aug 2020 15:18:29 +0000 Subject: Re: [edk2-devel] [PATCH v14 00/46] SEV-ES guest support To: "Gao, Liming" , "devel@edk2.groups.io" , Laszlo Ersek CC: Brijesh Singh , Ard Biesheuvel , "Dong, Eric" , "Justen, Jordan L" , "Kinney, Michael D" , "Ni, Ray" , Andrew Fish , Anthony Perard , "You, Benjamin" , "Bi, Dandan" , "Dong, Guo" , "Wu, Hao A" , "Wang, Jian J" , Julien Grall , Leif Lindholm , "Ma, Maurice" References: <4fa19934-008b-f8e5-6db8-0c39fe9875de@redhat.com> From: "Lendacky, Thomas" Message-ID: <0bfcf395-2563-592c-0252-61aa9f86d952@amd.com> Date: Wed, 12 Aug 2020 10:18:26 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 In-Reply-To: X-ClientProxiedBy: SN4PR0201CA0022.namprd02.prod.outlook.com (2603:10b6:803:2b::32) To DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) Return-Path: thomas.lendacky@amd.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [10.236.30.118] (165.204.77.1) by SN4PR0201CA0022.namprd02.prod.outlook.com (2603:10b6:803:2b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.15 via Frontend Transport; Wed, 12 Aug 2020 15:18:27 +0000 X-Originating-IP: [165.204.77.1] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e1044f6f-bc44-42c4-47e5-08d83ed2f758 X-MS-TrafficTypeDiagnostic: DM6PR12MB2780: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1h5VfA0+yXugIGA3XtJWBS6tpsi2BoA45X+vLqZoqHI1LjNeh7GUpLsw0/sk7UyUEgbMYCuMTfiCl/G5536IIROK3UAVhS7C/wfaCi6Jhk/7QqLh7aUZEjH1zfvhb9IKtmaoGI0yWL/51A2Ee9NJtOADEWWN8MEMq8KIOxh8HXvfbKuGuPNTZIpMMgMyEtZrVYbd8PwzFMZMDtB8CDXMXiXRcXRAYRMkLIg1IGO7uuMVi+7Iu6fQ+WsW7989rc2omwr4UQxoeHqyYTyuPCgEfOboXiJQnaBqc1KK537uCC1xnFRqJZSdLak5pZtQp8ShhUYgzdty+d+WuByw3daggjsiUgmes9xD7ZmNXXuUyz94C1heZiNYuNYwWzM//59kGF0HynQbESH+mTexJzJYFJZAZLvU6FhwmMdWWh93ViQ+b8F0Qg+euPd7iLFlPFV/Bgk6/XKiQRJAewJqGnO1YQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM5PR12MB1355.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(346002)(136003)(376002)(396003)(39860400002)(316002)(16576012)(54906003)(110136005)(4326008)(8676002)(8936002)(83080400001)(31686004)(966005)(7416002)(478600001)(5660300002)(2616005)(2906002)(956004)(52116002)(86362001)(83380400001)(16526019)(31696002)(186003)(45080400002)(30864003)(6486002)(26005)(66946007)(36756003)(66556008)(19627235002)(66476007)(53546011)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: uwsa4W76Nm63+RH9wsSOSZTQw5UkBv67f9oAJTzwrtH9BacEfitibW2Eg9+0HQghIUECyb8lwiWJNa0hovwrcAC57nGGWL18YafTckEU5dfhyV337iqU9cNccWju/d/iQsd2YckqRNdN9ylhuBaGSMXjlYWDIGcLV9AHspR1/iJzRiWQIUc00pTVX1ZlvDq1gHCKUXXnW4vBiLISYW0osaQB8cbNH4T72lwJsPNMGXFiqNkE+AZzN32IjxlqwDxqIcR5gAoNkYauZ96AUfHm0R/xbCZZh4pm8gtOFvMGR6pyYotCcwLXvLDTFFoAbYu/Hemep1Dm66Oethx/i7hqT/TbPDJjKZmuV+J+WUA0AHSfos0Ycl4XbGEG49AfCDhrUixjURMeJ0r/6GKfxHbI2IeMxkklbV8IuVpb7wPdj5WFX58uq9nBLb0tPobvDzqhJvVdhVrd7AD0O03uypKCAVdIlLpSW2tnOy9aBlOWYrswcSedoyPnN8e3e/rK3ewMDs0C5PYm0yOpLPMKyXVLYyGBJmy8GNTA1oDwldZCuWzGZEsNq4RQ7MktygYtNnqd4OoK+iA02FuBsBkVPEFOqvQ8Q9lre0M4VIDeCCdQetKj+vNaCdZ7AiHCQDeXs+sw8/4z6e5Twl7bRMPJBoxoFQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1044f6f-bc44-42c4-47e5-08d83ed2f758 X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1355.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2020 15:18:28.9796 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mKugW2zwZVDwzpMr/bREkBIgoS6MZ75CnDM8buJYrRwTZaQDABERwwNt0fVtegDgFLZnzjaQ9WDGPwjcDb2wUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2780 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi Liming, So I'm not sure what the next step is then... Since the ECC checker isn't merged yet, are you saying that I should submit the series again with the changes and that you won't be running the stand-alone tool again? Or will you run the tool again and submit more issues to resolve if the tool finds any? If it's the latter, I would really like to be able to run this tool stand-alone, as you have done, so that I don't have to keep re-submitting the series (because it looks like the tool doesn't catch everything and fixing one thing may then expose another). Thanks, Tom On 8/12/20 9:34 AM, Gao, Liming wrote: > Tom: >=20 > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Lendacky,= Thomas > Sent: 2020=E5=B9=B48=E6=9C=8812=E6=97=A5 0:18 > To: Laszlo Ersek ; Gao, Liming = ; devel@edk2.groups.io > Cc: Brijesh Singh ; Ard Biesheuvel ; Dong, Eric ; Justen, Jordan L ; Kinney, Michael D ; Ni, Ray ; Andrew Fish ; Anthony Perard ; You, Benjamin ; Bi, Dandan ; Dong, Guo ; Wu, Hao A ; Wang, Jian J ; Julien Grall ; = Leif Lindholm ; Ma, Maurice > Subject: Re: [edk2-devel] [PATCH v14 00/46] SEV-ES guest support >=20 > On 8/11/20 9:49 AM, Laszlo Ersek wrote: >> On 08/11/20 03:12, Gao, Liming wrote: >>> Tom: >>> I run ECC plugin (https://nam11.safelinks.protection.outlook.com/?ur= l=3Dhttps%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F63271&data=3D0= 2%7C01%7Cthomas.lendacky%40amd.com%7C4285f946d86342630a4708d83ecccf27%7C3dd= 8961fe4884e608e11a82d994e183d%7C0%7C0%7C637328396655798086&sdata=3D27yd= FZdocl9RV7MbrLRKw0L2GiOGtWLlpsuaw9wj2fo%3D&reserved=3D0) in my local ma= chine. It reports below issues. Can you help update the patches to fix them= ? >>> I use the standalone EccCheck from https://nam11.safelinks.protectio= n.outlook.com/?url=3Dhttps%3A%2F%2Fgithub.com%2Fshenglei10%2Fedk2%2Ftree%2F= ecc_script&data=3D02%7C01%7Cthomas.lendacky%40amd.com%7C4285f946d863426= 30a4708d83ecccf27%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637328396655= 798086&sdata=3Db8VUf6uNw%2FzNBZCKU0IUUakDLJPmVsK4ghJirmQwCwY%3D&res= erved=3D0.=20 >>> >>> EFI coding style error >>> *Error code: 8005 >>> *Variable name does not follow the rules: 1. First character should = be upper case 2. Must contain lower case characters 3. No white space chara= cters 4. Global variable name must start with a 'g' >>> *file: D:\AllPkg\edk2\OvmfPkg\Sec\SecMain.c >>> *Line number: 867 >>> *The variable name [*Ds] does not follow the rules >> >> I don't understand this report; with this series applied, line 867 is= =20 >> the following: >> >> 867 UINT8 *Src, *Dst; >> >> coming from patch v14 37/46, "OvmfPkg/Sec: Add #VC exception handling= =20 >> for Sec phase". >> >> Perhaps ECC is confused because we have two declarations on the same=20 >> line; I'm not sure. >> >> In general I too like to keep declarations on separate lines, but=20 >> there are exceptions. Declaring *Src and *Dst on the same line is=20 >> pretty reasonable, and trivial. >> >> I think it's time for us to put the ECC exception list to use, under=20 >> OvmfPkg. >> >> Tom, please try to reproduce this error locally, and then modify=20 >> "OvmfPkg/OvmfPkg.ci.yaml", adding an exception under the EccCheck block= . >> >> ... Oh wait, we haven't even merged Shenglei's series for that! The=20 >> latest posting is: >> >> [edk2-devel] [PATCH v9 00/16] >> Add a plugin to check Ecc issues for edk2 on open ci >> >> and it's still under review. >> >> Indeed, Liming says above that he used the "standalone EccCheck". >> >> OK. In this case, I state that some of these ECC reports for OvmfPkg=20 >> should be waived. >> >> I'm in general of the opinion that ECC is too strict, and package=20 >> maintainers should have power to selectively enforce or override ECC=20 >> reports. That's why I agreed to the ECC CI plugin in the first place=20 >> -- becase we have exception lists that are controllable under specific= =20 >> package directories (in the *.ci.yaml files). >> >> In the present case, running the standalone ECC check has worse=20 >> granularity than the upcoming ECC CI plugin. So, because I can't ask=20 >> Tom to add a new exception to "OvmfPkg/OvmfPkg.ci.yaml" right now=20 >> (before we merge this series), I'm replacing that with a waiver in this= email. >> >> Of course, if maintainers of other packages want the ECC reports=20 >> issued under their packages addressed, that's their call. I can only=20 >> waive ECC reports under OvmfPkg. >> >>> EFI coding style error >>> *Error code: 9003 >>> *The first line of text in a comment block should be a brief descrip= tion of the element being documented and the brief description must end wit= h a period. >>> *file: D:\AllPkg\edk2\OvmfPkg\Library\BaseMemEncryptSevLib\MemEncryp= tSevLibInternal.c >>> *Line number: 72 >>> *Comment description should end with period '.'=20 >> >> Disagree; sometimes people use well-formed full English sentences,=20 >> sometimes only thought fragments. >> >>> EFI coding style error >>> *Error code: 3002 >>> *Non-Boolean comparisons should use a compare operator (=3D=3D, !=3D= , >, < >=3D, <=3D) >>> *file: D:\AllPkg\edk2\OvmfPkg\Library\VmgExitLib\VmgExitVcHandler.c >>> *Line number: 1280 >>> *Predicate Expression: OpCount >> >> On the other hand, this report *is* worth fixing. >> >> 1280 while (OpCount) { >> >> I've myself asked Tom for observing this rule at several locations,=20 >> but we both missed the one reported above. It comes from patch #14 >> ("OvmfPkg/VmgExitLib: Support string IO for IOIO_PROT NAE events"). >> >>> EFI coding style error >>> *Error code: 5007 >>> *There should be no initialization of a variable as part of its decl= aration >>> *file: D:\AllPkg\edk2\OvmfPkg\Library\VmgExitLib\VmgExitVcHandler.c >>> *Line number: 845 >>> *Variable Name: Data >> >> Agree this should be fixed; I should have noticed it during review. My= =20 >> apologies. >> >> 845 UINT8 *Data =3D (UINT8 *) Ghcb->SharedBuffer; >> >> Comes from patch #17 ("OvmfPkg/VmgExitLib: Add support for NPF NAE=20 >> events (MMIO)"). >> >>> EFI coding style error >>> *Error code: 5007 >>> *There should be no initialization of a variable as part of its decl= aration >>> *file: D:\AllPkg\edk2\OvmfPkg\Library\VmgExitLib\VmgExitVcHandler.c >>> *Line number: 849 >>> *Variable Name: Data >> >> Yes, this should be fixed too: >> >> 849 UINT16 *Data =3D (UINT16 *) Ghcb->SharedBuffer; >> >> Again, I should have noticed it; I'm sorry. >> >> It comes from patch #17 ("OvmfPkg/VmgExitLib: Add support for NPF NAE= =20 >> events (MMIO)") again. >> >> Tom: given that a new iteration seems justified after all (I'm really= =20 >> sorry about that -- with Shenglei's series hopefully soon merged, such= =20 >> issues will be reported earlier!), if you'd like, you could address=20 >> the two ECC reports too that I said were too strict and should be ignor= ed. >> (That means breaking the "*Dst" declaration to a new line, and adding= =20 >> a period to the comment.) Up to you; I certainly don't insist on those. >=20 > No worries, easy enough to do if I'm already updating the others. >=20 > I would like to be able to run this tool on my system, though, to see if= anything else gets flagged after fixing the above mentioned issues. But th= e tool fails for me as I described in another post. The reason I say that i= s, for example, the issue about the comment description ending with a perio= d was actually in multiple spots of the commit, even though the tool only f= lagged one. I'd hate to think I've fixed everything only to have the tool f= ind more issues after I've submitted another series, all because I couldn't= run the tool. >=20 > Thanks, > Tom >=20 > [Liming] ECC checker will be merged in open CI to check the patch and re= port the issues. Then, you don't need to run it in your local machine. I us= e this patch set as test case to verify ECC checker functionality. And, it = reports those issues. I think they are valuable for this patch set, so I ra= ise them. Sorry for the late notice. >=20 > Thanks > Liming >> >> Thanks! >> Laszlo >> >>> >>> Thanks >>> Liming >>> -----Original Message----- >>> From: Laszlo Ersek >>> Sent: 2020=E5=B9=B48=E6=9C=8811=E6=97=A5 3:36 >>> To: devel@edk2.groups.io; thomas.lendacky@amd.com >>> Cc: Brijesh Singh ; Ard Biesheuvel=20 >>> ; Dong, Eric ; Justen,=20 >>> Jordan L ; Gao, Liming=20 >>> ; Kinney, Michael D=20 >>> ; Ni, Ray ; Andrew Fish= =20 >>> ; Anthony Perard ; You,=20 >>> Benjamin ; Bi, Dandan ;= =20 >>> Dong, Guo ; Wu, Hao A ; Wang,= =20 >>> Jian J ; Julien Grall ; Leif=20 >>> Lindholm ; Ma, Maurice >>> Subject: Re: [edk2-devel] [PATCH v14 00/46] SEV-ES guest support >>> >>> On 08/07/20 21:38, Lendacky, Thomas wrote: >>>> From: Tom Lendacky >>>> >>>> This patch series provides support for running EDK2/OVMF under SEV-ES= . >>>> >>>> Secure Encrypted Virtualization - Encrypted State (SEV-ES) expands=20 >>>> on the SEV support to protect the guest register state from the=20 >>>> hypervisor. See >>>> "AMD64 Architecture Programmer's Manual Volume 2: System=20 >>>> Programming", section "15.35 Encrypted State (SEV-ES)" [1]. >>>> >>>> In order to allow a hypervisor to perform functions on behalf of a=20 >>>> guest, there is architectural support for notifying a guest's=20 >>>> operating system when certain types of VMEXITs are about to occur. >>>> This allows the guest to selectively share information with the=20 >>>> hypervisor to satisfy the requested function. The notification is=20 >>>> performed using a new exception, the VMM Communication exception=20 >>>> (#VC). The information is shared through the Guest-Hypervisor Communi= cation Block (GHCB) using the VMGEXIT instruction. >>>> The GHCB format and the protocol for using it is documented in=20 >>>> "SEV-ES Guest-Hypervisor Communication Block Standardization" [2]. >>>> >>>> The main areas of the EDK2 code that are updated to support SEV-ES=20 >>>> are around the exception handling support and the AP boot support. >>>> >>>> Exception support is required starting in Sec, continuing through=20 >>>> Pei and into Dxe in order to handle #VC exceptions that are generated= . >>>> Each AP requires it's own GHCB page as well as a page to hold values= =20 >>>> specific to that AP. >>>> >>>> AP booting poses some interesting challenges. The INIT-SIPI-SIPI=20 >>>> sequence is typically used to boot the APs. However, the hypervisor= =20 >>>> is not allowed to update the guest registers. The GHCB document [2]= =20 >>>> talks about how SMP booting under SEV-ES is performed. >>>> >>>> Since the GHCB page must be a shared (unencrypted) page, the=20 >>>> processor must be running in long mode in order for the guest and=20 >>>> hypervisor to communicate with each other. As a result, SEV-ES is=20 >>>> only supported under the X64 architecture. >>>> >>>> This series adds a new library requirement for the VmgExitLib=20 >>>> library against the UefiCpuPkg CpuExceptionHandlerLib library and=20 >>>> the UefiCpuPkg MpInitLib library. The edk2-platforms repo requires=20 >>>> updates/patches to add the new library requirement. To accomodate=20 >>>> that, this series could be split between: >>>> >>>> patch number 10: >>>> UefiPayloadPkg: Prepare UefiPayloadPkg to use the VmgExitLib=20 >>>> library >>>> >>>> and patch number 11: >>>> UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC=20 >>>> exception >>>> >>>> The updates to edk2-platforms can be applied at the split. >>>> >>>> [1]=20 >>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fw= w >>>> w.amd.com%2Fsystem%2Ffiles%2FTechDocs%2F24593.pdf&data=3D02%7C01%= 7 >>>> Cthomas.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C3dd8 >>>> 961fe4884e608e11a82d994e183d%7C0%7C0%7C637327542159394484&sdata= =3D >>>> zusPC5xFZWfLxt6T5Psxb1%2Fw4mrVWnkrrECkuKSsxLk%3D&reserved=3D0 >>>> [2]=20 >>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fd= e >>>> veloper.amd.com%2Fwp-content%2Fresources%2F56421.pdf&data=3D02%7C= 0 >>>> 1%7Cthomas.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C3 >>>> dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637327542159394484&sda >>>> ta=3Dyk7o8h1lajI449tZfXGbPumnkvRjswKp1FRmSUdewh4%3D&reserved=3D0 >>>> >>>> --- >>>> >>>> These patches are based on commit: >>>> 9565ab67c209 ("ShellPkg: smbiosview - Change some type 17 field=20 >>>> values >>>> format") >>>> >>>> A version of the tree can be found at: >>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fg= i >>>> thub.com%2FAMDESE%2Fovmf%2Ftree%2Fsev-es-v22&data=3D02%7C01%7Ctho= m >>>> as.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C3dd8961fe >>>> 4884e608e11a82d994e183d%7C0%7C0%7C637327542159404476&sdata=3D6b9E= q >>>> EVAy1VK38oMSuAPJhOourJpPXUnRIgMcSWRMQc%3D&reserved=3D0 >>>> >>>> Cc: Andrew Fish >>>> Cc: Anthony Perard >>>> Cc: Ard Biesheuvel >>>> Cc: Benjamin You >>>> Cc: Dandan Bi >>>> Cc: Eric Dong >>>> Cc: Guo Dong >>>> Cc: Hao A Wu >>>> Cc: Jian J Wang >>>> Cc: Jordan Justen >>>> Cc: Julien Grall >>>> Cc: Laszlo Ersek >>>> Cc: Leif Lindholm >>>> Cc: Liming Gao >>>> Cc: Maurice Ma >>>> Cc: Michael D Kinney >>>> Cc: Ray Ni >>>> >>>> Changes since v13: >>>> - Fixup the AsmRelocateApLoop() call site so IA32 successfully boots = APs. >>>> Do this by appending the three new parameters without altering the >>>> original parameter passing order. >>>> - Minor updates to description text and help text to expand the GHCB >>>> acronym. >>>> >>>> Changes since v12: >>>> - Change IA32 VMGEXIT .nasm file to issue an int 3. Depending on the >>>> version of NASM, the "BITS 64" trick to get NASM to recognize the >>>> VMMCALL instruction (VMGEXIT is a REP VMMCALL) caused an error. Sin= ce >>>> SEV-ES is X64 only, VMGEXIT should never be called in IA32. >>>> >>>> Changes since v11: >>>> - Make the XGETBV and VMGEXIT .nasm files buildable for all environme= nts >>>> and remove the updates that add these instructions to GccInline.c >>>> >>>> Changes since v10: >>>> - Fix conflicts around GccInline.c file after moving to latest=20 >>>> commit >>>> - Fix conflicts with OVMF PCD values after moving to latest commit >>>> >>>> Changes since v9: >>>> - Fixed bit field declarations in the GHCB structure to use UINT32 >>>> and not UINT64. >>>> - Fixed a warning produced by VS2019 in the instruction parsing code >>>> by expliciting casting a bit shift to an INT64. >>>> - Sorted section entries in the OVMF VmgExitLib INF file. >>>> - Moved the new Maintainers.txt entry so entries remain sorted. >>>> - Documentation style fixes for return values. >>>> - Miscellaneous code style fixes. >>>> >>>> Changes since v8: >>>> - Move IOIO exit info definitions into Ghcb.h file >>>> - Add a macro for calculating IO instruction bytes=20 >>>> (IOIO_DATA_BYTES) >>>> - Exception handler support for debug registers >>>> - Moved the DRx register saving changes into the UefiCpuPkg patch f= or >>>> base #VC support in CpuExceptionHandlerLib. >>>> - OvmfPkg VmgExitLib >>>> - Remove the .uni file >>>> - Update .inf file: >>>> - New file location for VmgExitVcHandler.c >>>> - Add additional Packages and LibraryClasses >>>> - Introduce a header file to hold the #VC instruction parsing related >>>> definitions >>>> - Include additional #defines for instruction decoding to replace >>>> hard coded values for things like instruction prefixes and escape= s. >>>> - Replace hardcoded CPUID values with values from existing header fil= es >>>> and use existing CR4 definition for accessing CR4 data. >>>> - Change the type used for obtaining data addresses in the instructio= n >>>> parsing >>>> - Switch from INTN to UINT64 and use compiler conversions and casti= ng >>>> to perform the correct address calculation >>>> - ResetVector code: >>>> - Revert some inadvertant changes introduced in v7 for reserving th= e >>>> SEV-ES work area memory and for checking the status of SEV-ES. >>>> - AP Booting >>>> - Provide support for non-broadcast INIT-SIPI-SIPI AP boot (minimiz= e >>>> code duplication by creating a function to set the AP jump table >>>> vector address). >>>> - Fix file/directory entry in maintainer changes. >>>> - Various coding style fixes >>>> - Commenting, if statements, etc. >>>> - Various documentation style fixes >>>> >>>> Changes since v7: >>>> - Reserve the SEV-ES workarea when S3 is enabled >>>> - Fix warnings issued by the Visual Studio compiler >>>> - Create a NULL VmgExitLib instance that is used for VMGEXIT >>>> related operations as well as #VC handling. Then create the full >>>> VmgExitLib support only in OvmfPkg - where it will be used. This >>>> removes a bunch of implementation code from platforms that will >>>> not be using the functionality. >>>> - Remove single use interfaces from the VmgExitLib (VmgMmioWrite >>>> and VmgSetApJumpTable) >>>> >>>> Changes since v6: >>>> - Add function comments to all functions, including local functions >>>> - Add function parameter direction to all functions (in/out) >>>> - Add support for MMIO MOVZX/MOVSX instructions >>>> - Ensure the per-CPU variable page remains encrypted >>>> - Coding-style fixes as identified by Ecc >>>> >>>> Changes since v5: >>>> - Remove extraneous VmgExitLib usage >>>> - Miscellaneous changes to address feedback (coding style, etc.) >>>> >>>> Changes since v4: >>>> - Move the SEV-ES protocol negotiation out of the SEC exception handl= er >>>> and into the SecMain.c file. As a result: >>>> - Move the SecGhcb related PCDs out of UefiCpuPkg and into OvmfPkg >>>> - Combine SecAMDSevVcHandler.c and PeiDxeAMDSevVcHandler.c into a >>>> single AMDSevVcHandler.c >>>> - Consolidate VmgExitLib usage into common LibraryClasses sections >>>> - Add documentation comments to the VmgExitLib functions >>>> >>>> Changes since v3: >>>> - Remove the need for the MP library finalization routine. The AP >>>> jump table address will be held by the hypervisor rather than >>>> communicated via the GHCB MSR. This removes some fragility around >>>> the UEFI to OS transition. >>>> - Rename the SEV-ES RIP reset area to SEV-ES workarea and use it to >>>> communicate the SEV-ES status, so that SEC CPU exception handling i= s >>>> only established for an SEV-ES guest. >>>> - Fix SMM build breakageAdd around QemuFlashPtrWrite(). >>>> - Fix SMM build breakage by adding VC exception support the SMM CPU >>>> exception handling. >>>> - Add memory fencing around the invocation of AsmVmgExit(). >>>> - Clarify comments around the SEV-ES AP reset RIP values and usage. >>>> - Move some PCD definitions from MdeModulePkg to UefiCpuPkg. >>>> - Remove the 16-bit code selector definition from MdeModulePkg >>>> >>>> Changes since v2: >>>> - Added a way to locate the SEV-ES fixed AP RIP address for starting >>>> AP's to avoid updating the actual flash image (build time location >>>> that is identified with a GUID value). >>>> - Create a VmgExit library to replace static inline functions. >>>> - Move some PCDs to the appropriate packages >>>> - Add support for writing to QEMU flash under SEV-ES >>>> - Add additional MMIO opcode support >>>> - Cleaned up the GHCB MSR CPUID protocol support >>>> >>>> Changes since v1: >>>> - Patches reworked to be more specific to the component/area being up= dated >>>> and order of definition/usage >>>> - Created a library for VMGEXIT-related functions to replace use of i= nline >>>> functions >>>> - Allocation method for GDT changed from AllocatePool to=20 >>>> AllocatePages >>>> - Early caching only enabled for SEV-ES guests >>>> - Ensure AP loop mode set to halt loop mode for SEV-ES guests >>>> - Reserved SEC GHCB-related memory areas when S3 is enabled >>>> >>>> Tom Lendacky (46): >>>> MdeModulePkg: Create PCDs to be used in support of SEV-ES >>>> UefiCpuPkg: Create PCD to be used in support of SEV-ES >>>> MdePkg: Add the MSR definition for the GHCB register >>>> MdePkg: Add a structure definition for the GHCB >>>> MdeModulePkg/DxeIplPeim: Support GHCB pages when creating page tabl= es >>>> MdePkg/BaseLib: Add support for the XGETBV instruction >>>> MdePkg/BaseLib: Add support for the VMGEXIT instruction >>>> UefiCpuPkg: Implement library support for VMGEXIT >>>> OvmfPkg: Prepare OvmfPkg to use the VmgExitLib library >>>> UefiPayloadPkg: Prepare UefiPayloadPkg to use the VmgExitLib librar= y >>>> UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC except= ion >>>> OvmfPkg/VmgExitLib: Implement library support for VmgExitLib in OVM= F >>>> OvmfPkg/VmgExitLib: Add support for IOIO_PROT NAE events >>>> OvmfPkg/VmgExitLib: Support string IO for IOIO_PROT NAE events >>>> OvmfPkg/VmgExitLib: Add support for CPUID NAE events >>>> OvmfPkg/VmgExitLib: Add support for MSR_PROT NAE events >>>> OvmfPkg/VmgExitLib: Add support for NPF NAE events (MMIO) >>>> OvmfPkg/VmgExitLib: Add support for WBINVD NAE events >>>> OvmfPkg/VmgExitLib: Add support for RDTSC NAE events >>>> OvmfPkg/VmgExitLib: Add support for RDPMC NAE events >>>> OvmfPkg/VmgExitLib: Add support for INVD NAE events >>>> OvmfPkg/VmgExitLib: Add support for VMMCALL NAE events >>>> OvmfPkg/VmgExitLib: Add support for RDTSCP NAE events >>>> OvmfPkg/VmgExitLib: Add support for MONITOR/MONITORX NAE events >>>> OvmfPkg/VmgExitLib: Add support for MWAIT/MWAITX NAE events >>>> OvmfPkg/VmgExitLib: Add support for DR7 Read/Write NAE events >>>> OvmfPkg/MemEncryptSevLib: Add an SEV-ES guest indicator function >>>> OvmfPkg: Add support to perform SEV-ES initialization >>>> OvmfPkg: Create a GHCB page for use during Sec phase >>>> OvmfPkg/PlatformPei: Reserve GHCB-related areas if S3 is supported >>>> OvmfPkg: Create GHCB pages for use during Pei and Dxe phase >>>> OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabled >>>> UefiCpuPkg: Create an SEV-ES workarea PCD >>>> OvmfPkg: Reserve a page in memory for the SEV-ES usage >>>> OvmfPkg/PlatformPei: Reserve SEV-ES work area if S3 is supported >>>> OvmfPkg/ResetVector: Add support for a 32-bit SEV check >>>> OvmfPkg/Sec: Add #VC exception handling for Sec phase >>>> OvmfPkg/Sec: Enable cache early to speed up booting >>>> OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Bypass flash detection with >>>> SEV-ES >>>> UefiCpuPkg: Add a 16-bit protected mode code segment descriptor >>>> UefiCpuPkg/MpInitLib: Add CPU MP data flag to indicate if SEV-ES is >>>> enabled >>>> UefiCpuPkg: Allow AP booting under SEV-ES >>>> OvmfPkg: Use the SEV-ES work area for the SEV-ES AP reset vector >>>> OvmfPkg: Move the GHCB allocations into reserved memory >>>> UefiCpuPkg/MpInitLib: Prepare SEV-ES guest APs for OS use >>>> Maintainers.txt: Add reviewers for the OvmfPkg SEV-related files >>>> >>>> MdeModulePkg/MdeModulePkg.dec | 9 + >>>> OvmfPkg/OvmfPkg.dec | 9 + >>>> UefiCpuPkg/UefiCpuPkg.dec | 17 + >>>> OvmfPkg/OvmfPkgIa32.dsc | 6 + >>>> OvmfPkg/OvmfPkgIa32X64.dsc | 6 + >>>> OvmfPkg/OvmfPkgX64.dsc | 6 + >>>> OvmfPkg/OvmfXen.dsc | 1 + >>>> UefiCpuPkg/UefiCpuPkg.dsc | 2 + >>>> UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 2 + >>>> UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 2 + >>>> OvmfPkg/OvmfPkgX64.fdf | 9 + >>>> MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 2 + >>>> MdePkg/Library/BaseLib/BaseLib.inf | 4 + >>>> OvmfPkg/Library/VmgExitLib/VmgExitLib.inf | 36 + >>>> OvmfPkg/PlatformPei/PlatformPei.inf | 9 + >>>> .../FvbServicesRuntimeDxe.inf | 2 + >>>> OvmfPkg/ResetVector/ResetVector.inf | 8 + >>>> OvmfPkg/Sec/SecMain.inf | 4 + >>>> .../DxeCpuExceptionHandlerLib.inf | 1 + >>>> .../PeiCpuExceptionHandlerLib.inf | 1 + >>>> .../SecPeiCpuExceptionHandlerLib.inf | 1 + >>>> .../SmmCpuExceptionHandlerLib.inf | 1 + >>>> .../Xcode5SecPeiCpuExceptionHandlerLib.inf | 1 + >>>> UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 4 + >>>> UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf | 4 + >>>> .../Library/VmgExitLibNull/VmgExitLibNull.inf | 27 + >>>> .../Core/DxeIplPeim/X64/VirtualMemory.h | 12 +- >>>> MdePkg/Include/Library/BaseLib.h | 31 + >>>> MdePkg/Include/Register/Amd/Fam17Msr.h | 46 + >>>> MdePkg/Include/Register/Amd/Ghcb.h | 166 ++ >>>> .../IndustryStandard/InstructionParsing.h | 83 + >>>> OvmfPkg/Include/Library/MemEncryptSevLib.h | 12 + >>>> .../QemuFlash.h | 13 + >>>> UefiCpuPkg/CpuDxe/CpuGdt.h | 4 +- >>>> UefiCpuPkg/Include/Library/VmgExitLib.h | 103 + >>>> UefiCpuPkg/Library/MpInitLib/MpLib.h | 68 +- >>>> .../Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 4 +- >>>> .../Core/DxeIplPeim/X64/DxeLoadFunc.c | 11 +- >>>> .../Core/DxeIplPeim/X64/VirtualMemory.c | 57 +- >>>> .../MemEncryptSevLibInternal.c | 75 +- >>>> OvmfPkg/Library/VmgExitLib/VmgExitLib.c | 159 ++ >>>> OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c | 1716 +++++++++++++++= ++ >>>> OvmfPkg/PlatformPei/AmdSev.c | 89 + >>>> OvmfPkg/PlatformPei/MemDetect.c | 43 + >>>> .../QemuFlash.c | 23 +- >>>> .../QemuFlashDxe.c | 40 + >>>> .../QemuFlashSmm.c | 16 + >>>> OvmfPkg/Sec/SecMain.c | 188 +- >>>> UefiCpuPkg/CpuDxe/CpuGdt.c | 8 +- >>>> .../CpuExceptionCommon.c | 10 +- >>>> .../PeiDxeSmmCpuException.c | 20 +- >>>> .../SecPeiCpuException.c | 19 + >>>> UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 120 +- >>>> UefiCpuPkg/Library/MpInitLib/MpLib.c | 337 +++- >>>> UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 19 + >>>> .../Library/VmgExitLibNull/VmgExitLibNull.c | 121 ++ >>>> UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c | 2 +- >>>> Maintainers.txt | 10 + >>>> MdeModulePkg/MdeModulePkg.uni | 8 + >>>> MdePkg/Library/BaseLib/Ia32/VmgExit.nasm | 38 + >>>> MdePkg/Library/BaseLib/Ia32/XGetBv.nasm | 31 + >>>> MdePkg/Library/BaseLib/X64/VmgExit.nasm | 32 + >>>> MdePkg/Library/BaseLib/X64/XGetBv.nasm | 34 + >>>> OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm | 100 + >>>> OvmfPkg/ResetVector/Ia32/PageTables64.asm | 351 +++- >>>> OvmfPkg/ResetVector/ResetVector.nasmb | 20 + >>>> .../X64/ExceptionHandlerAsm.nasm | 17 + >>>> .../X64/Xcode5ExceptionHandlerAsm.nasm | 17 + >>>> UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc | 2 +- >>>> .../Library/MpInitLib/Ia32/MpFuncs.nasm | 20 +- >>>> UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc | 4 +- >>>> UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 369 +++- >>>> .../Library/VmgExitLibNull/VmgExitLibNull.uni | 15 + >>>> .../ResetVector/Vtf0/Ia16/Real16ToFlat32.asm | 9 + >>>> UefiCpuPkg/UefiCpuPkg.uni | 11 + >>>> 75 files changed, 4777 insertions(+), 100 deletions(-) create mode >>>> 100644 OvmfPkg/Library/VmgExitLib/VmgExitLib.inf >>>> create mode 100644 >>>> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf >>>> create mode 100644 MdePkg/Include/Register/Amd/Ghcb.h >>>> create mode 100644 >>>> OvmfPkg/Include/IndustryStandard/InstructionParsing.h >>>> create mode 100644 UefiCpuPkg/Include/Library/VmgExitLib.h >>>> create mode 100644 OvmfPkg/Library/VmgExitLib/VmgExitLib.c >>>> create mode 100644 OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c >>>> create mode 100644=20 >>>> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c >>>> create mode 100644 MdePkg/Library/BaseLib/Ia32/VmgExit.nasm >>>> create mode 100644 MdePkg/Library/BaseLib/Ia32/XGetBv.nasm >>>> create mode 100644 MdePkg/Library/BaseLib/X64/VmgExit.nasm >>>> create mode 100644 MdePkg/Library/BaseLib/X64/XGetBv.nasm >>>> create mode 100644 OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm >>>> create mode 100644 >>>> UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni >>>> >>> >>> For all patches except #10 ("UefiPayloadPkg: Prepare UefiPayloadPkg to= use the VmgExitLib library") and #46 ("Maintainers.txt: Add reviewers for = the OvmfPkg SEV-related files"): >>> >>> Regression-tested-by: Laszlo Ersek >>> >>> Thanks >>> Laszlo >>> >> >=20 >=20 >=20