From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0071.outbound.protection.outlook.com [104.47.40.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 51B6A21E1DAC8 for ; Tue, 1 Aug 2017 16:49:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=dFRmlJ/mAm3qaKdDCUyaIq3fhgPtzmr8ZfcSH95XWOY=; b=mPOW0b6SCv53ZAu6txN0m4IuZcpwb7U0rEF4xHzi8G+LhUohSi5NrkmljA3tladPFe6pwnIqChDDJ2EkZ80IcFF9PxXU5To0fn1sPem75SB8SnGT4fCXjOoch6hYAmMV7VGGacR+IGXYkI+2IBsaLGGCfR6V6sHDvPUjST1ZJyI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from Brijeshs-MacBook-Pro.local (70.112.153.56) by BY2PR12MB0147.namprd12.prod.outlook.com (10.162.82.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1304.22; Tue, 1 Aug 2017 23:51:34 +0000 Cc: brijesh.singh@amd.com, Tom Lendacky , Jordan Justen , Ard Biesheuvel To: Laszlo Ersek , edk2-devel@lists.01.org References: <1501529474-20550-1-git-send-email-brijesh.singh@amd.com> <1501529474-20550-3-git-send-email-brijesh.singh@amd.com> <89e1553a-1630-87a5-cffd-99174a380d41@redhat.com> From: Brijesh Singh Message-ID: Date: Tue, 1 Aug 2017 18:51:30 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <89e1553a-1630-87a5-cffd-99174a380d41@redhat.com> X-Originating-IP: [70.112.153.56] X-ClientProxiedBy: CY4PR03CA0089.namprd03.prod.outlook.com (10.171.242.158) To BY2PR12MB0147.namprd12.prod.outlook.com (10.162.82.20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 58ec54e1-4c0b-4d22-54d2-08d4d9383e91 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(48565401081)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BY2PR12MB0147; X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 3:ZuUDWo9zcgqhwMmEUVDdg9fQVJ++NMn2PCKuQJ6aD4qfb+zK76VgOdWfgJvpz6DqWO0CQZvHF6SE6dCLSWEsyYo7ocbZDBoYpEuzGOQ7sTaEfiveUI+3qMp8JyUG3gkoiJwNGwOglh/9fZyw598qUrFppY4GQIW3lQD9Y+cpBAiDygIjpJ9sm0CMFWhWwafhwO5AHlDFX6tLdhkTbILoWcShWhjAJ0cpLHIqfe3+oYO0IH4hXFYNgrdxGVGant5VjWaRN01dHnCgKvrvWVtZABATMQR4SK/xECF2Q3DheJYjPXisVfGOcFoQgsF1G8VY6Vhfe3K0Cu9aQb5vjo9ysAQWMRkS+W4tgalGdjVAABxsiAiB1fbEBWnlr93hS+YzLzjed/aGaZRmKdp+YpSTR44FNHbuwpglwViRsFKSPTg0CNKhRAPL1vT6Xnx+pqc3lPvLSuV0nO5ZeLSZLlMJ8Hd1i2n0zigbs0BgKRvYDFuqNukWL168SLVZapojGirg0a8QDv7pjXa5qKUrLXcHeL6yMuALu20adv29V2/an+VpyW+Chjznjve5jdhtITjC9RGr6oeLr1nnKPdL7KFIVTYj0HDb1T4UwzRzbQSpWGAw9jZhUV5fnbdbw1PKLRNVINZNN810uECQBlrQ88jpFR1j/eOHNekJuX5+NcipPAiiHDfq6QrE/s2gjEOwqn0XSkkzHzqzM+iEFugu9VpyYNNPYU8V3CqlgujlWMhOBi+WuSfbllmp59bG6S3sv5CEsGfTu91iVKTxzBvHKOvRNYSxfTSHG++si/105trCzhO5kkBfTXj3HVnY32kPvRQQIXv6xubxAm7e+cYcH30ioA== X-MS-TrafficTypeDiagnostic: BY2PR12MB0147: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 25:0wcfOd7Ih//Z/OeTlqtOQu3rNrnPbehgm//Eub/8CiK2kUUG8EU/eiWYRxrvxWbwddoTi6X445tBsc/qHRHMPekgXz9wt3Hs7S5q+9mJg7sLpywH8iURPewO5e2zw0TscVpGFP6av6bekyMLwpE41jUMddjFnHk9hAaZGad9/tm1k0BV+XniD3JMs6FPMfoVFn5iSWBdlzoQLCyySO2G8sqm46+8Irvx+jzOo5g1wcv8Y9yf5DPaRxDzVLoa+ta5wEpmGswV4t5PYyL3oml8zJujz3nr65JuYkm9odH6YhQdYxchC3s9bazzXmwe5z09rvcQlHpIV52afFxP6KogQituQ0uWEbh+mXZHRKHEad+9KJw9u9OwMawyITPS9mNVykq6vca0OXkb9HswoCEtHKmyYvv1FiqGaw+YDFR+hYUBx2qevzn3ueJ1EEV0Rw8jjzoNARVRW9987KTuwIuHjAGqJeusAsh1GkwS73RLgEk0xtTzaILWnH8/+NJtkqrsMA/98R8Q2LBllsxtcamZq96ZwUfzkYY0WTycrArlIxsL4nat5HQjcOzdsKktC1oJn2ho8nL4tZKVrUJ2roslDdfuY2EonhZAni8UMKbLb3QuMo+d++EXsFcIeTzGPrwVtB4Ts8aRXUo6oe+EZ0rvqHKmYJtP5SvcZfcxiA7YxszNUmfC4tH/XVlEEH1jtCiSM4jKURWwzQsm8CoZm73v4XdaINDjPCEu+KR76mIIieY2Ob496r1Jww+FjIWTBKlFDoq6KZKbgywz3d7reqnm9gNbiy4BNXRycsGJFa0vvobc8gXsljRjl4B/NspFsHKS0q8Et3DFqN6ZTABC+8qgVwVqSFdhZ3tvKSZI5GXx1jXl1LQr2Wxp/IuytVIgoTXZHeMw6sG/fkcP2TLtXJQPKlH20j3PvteSAUHSdOm9OBg= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 31:Qm8BHDqnJ+lbIrJS3tsha9mt3WNU0gXojJmMNk05aDsqNJ33h7j6DdyXY7+BOKB6QNzxblh0Ack2JXdXPOUal6wEuPChUjmjAgYz7r5hLhsS6V1hN+IEG6KIUGmrHN/l2mg16eMtLZf6pqRx0MkxpFm9iW07qKBLgZLZLue+Cdxrk9wbYzW37usOU+MyYFXjRI7H8rby9zhbJW/SPf6FZLXPCXz7uZ+yjsH579bZy+duCtUsbeLP0h4c5HrQCEKSFio4LlM/VOCFLjb6u+6BFfCPykCR7SrX7Aa/FeAfVkmxSj1Fh5HAYb8/GF4HrYOkSBC3lXhXPyIxF98QuOhZrfPVUa8U2qADRkKZfbk4JAKka7a9fE5U/LAP8lB37URI4tbj4QDa1togzUDL/dXqDd6ifTxXqBvIoxmYU1M3M+A0kmZKTxbk2rpdN5KdVvcdSjouFjXePvYtC6JR51+pS3E6VETAqTubvFg1VIoMWCzna2bdqolBdCM+Jts976AEW0LFANZSxtAn5Y2NCodLJRPNc9IYp4YpiRTcUU0tKhimeoNeB0Edi6RL+7AghoBTfyDErzrznfOOkRqlAP/5P8JrlWDXMFkwaX1JqNrDUBeEurzBzUTknYygK+uUJ1mCs4IojuSeh/df2ttbEyT0h8fMNnXjTMozJ6mhXug5A38= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 20:9bGqIfipGYq20e6XtAou4ImOmr5galbJki4eWjjOyn4Xiu+KUMpJ5iKOOD4p2hISLbo/HaBL+we2URyDGtdmLLpEJMdZgB7OCQ/dMGVGUwK7zvQhv2woq5D3WWw5JnIrRdNqth/j7YB8OkpH6cwm0GRc4JZRwG/82wQKmY6aPEbxGFAEQuFmJwUYui7whilSjPAda3wEk63xc6boA3Q189u282FbiR4TnrE+2fugUwGeS00ixfhCzHiItdLw5kSAK8/AbVLVi/AeAnUmJJZ8AUL6JmBUi5IukSUw/gjZnHb1lQxEuPVaH/nvMOpSW+7gEKNbHeNjZaj0m/C10w7uZLeXbmYxCPCqohBNvmv9wPY3hInUyzU7sOoUQ67D3FB1IMawStSWLR8HgQZ/keDWIKt0Q55VVFRYLT3Cr/JocieTgvhO6SS2SmD9mFJMUanrAq0BZ8jc5rbSGJREXh94YY7EcH7/DbUgZuxmShhJNGGnpMQluFwNLUKLwmrClkRF X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6055026)(6041248)(20161123560025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR12MB0147; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR12MB0147; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ3OzQ6SGJJRzhycVNSajh4ZUtGZFJBQWNPMVpLRWRu?= =?utf-8?B?WUY2d2w4bEc4ZVJqNStzek15VGVORmVYWGFpc1pYR3dsclpSZFM1ZCtseVBo?= =?utf-8?B?STJTRU1yWmhLaUhhME1pTVh4Vm1Da0ZNU0hxM0JJVkZxNW5lZXZhendEblBm?= =?utf-8?B?aFBsYS8rU1pZekwzdUcxUjBRVFprUTdyT3pXWFZ2a0Z4Kyt0UG1odGhnd0NQ?= =?utf-8?B?SjZVSzlhZkRjV293a0NPblRaRXRLU0hWTzFRSnRzWElXV2ZmTWNsaCtOVTdF?= =?utf-8?B?ODFjUW1YbVFNU0xxOEpUcThzWEg3RldLNXFSVysvbnFKNDBncDVnWVFYQXBX?= =?utf-8?B?SVdCcXcwUDNKeGJZL3pKRkg2RHNaTHU4ZmtXQmVLb2NJbG56Vm11VjVvcGM4?= =?utf-8?B?SWhpdVRNNFNoYzBIQm44WGZZWWZWL3VBcE8yLzFUaFloNm8vVTRtYjEvWEkw?= =?utf-8?B?UldQT29NQ3IwYm5vUFRkYm5FcTBqTy9oL2Y4ZSt0c1NHaDhLOGdXbWZIYjg4?= =?utf-8?B?U1RaNU9CcTRlMUNqbVlkYTFrNFVRR1BCam5sWm9zeit2R3JGWnZ2dWpBL0hG?= =?utf-8?B?NnNkS1ZoZVY3clRBZjlzUURBVzBUcUNDK3dsTkk1cWR0VEZsMHJlVnMyTXFz?= =?utf-8?B?YXpRZ3NJKzAxVGd3K1VVeHczMlJISXZ6Q1dRbWRKeHl5MGc4aCs3d1FUbyt0?= =?utf-8?B?M3ludTlIaWFQSElCV0JUYW5DK05waVp0aUd6NHRWQWtNaTU0OXJadm9uNDF1?= =?utf-8?B?MkYwMmxGZWoxOWppckgwK2Zwa25XNXRERHFwcXZjTjM5Z2crNytmcVVFbjlx?= =?utf-8?B?QXhKTVJFQlFtbkUzV0F2aENQdWFwZzMrQmZINTVFNE9WT0dESkJHb3Zrc1A2?= =?utf-8?B?Z1lvb29ZaHNnZFdGTXBXd1RrdWZ0WHhmVm9BaXRNcmZtWmViMlhPZ012eTcw?= =?utf-8?B?M3J3empRa1owdWdZQS9KQnBSTlhtcFNOMmZVWlVFL2lPM3YvRUk2N080Y3RV?= =?utf-8?B?bDQyVlM5elVpUENncmt6WWQzN2ZLd2NzUEdUeERoZ0xCdHNJZW9UaHQvQ3dL?= =?utf-8?B?RXp0b1ZPMWx6aXh3S1k3UDNnaVpCc1ZJeDdOQ2VKMVEyMjI1eXZ5Y3NNT0ox?= =?utf-8?B?RzdyMXlyYVJYSk1DSXpEeUVEMHEvMnN6YnNIbEtheEN6ZHd0cnBtRzJxdjVO?= =?utf-8?B?L0FjOG1VSjRPdUNINzMrT2ZjOVhvMVgraTEyTkRRU01xd1VLT0tOWWE0NEht?= =?utf-8?B?K05RbnloR0hzakErcFJCNmR5dkx1KzlkeTh5SWdGNDBiTHRpMlBjeW5zSjNC?= =?utf-8?B?R1M0YTNSRzVodDZMbFVEcGhTWVRzUk5aZUZxcDhrK0plREkrRkhubm5vRCtM?= =?utf-8?B?UUdVVTlxbjRXU1NyQTQxbHh4TUJOdEVqaG00aWlVRE04UGdSQm9DZ3B6RkE3?= =?utf-8?B?WjVBbHcrZFVoMmpFbjE2aTBtTC91OFFORndMRnNIOWgxdEF0R2x4UkhSZTFn?= =?utf-8?B?ck90d2Q4S1Ztczc0TVZhSDJTa1B0UDg5enJ6MkxWYmQxd0Nkc0xZTFV4VmNh?= =?utf-8?B?RDFETUhab2hMWGlERUdvYzRLZ0VJQT09?= X-Forefront-PRVS: 0386B406AA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(39850400002)(39450400003)(39410400002)(39840400002)(39400400002)(39860400002)(199003)(377454003)(24454002)(189002)(66066001)(110136004)(65956001)(23676002)(65806001)(305945005)(81156014)(189998001)(53936002)(8676002)(47776003)(83506001)(42186005)(7350300001)(81166006)(229853002)(33646002)(7736002)(106356001)(6506006)(6486002)(105586002)(97736004)(53546010)(2906002)(478600001)(230700001)(50466002)(50986999)(25786009)(68736007)(4001350100001)(31696002)(65826007)(54906002)(86362001)(4326008)(64126003)(6512007)(31686004)(5660300001)(6246003)(38730400002)(101416001)(2950100002)(36756003)(3846002)(54356999)(6666003)(76176999)(6116002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0147; H:Brijeshs-MacBook-Pro.local; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ3OzIzOkl6MDYrNmdFVUpLT0FLRTFjV3d0K0xpSHVW?= =?utf-8?B?d3JNTU9KT2ttZjhva2NDaTVzbmRtdnRsVTROUzNvYkxCL1czSU9SUTVoSmha?= =?utf-8?B?eFRzbUdvYlh4bnQxdDEwdlZHbG91ZTdwWVBNajdFVE5HYWZlQVkrZ0NiaTFj?= =?utf-8?B?VWVUK0dzMzlXb2dBS3BTcG5tZXZ2VkVUWENLZUJSZzg3K1QrVVNlT1VLeXo1?= =?utf-8?B?NmcyVjRuSG1FZ0h6bm1ZNk0wcHNXT1RIcEtDd2JOVmh6alU4ZHpXU0RoL1Q4?= =?utf-8?B?bFRKZFNNclJPSlYyOTB0OUkvNzltd2tpV0txOTcvT3N4UEU3MDc0UFhHb0tD?= =?utf-8?B?ZzBkaFFDMkhwdCtlZW5QZ2ZEQVRWOWw5c0oyY3Vpb3dyb3plQXQ2YWJZWmE0?= =?utf-8?B?YjU0NjA5OGdVQWtyMmM5VTJFUFVCSTVNajlHQStEZ2FEVHE0WU5NT010b2tk?= =?utf-8?B?by9FSlZRck1vLzFJNGg2cFdCbDFhcHRaT1ZQZW9lRk54cVJLU0pxbUZ2cTc1?= =?utf-8?B?RnptdHlpRW51Y1huaVhkQU5IZWgvN2lLNGNaZUovWjRnUWE1ak1Yc1BSdXhM?= =?utf-8?B?VmpZZ1lnNy9COFRWeHZLK3VvUmhKcVlZc2tnYUdxWHRDMEl3Vk5nNndGZktO?= =?utf-8?B?N0w2VnAzMmtCdDMvOWFJOTREQ2VBR25iWnZVQnVCNkhKVWcvczRZdDg5NU9H?= =?utf-8?B?T01Cd3FoZ1pZejM0QzdJTHBqQzVjUWxYaE9tY2paMnViaFFvd0EzOHJkanpO?= =?utf-8?B?anJZREN3cE1iUUVCck5XN05SM1ZsdVpZMk51Zy8wNUY0WHNFR3VsbG5MMVdR?= =?utf-8?B?VGVwOTVGTW1NWU5hd1lOdWd6d3Y1NktRWUtKc0Q1UkhMaHY2aXd6Z3BqYkcr?= =?utf-8?B?RjVpSkQyVmNTU1o1eHBDemllTHVaK1A1c0d5T2hXTzVkWTc0WFpIcFd5Wk5x?= =?utf-8?B?TUJpSnUzVEU2QTB5ZXFqYUNtQXc5NURIQW9nSFJTanB1bkJVbTNGQkozNXow?= =?utf-8?B?L2JEcHhxUkRDTGRLMDhKSnRxc1FJM3pJbXZsZ3loaWRuL2VhVHdmQXZWUGVE?= =?utf-8?B?RDNRd2l6dHlSamdoWkpsNEhuQ1RhRGl4R2hnbm5sbGw5SXNNbEE1bjdId2lj?= =?utf-8?B?SEtTTklVa2EwUFQ4ZG1TalZsQ3IwdUlsQlpkTlhtWm5rT2JlV1o0Qlp4SDFs?= =?utf-8?B?TXRrdWROSEVMc3J0NWpDRzdXR01PdW9XZXdSWDVBWFdvS1Q5S0xTOGw5SEtZ?= =?utf-8?B?VTZadWN4TkMyU2RTODJwYVFDcktmdkJlTWF1RmplSXJjMmwzZk9EQTZnclRY?= =?utf-8?B?SXY3VDlhN2gyUnNtTE1vUFJPWlJVNzJLNDhPSGt1dEMxS0VhL0pLUjA3U0Zz?= =?utf-8?B?MWdTZHFYMHhFL2Rmdm0weEwvQ2Z2RlpaL0VqalpjUFVhQ1JaOUpFNGVTY3Q3?= =?utf-8?B?enQ2aVB5cXBrM3Axc09rOUhJRWxSemYxVzk2TGlUKzZtL2NlTTJLWkU3QXRU?= =?utf-8?B?R1NOQld3MHpYT1lQYUpEUjBHNXBPZGdRNjk5dUsrQ1JOTllIOEV3MkZJN0U1?= =?utf-8?B?eVRpcVlrWUtldjlHSVExbURLWjJ5dkwvWmhWeXZFc3Z6WVkzYjk2SjRhdzg3?= =?utf-8?B?R2pSeTZzTFVIb0FyUFFKZ2d1ZUsvUUhFcGFQMndTZkoxazhpZUhVTTRqU1Y1?= =?utf-8?B?bTZOekNVTUNrMCtlTzErWEFjcWp0K1BJMG1KYjQ5T0R5Q1Zhdm5BUlBzSVFl?= =?utf-8?B?OW9VbkMxSFl4QVdnNjNUT0Y0RFg3dTJZUk8wNitUWk1VdWlCQTlMSTZiMERQ?= =?utf-8?B?ZGpPUkNmQVRabTcvTHVjRmVEcG5pMWwyR0JWSWJ1SysyOTBzcWEzUk9qQWZm?= =?utf-8?B?SmhJeENmZFQrVFpQUGFpZ3ZTYkRKdzMzUy9PYjlBQjF0Yy9PUHcvRTRSdkYv?= =?utf-8?B?aGVVOVdqUlRhTm5lRHhvQlRNWTJnZE1YN2h6RDBvT1BQaFhkSWg3WFFkOTZP?= =?utf-8?B?Z05tUnRXMnlLSTR2NWlvRHc5VWdadmVjN1orZm4zRkV1Y2luTHRSaVY0b1V0?= =?utf-8?B?REMxOTltVERFT3VuZE5YNWN2OFNUeFhCcFI1aGwySUZrcFovOU5sRXE5S29D?= =?utf-8?B?cXc9PQ==?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjEyTUIwMTQ3OzY6M25RRkZOOWtnOWZQTlJoclkyZ0JXZmFEWjBK?= =?utf-8?B?NEY5UWtDRnJrK0src2o5QmpVeitiNEgveFZMVklFOUNSN0xsVk5DNWNITUda?= =?utf-8?B?dC81SnJvZDE4VlVpM3o0aHNZVkorcTRJejl5ZC9JbWdFYlpQZ3gzazIyMlNP?= =?utf-8?B?amp2Rld5eXlOUFZvczc2YmlMMVVsVlgyQUdQQ0l4eCtaTUJnOE9HbTR4dFh3?= =?utf-8?B?cE5EUk05bmtlZ1hHVVJ5VytFTE1PaFB2WjJGaUtxTHppa0tLQStFNjhac256?= =?utf-8?B?Rkh4eXBSUUlNV3N3WUJFUExrUHZMTHdHLzhmNHNyRENGNVEyQzZ6ZHZCQzA4?= =?utf-8?B?Q1hJb3doMjhHaWk5K21MTWgvVTJRcEYveFhnMmQxV3lJejF1NUFPN3pYNXJz?= =?utf-8?B?M2xjTVV1MFg5M1VmSG4zQVdTd1NZUStwMGp0c0Jpd3JyT3dqeE8yeDAwYkdn?= =?utf-8?B?RHFBY3BnZjJScmlub2tQWUY3bTJ5eFY4UW8zSmkrdTdORWxiSXNoeEdOTDJY?= =?utf-8?B?WGFhN3F4R1pJejNrdG1mY0pkVkJVbEFYTjM4LzZ0Z2x6ZnREWExNYVdSNDIv?= =?utf-8?B?TXIzUytQbndhaDgzV1c5RmlrVmR3bktLWjVLakdhU293NW9UUVhsRGxpUmt0?= =?utf-8?B?Tzc2Y21Ralc3VDZNcnhrZTE2dTRKRVBEemsrUUhkVDd1NXNMc0FVNW1ncmN1?= =?utf-8?B?MG9weXFDWlk5UHFYZmsrSVZyTlZ0UmRuQ3FCWVZKZHlsSENmUXhuNWxRdGkr?= =?utf-8?B?dW1ISWt6ckRBL2p6ak1FRUFBMGEvVFhHUXgxUVZLNldjMndITGpucDV5bjRZ?= =?utf-8?B?Qjl5dTBacXdSOExGSmEzWU83WDRVQ1h1UVJjclJzTjRtYWVscjd4K2tMa1J5?= =?utf-8?B?YVJ6OE91b24yTkZqRC9KbU5OSmxaZzltdThkWXR5cEN0RkFya0lqbGRSTllz?= =?utf-8?B?YytTZiszUEExTTdQYVd4Z1RRRHRkQndSSU4xaWJTTXBrR1B6YUw2SE8xY1Zn?= =?utf-8?B?UDc0blF6MmE5ZERHRzhqRGllTksxVlBSQ3k4b0t6Wnpqbm9vOGRoT3RUaEp5?= =?utf-8?B?ek9keklZa2FaZTU1L1ZwQ05GbWJZalIyaTdOM1NscUd4cDFZSWs5R240L1ov?= =?utf-8?B?cFI1b2F3Y2hnQUtTUkRRd2xSVU9EaW5lZWFWSGJIV1JoUk5XT0V3S1N6ZHhj?= =?utf-8?B?ZnZRbW4vbHgyUHVUV0xQUGNIWDlETGl1UWVkN1VPT1BJWk1UKzNQUGNUb0Y3?= =?utf-8?B?ajlzT01rdFhvNHVyU3pSSVYwQ0tBTzV4MmVSSmxzaWoreWFMeHlURUxQM05h?= =?utf-8?B?NUg3TGd4Y2pVVUcwZnZiWXdJaFFUQ21IcG5yY2FHOW03MlpwU3k2VDVES3Va?= =?utf-8?Q?+Pz1Qoz?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 5:17FICxiPiTQfBiR5rNTOMv/17A831OpL70xuk5AkM330vKuJjpZMdiTClmGu9d1CA0rsuK8iXEFmsILW+glsVkqsM1unbOhQ8WCBEkd7/qLkDls7usG9Nh+TTbbW1vD2GQFih08nVHWH3ttTVoHI72rKSB5aUgxbhZlket1GFGf0vtMtZyFF2qSkdVU/IYSeotNIuCFE/EShJva9Gp0DvGBypiOlBGnjtcBw/zpyMWF1gZ12juvGuc/x9MKfn8YvZ9ZagYKcrL13indj2i6/jYlF8hKp+0kv1o+Af2swNXHKuwZ5xAQi450W1Slk+REWQeekqBlnvLbqIrE364h4BMQ1BCN0twLFvRgMIC1H/yhkl+KknCJqPhoyJzlwJNNElPYGr0wIXT8O6JtLCWhjOggUW7QdMVcWIn1YY+m8pho9a4WuFSSHoEr/Dlx0MfpiAK487U6bgC2HkVTCm136uk65fA7TgHpsyo46vdhs1F1Rr1OZWMeIs65HwijzaQYW; 24:2eIOJKt92mLePTeHy0sHDCpYR8b0TS9Do/jv/i4H88/LOzhwfjI2NsRzROqjspjkjf2XW6aKwDnskj6oQVWy3ce7McFYwXBqcnVjfkbmZhM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 7:0VMlFHyBaNoxXysAVmIUz0K+0IQaBtENmkO3pa8vuMWU+kuyI7Br2ts7nHDW0G4aCLirkVUdd4peSGBp/caO8fQ8GkPLtruUDfWsBJtYTXIFYYCN04pkkP2gGFX3oIYNSd2Qqp/Y3jWKydNDRgB23fHpDN5SzLktpus0TAFzL/vKijK4aS6uxUzPCx84dzZGeznfGh5EXe1o6xrm00W1M5w7ml4hWKSOdiQB/uZ++NZ7s2WtfxzWeBIj/HIOoz/KUj+sWDx5CVobUm0ADrSzbnzxGR38EY4Tw/Yw4I7TjTLelnxt4XanMs+8E4R5LzLBpWQo064XPKHWWUj1wgIaU5ynZyK3VjRcbsR1od6iDa2h2Z0owyTrj7+vfF+HGNcWSCKE6jclj3vuUZIpRuLdX0GSv8pFuCW/BudzV+AlU4Da9W5OFHG88EqBmZqZBIvnYfKY0NvMKaAeJNjyC0edgKqnTZUND4QNrKelIuV2RgWoedG7F7wm9ycLUJK1A6oKIrAkj0MlnW/EyVRI78zi+M42iMlwh37RjOEwwSQ4Bx5lH8y8jgcxuQmMjx8wfImbsagJxXsbE9mjBhSluTnfz8LrG8MuvzPy5jBFefScOQNmFpzLBpRzo/IDWf20e1ZIWBzp/2SELcBqKG+8+maBH0SyEHNqhMup2BHH7z5E11thvdF/ngImgpErIt9ez/Zfj2fEkAx7AisWA2F8nAGUup1A84xg16sTAHUTFh2vt7zGU3f1LZ2l6tJtj9OIz9V+UePUJxo1gk4Xny0Mh3pzYGdquWrQQyiKFtsKrZjBoUI= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0147; 20:zH8WkHDKbN0ow69OUR9qpeILqAteNpIdgurv4fjaMDRDnBkKwRJFPh43a/EukPT6HqC1FuzL8Y0uVwUsicgVXLKIEz6w2LHqnrhou16cp2T3EU4eLZD92bCr8T+zVej5WKXYrQ3Y01zHuyeGknQaggxTLZuwBwp3VcPriU5E5vxXdReTD56BCSL5eosKHo+Wka8fDWpbwBG8QYV7oi8XiYzV6kcVvKYvA1LFXSRBiX8d22LvhMY2KGVAfHv2pSUS X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Aug 2017 23:51:34.8596 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0147 Subject: Re: [PATCH v1 2/4] OvmfPkg: IommuDxe: Provide support for mapping BusMasterCommonBuffer operation X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Aug 2017 23:49:28 -0000 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Thanks Laszlo. On 8/1/17 4:59 PM, Laszlo Ersek wrote: > On 07/31/17 21:31, Brijesh Singh wrote: > + [Snip] >> The function is used for mapping and unmapping the Host buffer with >> + BusMasterCommonBuffer. Since the buffer can be accessed equally by the >> + processor and the DMA bus master hence we can not use the bounce buffer. >> + >> + The function changes the underlying encryption mask of the pages that maps the >> + host buffer. It also ensures that buffer contents are updated with the desired >> + state. >> + >> +**/ >> +STATIC >> +EFI_STATUS >> +SetBufferAsEncDec ( >> + IN MAP_INFO *MapInfo, >> + IN BOOLEAN Enc >> + ) >> +{ >> + EFI_STATUS Status; >> + EFI_PHYSICAL_ADDRESS TempBuffer; >> + >> + // >> + // Allocate an intermediate buffer to hold the host buffer contents >> + // >> + Status = gBS->AllocatePages ( >> + AllocateAnyPages, >> + EfiBootServicesData, >> + MapInfo->NumberOfPages, >> + &TempBuffer >> + ); >> + if (EFI_ERROR (Status)) { >> + return Status; >> + } > This is not right. This function is called (indirectly) from > IoMmuUnmap(), which is the function that we'll call (also indirectly) > from the ExitBootServices() callbacks. That means we cannot allocate or > release dynamic memory here. This is why I suggested the page-sized > static buffer, and page-wise copying. > > More on this later, below the end of this function. Agree with your point, see more below >> + >> + // >> + // If the host buffer has C-bit cleared, then make sure the intermediate >> + // buffer matches with same encryption mask. >> + // >> + if (!Enc) { >> + Status = MemEncryptSevClearPageEncMask (0, MapInfo->DeviceAddress, >> + MapInfo->NumberOfPages, TRUE); >> + ASSERT_EFI_ERROR (Status); >> + } > As a separate issue, I don't think this is right. The auxiliary buffer > that we use for in-place encryption or decryption should *always* be > encrypted. (I mentioned this in my email, "Introduce a static UINT8 > array with EFI_PAGE_SIZE bytes (this will always remain in encrypted > memory).", but I guess it was easy to miss.) See more below >> + >> + // >> + // Copy the data from host buffer into a temporary buffer. At this >> + // time both host and intermediate buffer will have same encryption >> + // mask. >> + // > The comment should say "copy original buffer into temporary buffer". > "host" buffer is very confusing here, as the virtualization host is > exactly what may not yet have access to the buffer. In PCI bus master > terminology, "host buffer" is valid, I think, but saying just "host > buffer" is very confusing. Will do. > Also, "same encryption mask" is not desirable (see above), so please > remove that sentence. > >> + CopyMem ( >> + (VOID *) (UINTN) TempBuffer, >> + (VOID *) (UINTN)MapInfo->HostAddress, >> + MapInfo->NumberOfBytes); >> + >> + // >> + // Now change the encryption mask of the host buffer >> + // >> + if (Enc) { >> + Status = MemEncryptSevSetPageEncMask (0, MapInfo->HostAddress, >> + MapInfo->NumberOfPages, TRUE); >> + ASSERT_EFI_ERROR (Status); > What guarantees that this function call will never fail? > > If it fails, we should propagate the error (the function prototype > allows for that), and roll back partial changes along the way. > > If there is no way to undo partial actions when > MemEncryptSevSetPageEncMask() fails, then the ASSERT() is fine, but we > need an additional CpuDeadLoop() as well. I will propagate the error. >> + } else { >> + Status = MemEncryptSevClearPageEncMask (0, MapInfo->HostAddress, >> + MapInfo->NumberOfPages, TRUE); >> + ASSERT_EFI_ERROR (Status); >> + } >> + >> + // >> + // Copy the data from intermediate buffer into host buffer. At this >> + // time encryption masks will be different on host and intermediate >> + // buffer and the hardware will perform encryption/decryption on >> + // accesses. >> + // >> + CopyMem ( >> + (VOID *) (UINTN)MapInfo->HostAddress, >> + (VOID *) (UINTN)TempBuffer, >> + MapInfo->NumberOfBytes); >> + >> + // >> + // Restore the encryption mask of the intermediate buffer >> + // >> + if (!Enc) { >> + Status = MemEncryptSevSetPageEncMask (0, MapInfo->DeviceAddress, >> + MapInfo->NumberOfPages, TRUE); >> + ASSERT_EFI_ERROR (Status); >> + } > Again, the intermediate buffer should always remain encrypted. > >> + >> + // >> + // Free the intermediate buffer >> + // >> + gBS->FreePages (TempBuffer, MapInfo->NumberOfPages); >> + return EFI_SUCCESS; >> +} > In summary for this function: I've now read section "7.10.8 > Encrypt-in-Place" of AMD pub #24593. Earlier I wrote, > > Introduce a static UINT8 array with EFI_PAGE_SIZE bytes (this > will always remain in encrypted memory). Update the C bit with a > single function call for the entire range (like now) -- this will > not affect the guest-readability of the pages --, then bounce each > page within the range to the static buffer and back to its original > place. > > With regard to 7.10.8., this appears to be wrong. My idea was based on > the expectation that changing the C bit will not affect *guest reads* > from the same area. According to 7.10.8, my assumption was wrong: the > algorithm in 7.10.8 uses a cache-line sized bounce buffer and *two* > separate mappings for the area under in-place encryption. The reading > always occurs through the original mapping. > > Now, this requires us to do one of two things: > > - Alternative 1: we can use the static, single page-sized buffer, in a > loop. But then we must also break up the central > MemEncryptSevSetPageEncMask() / MemEncryptSevClearPageEncMask() calls to > small, page-sized calls. Copy out a page, change the C bit for that one > page, copy back the page. Lather, rinse, repeat. This would likely be > slow, and would guarantee that 2M pages would be split into 4K pages. Yes, while implementing the code I had similar concern in my mind hence I dropped the looping per page idea. So far, I have not seen really huge request for BusMasterCommonBuffer Map(). The max I remember was 16 pages when using the Ata drivers. It may not be as bad as we are thinking. > - Alternative 2: we can stick with the large (unified) CopyMem() and > C-bit changing function calls, but we still can't allocate memory for > that in the SetBufferAsEncDec() function. Therefore you will have to > allocate *twice* the requested number of pages in AllocateBuffer(), > return the address of the lower half to the caller, and use the upper > half as intermediate buffer in SetBufferAsEncDec(). This is safe because > CommonBuffer[64] Map/Unmap requires the caller to pass in allocations > from AllocateBuffer(). Yes, we could do something like this. thank for tip. This will certainly will not affect the perform. I may give this as a first try in next rev. >> + >> +/** >> + This function will be called by Map() when mapping the buffer buffer to >> + BusMasterCommonBuffer type. >> + >> +**/ >> +STATIC >> +EFI_STATUS >> +SetHostBufferAsEncrypted ( >> + IN MAP_INFO *MapInfo >> + ) >> +{ >> + return SetBufferAsEncDec (MapInfo, TRUE); >> +} >> + >> +/** >> + This function will be called by Unmap() when unmapping host buffer >> + from the BusMasterCommonBuffer type. >> + >> +**/ >> +STATIC >> +EFI_STATUS >> +SetHostBufferAsDecrypted ( >> + IN MAP_INFO *MapInfo >> + ) >> +{ >> + return SetBufferAsEncDec (MapInfo, FALSE); >> +} >> >> /** >> Provides the controller-specific addresses required to access system memory from a >> @@ -113,18 +233,6 @@ IoMmuMap ( >> } >> >> // >> - // CommandBuffer was allocated by us (AllocateBuffer) and is already in >> - // unencryted buffer so no need to create bounce buffer >> - // >> - if (Operation == EdkiiIoMmuOperationBusMasterCommonBuffer || >> - Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64) { >> - *Mapping = NO_MAPPING; >> - *DeviceAddress = PhysicalAddress; >> - >> - return EFI_SUCCESS; >> - } >> - >> - // >> // Allocate a MAP_INFO structure to remember the mapping when Unmap() is >> // called later. >> // > Please implement the free-list idea that I outlined earlier. Unmap() > must not call FreePool() on the MAP_INFO structures. Sorry it was my bad. I missed implementing that feedback. I will fix it in next rev. As you have outlined in previous feedback that Unmap() can be called from ExitBootService() hence i will refrain from using FreePool() or MemEncryptSev*() functions in this sequence (except when freeing the actual bounce buffer). >> @@ -144,6 +252,25 @@ IoMmuMap ( >> MapInfo->DeviceAddress = DmaMemoryTop; >> >> // >> + // If the requested Map() operation is BusMasterCommandBuffer then map >> + // using internal function otherwise allocate a bounce buffer to map >> + // the host buffer to device buffer >> + // >> + if (Operation == EdkiiIoMmuOperationBusMasterCommonBuffer || >> + Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64) { >> + >> + Status = SetHostBufferAsDecrypted (MapInfo); >> + if (EFI_ERROR (Status)) { >> + FreePool (MapInfo); >> + *NumberOfBytes = 0; >> + return Status; >> + } >> + >> + MapInfo->DeviceAddress = MapInfo->HostAddress; >> + goto Done; >> + } > Please use a regular "else" branch here; we should use "goto" only for > jumping to error handling code. Will do thanks