From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (NAM12-BN8-obe.outbound.protection.outlook.com [40.107.237.70]) by mx.groups.io with SMTP id smtpd.web10.17785.1597247372329510248 for ; Wed, 12 Aug 2020 08:49: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=l9HcRRjD; spf=none, err=SPF record not found (domain: amd.com, ip: 40.107.237.70, mailfrom: thomas.lendacky@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oLHYj75eHIfvMyGm9h27+BWa8DIPlXnlHhCn2PiPCIysJjXpxlFnWowXnYyEU3CFeSbk8u5vavW3bae4TLM2aQaGRhGRUkvJHScMrzXmnHkTmOf21hPkk/uf4rSbH8ag2QW874Bj5mTrPec6hHGB0I+26cJGqesYkWcpHVxkGBKnnghQfEG/vjT7q4UqaYFG4/yBxgdAXlagLC0yaiTId3Bxz5Tdfrxa+svs2mDD2kjgGCJLg/al7YbNuIBdy89lSN5UJRyb4/udo5luZXvbEnr6XXcMlx0RqNgI/ySWYWTVfzPlY823k0wL9CwxO245olus/ZJC5gh+bT8f9WATcw== 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=Fwpmp2xWamQ5c/LoOlalI0YyX2sgMHgvekZ3KEKvRPI=; b=mpv/onpMQY7p4jjqCPNMDGfbGItTrxkTL5rMH12d/S5vAtnCnl91utWuqsuc24/j2+rMQpN3yt7AKng8JNI3KXdPkGihW5V8iFAS++cyL0dySqhvP3Isa4y3+lPW/i2srSYPh051qtAWOd+nFvGctCDW4V+8xJnAvy4z8ePYot0lkoERZ18jWVyp86nFovTbLv+zcebXDMPBHKAboAslSPCA5AsUCzmeEAN8FRiOElyP9wJMvcrV54WwV4xs/cphpHY27ADRAEPK+NH8wpesASEn7IDC26RwkW/++gA38fOx5pPclJICS1bn2T26Wych1sQc9VA8Cr7miHHnugVtyA== 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=Fwpmp2xWamQ5c/LoOlalI0YyX2sgMHgvekZ3KEKvRPI=; b=l9HcRRjDNKgqQ6qNK6qkTILSxtJqFA3LVppjtlTEPEp9hs4OAjgGNsd8nN05Muyv6SNyVJy703PXrRY3ZsFj1/92gnjWFaKDu/hvo57NC1Vr7Vw4xPFKlbohvwKWnkThIGbTnDSfPbrHx9zSK/4bzXUkMIIADVYjjBRP6NsCV1U= 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 DM6PR12MB3177.namprd12.prod.outlook.com (2603:10b6:5:187::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.19; Wed, 12 Aug 2020 15:49: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:49: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> <0bfcf395-2563-592c-0252-61aa9f86d952@amd.com> From: "Lendacky, Thomas" Message-ID: <3355b30e-516b-2873-9950-0218ce71dc70@amd.com> Date: Wed, 12 Aug 2020 10:49: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: SN4PR0501CA0034.namprd05.prod.outlook.com (2603:10b6:803:40::47) 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 SN4PR0501CA0034.namprd05.prod.outlook.com (2603:10b6:803:40::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.6 via Frontend Transport; Wed, 12 Aug 2020 15:49: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: 52b59536-8e3d-4f17-a1ad-08d83ed74c05 X-MS-TrafficTypeDiagnostic: DM6PR12MB3177: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pj4+re8Olnh6JIBCMoR74sALmHVGIqh/gU8UUyWvkBvAs4fe33qhBYRBQs+MpZxbxPS1IsEfKOirtxQVRAmaEmmwZQub6WomentFeH2FnRoxge9wDOaCDK/yY3bSutGnszqBRemMSt4qFVD6souNPE3rDEap7tC4IkZOjGqWbm4DuqSyj7TF7llaUo124suxoNmJNFCeyHx3F4EUHPr3OgLajurI692oipEJeYhOtx4oXGnp8NNHCFmOKlsh3JW0/dFCfUv5EFettMSj59USLTb59/m7Xj1j+o5Daek9wzMhw6YknxDBsbICqvgEXi/YNH1117Ul03BhexnOxCfRp87cve2wUDkxIX+Rqce6pJz3IQaMiQscgOUV5WGhVT58UH973EjZ//doTHOE6mIIeLcw67+7wuGHw8jxVS0xC4kJOQ2vUp9rdEPuyFgb1cNy9lCLik9sZB6mcVF9Sq2u+Q== 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;SFTY:;SFS:(4636009)(136003)(396003)(346002)(39860400002)(366004)(376002)(186003)(86362001)(110136005)(36756003)(52116002)(2906002)(5660300002)(31686004)(66946007)(966005)(19627235002)(53546011)(45080400002)(54906003)(66556008)(66476007)(8676002)(16526019)(8936002)(7416002)(4326008)(6486002)(26005)(2616005)(956004)(30864003)(478600001)(316002)(31696002)(83080400001)(83380400001)(16576012)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: Vbl0BbtnOAg0bTohHRKTHHfsaGkpP7rVFgrxf51vmcTiXfJU7RM0WHBMuw++IDKGgvx+d6v8cCwjU7XOmpQYKdSXd7mqewfx4+h1nFucPprsM0uiGbD5KM4EO7dURo/3/6vM+kZ8/qiWVnORwo8733QDJYqMaXTxZm4HkA9lX9L1lv8aJ7vSW3nILoXUYCALwxTb9Caxitb3LnSRw1qEe3UadWL22L+Mn0cbMDnerekAHem8TNU8AgqDCAAfpT189M2Oyfhu539WjrO26iikLA8uZviPtAzDc2ul5Or+QFD10ouLhP392mkvWhV0Et2StJw1umbWLabVbklkOODIRyL6dF00qKpbdhpLcXd3YijFBm26HNgXHbkblvCULhS/ZiEs7n1PD+hA/UgLU6D61ws+Xu9JlrAEGXfS9OVIwipP3UgON9FO7pG3TpcTwrq5uZHxgBlvOsHWhoB1xzW3tezyyNSTMH8qKua4TiTrqVZ23+UxuvDIFpPtN3krrwi/GKRxkKDyZmV/pOGNKJVqByLseyktfJjwyeNpzeCMOxIi7YBq+QQRgtYma0WJeSCVqNKHBg8LLl3b6pSm5Yqc2of14Mc0lnTyeQDJToogkl1HbKNfeJS9MBCkasHFXPwNxJQ6sdxDA40TJIlrGsTM/w== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52b59536-8e3d-4f17-a1ad-08d83ed74c05 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:49:28.9942 (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: 14+l1s51TsZZ7xHN95pyW6YPLf7EoIFKDpmIiuSo6SoFmKreFoF0p0f118qEo9boryYxGPSPkIScPpqjXLu0Ww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3177 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi Liming, Thank you, the updated series can be found here: https://github.com/AMDESE/ovmf/tree/sev-es-v23 Thanks, Tom On 8/12/20 10:28 AM, Gao, Liming wrote: > Tom: > I understand your point. Now, I run this script on Windows OS. I don't= try it on Linux agent. You can upload new patch set to your fork branch. I= will verify it and let your know the result.=20 >=20 > And, I plan to merge ECC checker this week. So, more patches can be ve= rified.=20 >=20 > Thanks > Liming >> -----Original Message----- >> From: devel@edk2.groups.io On Behalf Of Lendacky= , Thomas >> Sent: Wednesday, August 12, 2020 11:18 PM >> To: Gao, Liming ; devel@edk2.groups.io; Laszlo Er= sek >> Cc: Brijesh Singh ; Ard Biesheuvel ; Dong, Eric ; Justen, >> Jordan L ; Kinney, Michael D ; Ni, Ray ; Andrew Fish >> ; Anthony Perard ; You, Ben= jamin ; Bi, Dandan >> ; Dong, Guo ; Wu, Hao A ; Wang, Jian J ; >> Julien Grall ; Leif Lindholm ; Ma, M= aurice >> Subject: Re: [edk2-devel] [PATCH v14 00/46] SEV-ES guest support >> >> 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 t= he >> changes and that you won't be running the stand-alone tool again? Or wi= ll >> you run the tool again and submit more issues to resolve if the tool fi= nds >> any? If it's the latter, I would really like to be able to run this too= l >> stand-alone, as you have done, so that I don't have to keep re-submitti= ng >> 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: >>> >>> -----Original Message----- >>> From: devel@edk2.groups.io On Behalf Of Lendack= y, 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, Ben= jamin ; Bi, Dandan >> ; Dong, Guo ; Wu, Hao A ; Wang, Jian J ; >> Julien Grall ; Leif Lindholm ; Ma, M= aurice >>> Subject: Re: [edk2-devel] [PATCH v14 00/46] SEV-ES guest support >>> >>> 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/?url=3Dhttps%3A%2F%2Fed= k2.groups.io%2Fg%2Fdevel%2Fmessage%2F63271&dat >> a=3D02%7C01%7Cthomas.lendacky%40amd.com%7C4285f946d86342630a4708d83eccc= f27%7C3dd8961fe4884e608e11a82d994e183d%7C >> 0%7C0%7C637328396655798086&sdata=3D27ydFZdocl9RV7MbrLRKw0L2GiOGtWLl= psuaw9wj2fo%3D&reserved=3D0) in my local >> machine. It reports below issues. Can you help update the patches to fi= x them? >>>>> I use the standalone EccCheck from >> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fgit= hub.com%2Fshenglei10%2Fedk2%2Ftree%2Fecc_script& >> ;data=3D02%7C01%7Cthomas.lendacky%40amd.com%7C4285f946d86342630a4708d83= ecccf27%7C3dd8961fe4884e608e11a82d994e183d >> %7C0%7C0%7C637328396655798086&sdata=3Db8VUf6uNw%2FzNBZCKU0IUUakDLJP= mVsK4ghJirmQwCwY%3D&reserved=3D0. >>>>> >>>>> EFI coding style error >>>>> *Error code: 8005 >>>>> *Variable name does not follow the rules: 1. First character shoul= d be upper case 2. Must contain lower case characters 3. No >> white space characters 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 >>>> the following: >>>> >>>> 867 UINT8 *Src, *Dst; >>>> >>>> coming from patch v14 37/46, "OvmfPkg/Sec: Add #VC exception handling >>>> for Sec phase". >>>> >>>> Perhaps ECC is confused because we have two declarations on the same >>>> line; I'm not sure. >>>> >>>> In general I too like to keep declarations on separate lines, but >>>> there are exceptions. Declaring *Src and *Dst on the same line is >>>> pretty reasonable, and trivial. >>>> >>>> I think it's time for us to put the ECC exception list to use, under >>>> OvmfPkg. >>>> >>>> Tom, please try to reproduce this error locally, and then modify >>>> "OvmfPkg/OvmfPkg.ci.yaml", adding an exception under the EccCheck blo= ck. >>>> >>>> ... Oh wait, we haven't even merged Shenglei's series for that! The >>>> 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 >>>> should be waived. >>>> >>>> I'm in general of the opinion that ECC is too strict, and package >>>> maintainers should have power to selectively enforce or override ECC >>>> reports. That's why I agreed to the ECC CI plugin in the first place >>>> -- becase we have exception lists that are controllable under specifi= c >>>> package directories (in the *.ci.yaml files). >>>> >>>> In the present case, running the standalone ECC check has worse >>>> granularity than the upcoming ECC CI plugin. So, because I can't ask >>>> Tom to add a new exception to "OvmfPkg/OvmfPkg.ci.yaml" right now >>>> (before we merge this series), I'm replacing that with a waiver in th= is email. >>>> >>>> Of course, if maintainers of other packages want the ECC reports >>>> issued under their packages addressed, that's their call. I can only >>>> 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 descr= iption of the element being documented and the brief >> description must end with a period. >>>>> *file: D:\AllPkg\edk2\OvmfPkg\Library\BaseMemEncryptSevLib\MemEncr= yptSevLibInternal.c >>>>> *Line number: 72 >>>>> *Comment description should end with period '.' >>>> >>>> Disagree; sometimes people use well-formed full English sentences, >>>> 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, >>>> 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 de= claration >>>>> *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. M= y >>>> apologies. >>>> >>>> 845 UINT8 *Data =3D (UINT8 *) Ghcb->SharedBuffer; >>>> >>>> Comes from patch #17 ("OvmfPkg/VmgExitLib: Add support for NPF NAE >>>> events (MMIO)"). >>>> >>>>> EFI coding style error >>>>> *Error code: 5007 >>>>> *There should be no initialization of a variable as part of its de= claration >>>>> *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 >>>> events (MMIO)") again. >>>> >>>> Tom: given that a new iteration seems justified after all (I'm really >>>> sorry about that -- with Shenglei's series hopefully soon merged, suc= h >>>> issues will be reported earlier!), if you'd like, you could address >>>> the two ECC reports too that I said were too strict and should be ign= ored. >>>> (That means breaking the "*Dst" declaration to a new line, and adding >>>> a period to the comment.) Up to you; I certainly don't insist on thos= e. >>> >>> No worries, easy enough to do if I'm already updating the others. >>> >>> 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 the tool fails for me as I described in another post. The r= eason I say that is, for example, the issue about the comment >> description ending with a period was actually in multiple spots of the = commit, even though the tool only flagged one. I'd hate to >> think I've fixed everything only to have the tool find more issues afte= r I've submitted another series, all because I couldn't run the >> tool. >>> >>> Thanks, >>> Tom >>> >>> [Liming] ECC checker will be merged in open CI to check the patch and = report the issues. Then, you don't need to run it in your local >> machine. I use this patch set as test case to verify ECC checker functi= onality. And, it reports those issues. I think they are valuable for >> this patch set, so I raise them. Sorry for the late notice. >>> >>> 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 >>>>> ; Dong, Eric ; Justen, >>>>> Jordan L ; Gao, Liming >>>>> ; Kinney, Michael D >>>>> ; Ni, Ray ; Andrew Fis= h >>>>> ; 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 >>>>> >>>>> 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 >>>>>> on the SEV support to protect the guest register state from the >>>>>> hypervisor. See >>>>>> "AMD64 Architecture Programmer's Manual Volume 2: System >>>>>> Programming", section "15.35 Encrypted State (SEV-ES)" [1]. >>>>>> >>>>>> In order to allow a hypervisor to perform functions on behalf of a >>>>>> guest, there is architectural support for notifying a guest's >>>>>> operating system when certain types of VMEXITs are about to occur. >>>>>> This allows the guest to selectively share information with the >>>>>> hypervisor to satisfy the requested function. The notification is >>>>>> performed using a new exception, the VMM Communication exception >>>>>> (#VC). The information is shared through the Guest-Hypervisor Commu= nication Block (GHCB) using the VMGEXIT instruction. >>>>>> The GHCB format and the protocol for using it is documented in >>>>>> "SEV-ES Guest-Hypervisor Communication Block Standardization" [2]. >>>>>> >>>>>> The main areas of the EDK2 code that are updated to support SEV-ES >>>>>> are around the exception handling support and the AP boot support. >>>>>> >>>>>> Exception support is required starting in Sec, continuing through >>>>>> Pei and into Dxe in order to handle #VC exceptions that are generat= ed. >>>>>> Each AP requires it's own GHCB page as well as a page to hold value= s >>>>>> specific to that AP. >>>>>> >>>>>> AP booting poses some interesting challenges. The INIT-SIPI-SIPI >>>>>> sequence is typically used to boot the APs. However, the hypervisor >>>>>> is not allowed to update the guest registers. The GHCB document [2] >>>>>> talks about how SMP booting under SEV-ES is performed. >>>>>> >>>>>> Since the GHCB page must be a shared (unencrypted) page, the >>>>>> processor must be running in long mode in order for the guest and >>>>>> hypervisor to communicate with each other. As a result, SEV-ES is >>>>>> only supported under the X64 architecture. >>>>>> >>>>>> This series adds a new library requirement for the VmgExitLib >>>>>> library against the UefiCpuPkg CpuExceptionHandlerLib library and >>>>>> the UefiCpuPkg MpInitLib library. The edk2-platforms repo requires >>>>>> updates/patches to add the new library requirement. To accomodate >>>>>> that, this series could be split between: >>>>>> >>>>>> patch number 10: >>>>>> UefiPayloadPkg: Prepare UefiPayloadPkg to use the VmgExitLib >>>>>> library >>>>>> >>>>>> and patch number 11: >>>>>> UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC >>>>>> exception >>>>>> >>>>>> The updates to edk2-platforms can be applied at the split. >>>>>> >>>>>> [1] >>>>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2= Fww >>>>>> w.amd.com%2Fsystem%2Ffiles%2FTechDocs%2F24593.pdf&data=3D02%7C0= 1%7 >>>>>> Cthomas.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C3dd= 8 >>>>>> 961fe4884e608e11a82d994e183d%7C0%7C0%7C637327542159394484&sdata= = =3D >>>>>> zusPC5xFZWfLxt6T5Psxb1%2Fw4mrVWnkrrECkuKSsxLk%3D&reserved=3D0 >>>>>> [2] >>>>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2= Fde >>>>>> veloper.amd.com%2Fwp-content%2Fresources%2F56421.pdf&data=3D02%= 7C0 >>>>>> 1%7Cthomas.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C= 3 >>>>>> dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637327542159394484&sd= a >>>>>> ta=3Dyk7o8h1lajI449tZfXGbPumnkvRjswKp1FRmSUdewh4%3D&reserved=3D= 0 >>>>>> >>>>>> --- >>>>>> >>>>>> These patches are based on commit: >>>>>> 9565ab67c209 ("ShellPkg: smbiosview - Change some type 17 field >>>>>> values >>>>>> format") >>>>>> >>>>>> A version of the tree can be found at: >>>>>> https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2= Fgi >>>>>> thub.com%2FAMDESE%2Fovmf%2Ftree%2Fsev-es-v22&data=3D02%7C01%7Ct= hom >>>>>> as.lendacky%40amd.com%7C9c0fb2b16af248090fdb08d83e05c821%7C3dd8961f= e >>>>>> 4884e608e11a82d994e183d%7C0%7C0%7C637327542159404476&sdata=3D6b= 9Eq >>>>>> 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 boot= s APs. >>>>>> Do this by appending the three new parameters without altering th= e >>>>>> original parameter passing order. >>>>>> - Minor updates to description text and help text to expand the GHC= B >>>>>> acronym. >>>>>> >>>>>> Changes since v12: >>>>>> - Change IA32 VMGEXIT .nasm file to issue an int 3. Depending on th= e >>>>>> version of NASM, the "BITS 64" trick to get NASM to recognize the >>>>>> VMMCALL instruction (VMGEXIT is a REP VMMCALL) caused an error. S= ince >>>>>> 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 environ= ments >>>>>> and remove the updates that add these instructions to GccInline.c >>>>>> >>>>>> Changes since v10: >>>>>> - Fix conflicts around GccInline.c file after moving to latest >>>>>> 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 cod= e >>>>>> 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 >>>>>> (IOIO_DATA_BYTES) >>>>>> - Exception handler support for debug registers >>>>>> - Moved the DRx register saving changes into the UefiCpuPkg patch= for >>>>>> 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 relat= ed >>>>>> definitions >>>>>> - Include additional #defines for instruction decoding to replace >>>>>> hard coded values for things like instruction prefixes and esca= pes. >>>>>> - Replace hardcoded CPUID values with values from existing header f= iles >>>>>> and use existing CR4 definition for accessing CR4 data. >>>>>> - Change the type used for obtaining data addresses in the instruct= ion >>>>>> parsing >>>>>> - Switch from INTN to UINT64 and use compiler conversions and cas= ting >>>>>> to perform the correct address calculation >>>>>> - ResetVector code: >>>>>> - Revert some inadvertant changes introduced in v7 for reserving = the >>>>>> 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 (minim= ize >>>>>> code duplication by creating a function to set the AP jump tabl= e >>>>>> 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 han= dler >>>>>> and into the SecMain.c file. As a result: >>>>>> - Move the SecGhcb related PCDs out of UefiCpuPkg and into OvmfPk= g >>>>>> - 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= is >>>>>> 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 startin= g >>>>>> AP's to avoid updating the actual flash image (build time locatio= n >>>>>> 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 = updated >>>>>> and order of definition/usage >>>>>> - Created a library for VMGEXIT-related functions to replace use of= inline >>>>>> functions >>>>>> - Allocation method for GDT changed from AllocatePool to >>>>>> 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 ta= bles >>>>>> 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 libr= ary >>>>>> UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC exce= ption >>>>>> OvmfPkg/VmgExitLib: Implement library support for VmgExitLib in O= VMF >>>>>> 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 supporte= d >>>>>> OvmfPkg: Create GHCB pages for use during Pei and Dxe phase >>>>>> OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabl= ed >>>>>> 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 wi= th >>>>>> 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 mod= e >>>>>> 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 >>>>>> 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