From patchwork Tue Jun 27 15:11:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Lendacky X-Patchwork-Id: 9812413 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CFDAD60351 for ; Tue, 27 Jun 2017 15:12:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A7BC4286D4 for ; Tue, 27 Jun 2017 15:12:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 99F80286D5; Tue, 27 Jun 2017 15:12:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5EF43286D3 for ; Tue, 27 Jun 2017 15:12:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753324AbdF0PM0 (ORCPT ); Tue, 27 Jun 2017 11:12:26 -0400 Received: from mail-sn1nam01on0077.outbound.protection.outlook.com ([104.47.32.77]:61792 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752821AbdF0PLK (ORCPT ); Tue, 27 Jun 2017 11:11:10 -0400 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=gfn6shRerTVWvu7a7l6KrsYp8iQxurHZX1V52BIPgy0=; b=AAZvDQxzUi9Jom8BxoVThlET1e7NgQ9G6Ae8sVJO5xVJaDiNDIxstQPiZEt1luZbiZas3kZNZT0jqED8xwJ4eWoaj5GH/HUR80jz0i2URTyPTq1eH60z/L0BetHNStuvsBOb/urPw50/YBhEuWS284SNdD65E6YIrbAD84Pbwx8= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=amd.com; Received: from tlendack-t1.amdoffice.net (165.204.77.1) by MWHPR12MB1150.namprd12.prod.outlook.com (10.169.204.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1199.15; Tue, 27 Jun 2017 15:11:04 +0000 From: Tom Lendacky Subject: [PATCH v8 RESEND 20/38] x86, mpparse: Use memremap to map the mpf and mpc data To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, xen-devel@lists.xen.org, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Brijesh Singh , Toshimitsu Kani , Radim =?utf-8?b?S3LEjW3DocWZ?= , Matt Fleming , Alexander Potapenko , "H. Peter Anvin" , Larry Woodman , Jonathan Corbet , Joerg Roedel , "Michael S. Tsirkin" , Ingo Molnar , Andrey Ryabinin , Dave Young , Rik van Riel , Arnd Bergmann , Konrad Rzeszutek Wilk , Borislav Petkov , Andy Lutomirski , Boris Ostrovsky , Dmitry Vyukov , Juergen Gross , Thomas Gleixner , Paolo Bonzini Date: Tue, 27 Jun 2017 10:11:01 -0500 Message-ID: <20170627151101.17428.86533.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170627150718.17428.81813.stgit@tlendack-t1.amdoffice.net> References: <20170627150718.17428.81813.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: MWHPR12CA0038.namprd12.prod.outlook.com (10.172.49.24) To MWHPR12MB1150.namprd12.prod.outlook.com (10.169.204.14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5d857d5c-0989-4fca-c60e-08d4bd6ebbbf X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506067)(300135500095); SRVR:MWHPR12MB1150; X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 3:s/WtiV2CDpFxo7xGSSMhXX9Ay6K7R5xTDJf5hfx+AevDvRlsZhRw8aeagDJTP+x7LZ1RKUEUUOOH/AizFCsiYWYYihK5+9k6IOPJ50HCMVP4QZ061jgaKlQDlyjBYHnlZZEkBwKI097VHla76zdarBK1VMJ9bvPDGVMtB39+pPxP2OORqug3PzwNnQvK4wD6uBq9dy8UuMJm1OqYeGgnrjzPFTX/HbLNDIiyIW8a6hYUpcQREBKYoxCm63Blpp8S3mwXdMCX+53A2hKVq5Do17ElcOMedahvDcPHXKh0Vh3D9Qmd/H8YvBQRSL5oTI6amQWQdg3VoAfHa3VSCV18L/w5AzjVK3klzh/xCXnfCSuU+tbE3XFge3nxEazQ2vq7m8TwNqW+5TVLCLpZyjS9KLcZIrS10GLW+jgsSHdZZDExD9n4k1UIWeT6Y64yGsC8pGJv+pKsjYCFuFvA/bSgJ0LnVxv/w4M11KYi0pADK9jEUZcJeSmw9VG5VeVDaluoUZX6TpoC6ZaMvHhQJJ/ux8wxDgcikCr2G2MAkxNp59w36QoDrAGT6cUyDhrprI099CG0m/hQl+3x3b4dswwUjmOY1WccHV9i11aB3b7ANWBU46RWmHjzWhypmhZLPymuEPAXqC9NhwWdlWZ2hw98EgSfqIQ0eJDQycrO5jTC2PUgGvHoMR0iECS54/W9Nc2YaqSFtSO/F+jDjdTNFjyxVootLxEBGvfjn4b+f94nuOPKcBEjsZNcjkfca+gAIP2R4RVqRK6TcUpLQVof4CDwkg== X-MS-TrafficTypeDiagnostic: MWHPR12MB1150: X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 25:gUxrYmPdhIOnR4Wqz61kV+jkIAYykPfHvViRYEV33xfT0M8GIhbZJQPH/DADWi2mu8NujsF1KfjZLyhPB9S3AXVnKZVagiMJYW9evLeED4/elIpXxxtvbYijOMBkWtmC+VgIL8BIE46jU2dcHnK2ebBBAKuzW8kc3ugf14s2m+9/fv+Mc8xu/ueBONp9Xp9IEIZw7SUkhgXG2joyzhgfL6qDkeOmKrQNRDnoMPWQL1ULVaHwYNXPoBmiu741KSBqGyWdEPfGsLDs9AC9lYQAarpEEcbCNqnfYFjN3rQEZ2GMeNmELr1yZQagmbC4iq++GWnEd7A64o+//MgQyLhVSdRciwu77WDPnP/I2Vbuh+MGH67gok3PchpqBMR3LOkse9hY673Ne2DNopXvbjb36cXQiTBk3pUoS5RqDiNlFQD9CBCh+Gv/DTw4099hnsvxl586fpWjxX2ErLpJ1a4iiVq3XMfjYDYHQeOwksqBsnS4B5Nd3hjokld2Mb0HtF9Tka3jxtmf3SYZf+TSBLgIeaccWK4+Q7XFBbEhUp4z5p0Bccz51d6n8+cDHH1+MMS6+9ekgMAHOCnJ0G6w5Ll4ddncN+4lhgxZ5Bv3ef4MHxitN+AgoTecLCmk5g8mvpQP8RznxVjf82LXlIc920BdH+di3R+H2rnsMuEmQegtZsaVOHCcaWHEZ38SPIyqhMqutQRBxQidVMwkEidWyNY1mp+KGFu46ugnW83uRjgosLIBayOLjmu1c561c2u6Z3JDELYfTsVvDDa6tqhWkBYoF1kDUM5+qGGTOZ/KJLLHdjtZWEX/Jb0srk4KRfh2Oxg3pKWuGANNg42ewGiwqkPom36woqJ84kTyBy8mMd6KrnWJWQ43sFZbdunoQXQDo8Qp2CfG3+bMnhwwDSwMQMVYaFJNIUksh6ulZaJCUwGpI QU= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 31:EeZGPw5Lr7LjIxmpaFuUPU3XxYc5mszXCMsygyP1MffeeRnYG0N3aY/NzJzO6feLhSkkrW+X3x+28eJ47A+bBajIJwHUf6ttLTeW1mptnvT4LEYjkxIsfqZ1awOqdTY5zHQgDJsi8DrILElk/91FfpEoDZ/gfKf5t1zsm1jIX/JmZOl2uXHYFZSygmhoM4/yIklKpEI9cNsjjp4cpFUTEtP50Zl8rj+GL+Zsy/F55o3hYtAOtT3kMqFvtsmodBrS7VRaZNvdfPHsY5nIfFxTXfmP9L3WymJDD2Ji8MNXN9FblDfcsE4iZVXlIUkSMbPiK5CpBCMb7Dz6HY4Qp3hGtAAdL07outi1I2nf6stn3LA5hmtXrm9J1Dh0cULjnVByvNfJ+LjEtqN51+tTV9zqZwM+901PzO/2PjccSBvyNz2uelLuxAldZ5Vm0ZnUI3WDLo0gg1yS0BzXEafDQEIk3AePCeXYEh1AM1SWzkB3ZmoPN8dBCjyxAXiHVGlA0UMOIlI177STW3T9rsP12ghga8d6j6+cHIHUOE+RIyoxnnn+hBYProT/pnRWAQaoOd7Aj5IWNnJQ+XjYvLPn7XiN6gP75zwxNDrOtTmomg+NTfGoblvT3NSDOdUiSYi6hy8RTiG1y8E83lUbkWv1C0N9dvBqXyxVk6nYL4ORqwjX6Bw= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 20:0/6/KVJfths/sV64JYje9u0gkXrqLh7iGYoaTS/iWXLytModxyxXJHvr+TfOxmG0Dpc30uBwOyVwkaxeycsFXNbsyQh/BNiEP1ixRB3TN/bH6YbbrNNeiYP90hCy0cmANzjKZx9tN2JwY3dDCvXRKvT1eI8MvMwfbZ4tZqaf1AJTPeTZ5AqH1tre9ASVmVwXh4EZjd3jV1IkCaOeAjQvyJVmIA+bsnrIje6pqt1SLG4ov2QcIOMgKjmdoF8durCbmo4ABaKn7cKAx5Gp2liHGoalm1DccLCxdaOsBBUebBUafXndJaIbcIQqC52EvBPwYa+J9YvUWYWR3yDSNpeYHa5Fwo13LO4gIrvPzDxNzxp/74XSbXnRowY8p8hd7IvAsvrRqTg5zV9IO8hH9NvyT0rGebZ+IyQxUq7G0Ml+is0a7uospnJUZqByF2jPc8uQcthsJdMNgppLgpoIbGk0H7qCu9w3yCUm3P2dxTOe3sDDHVNeGn+Hm9nPUZWMfZk+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(767451399110)(788757137089)(148574349560750)(167848164394848); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR12MB1150; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR12MB1150; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtNV0hQUjEyTUIxMTUwOzQ6aUo5UzFwYnlaT1VISTFDK3BjVE1USTRDVTRZ?= =?utf-8?B?ZVNKTmJHdW1PbWtIUUJ1VzNJNGpJaEgzUXpXc1ZHempTbFpZbnI4dkJzdFc4?= =?utf-8?B?SklyOWxWWHJFL2J0RDFyY21iNkZxd3hEM2p3MUlMRUFsVTA3QlhaMjZjK3dv?= =?utf-8?B?bjFBQkVhSXlyOEtZa1hGWmxxVmEzM0FLRVY3aDhVdFFYdmtyQ1JnNFJKakI0?= =?utf-8?B?NnM4SzdXMm00WUdCUkt6T1M5ZHFrTk9NT1p2aDhFaTA0bXd0Z05XQ2Z6WHlS?= =?utf-8?B?UDEwSThHdlFjemlOOE11WnlXcnVaYkJuNlhzakxRMzVvcExBNmRIOWhuTlZI?= =?utf-8?B?WFZ4cGszOG9XbXdBcTYrcDBQc0RFTUd0UzZEcEMvVDRTL1VsVkpkK05rU0Vl?= =?utf-8?B?SEwzbnU3SFJJeGZNR2xtejJPWU1CTlVyUFZBSHdSVGZ5NXlTK3NjNkdOa1pJ?= =?utf-8?B?ZVRWbDBjRmVmWkJwYjBQK203UUNwTzVFK2dnMVl0TzdXeGJ6bHNHZk5BWW1K?= =?utf-8?B?VUJqSFRDWTdXU0JZdDdQcUFCRitIMENzQVA0ZlVHYnFLOWw5d2w2SHJYU0pu?= =?utf-8?B?UmFJanVKSUpMNE0rMmlPMjZEV0FiVjdHcVBtT2R5YWtPNFV1V0JkM0lFWld0?= =?utf-8?B?WmVrREJDYU1Vc3FDK3lxRG5wdXRlK3p0YmVoSjUrUWg4amVpNFlteG1RMnFV?= =?utf-8?B?MXpuZlRZSzh0RmhsTE5PbDlOeG1WeFdEQW1OYnNqZzhURTFrNU5OSUFHWUhJ?= =?utf-8?B?ZGo4S1hFM0w4QmRXNGVxcWxWdXN1REw5aGE4VHZhNmE5YTEyenlNL3I1VU5C?= =?utf-8?B?ZklNYmQvclFteFdPdmVocXVUOW9IODIyRDJZTVZNRVVTajNDL044OGlieTRk?= =?utf-8?B?Y3VlaURlckVhSXZzUUN4ZThBNjdSZ3JCK0dLTElURmhqT3A5dXBCeWdMM3Jh?= =?utf-8?B?OVBST3JKWmdXYk9YeFd2bUJORHpNYlprdFlpSEh4MXRjQjlna1ZCM1NOdW1H?= =?utf-8?B?a04vRFJoaHhnek9IcHpBa1VuQ1J5L0ZIM0FqQ1JveW02eWQ0UE9TWXlhQjBL?= =?utf-8?B?WDJoSHA1U21KSjFicm52Sk1ZTjlVWDN3aEZkdlhCTGd3cllGOUxSWjJRVXNU?= =?utf-8?B?WEZoa01uSXg4VXErU1NOZ2ZxcXlnbVNER1FWZ2lveUxwd1BWeHZSMGNUWWc1?= =?utf-8?B?QnVEamZPU2dKMHdUbndkdElEVXk4Y3hPU0IrRzRrTGVVa1hVK1VQT3R1VE5E?= =?utf-8?B?VFlqSUtoSlpuNnliTXMyQjJrZ28xM1BjeVpzR1hvbjlUUWxMNm5ZMHQwcitE?= =?utf-8?B?SzgyVnV1YkpPTGt5KzlvelhmamdOSEVHZzZ2bEM3WmxIRVZYSkhxc1BCYStG?= =?utf-8?B?VzFKeUVxVXcremJ3NmdXTFNkMldKVlB6Q1dwRndaeXloUThRY2ZkeTNTUUE0?= =?utf-8?B?a0N1QnRMeXh6RE5JYllpR3VkQlR1MDJIWDdQc1UxVVFVTGZ1OHNEeXpENlVr?= =?utf-8?B?SlVhbHBpMjZGcXI5cFJ6ZmNxQkdrdEhQdmNGNjhaMHJNUmtMUjJ5WXR1dkJ4?= =?utf-8?B?emljU3NQY0ZWNFo2R0d4bmpBQnd2Q01mK1dXUlh2T3ZzaU1qT0E3V0tPVnl2?= =?utf-8?B?dXJLQkxmcGlnODV0STNwWG4wbThaR2FIOGhCRXJ6UnRiRE4zOU1jSzUyb2RI?= =?utf-8?B?RTNnbGY4NTRrcUFnZGlqNFpCSEtQK01ENEowaWdDd0NiNGtIeGI2bG05dDEz?= =?utf-8?B?Z3JGa1lEVUhIL3EzakJSYzlpcFZlSktNTDlpN2RKZEVoSHY0Zld3QitjYk53?= =?utf-8?Q?UabWf7dW+HK1?= X-Forefront-PRVS: 0351D213B3 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(39410400002)(39860400002)(39450400003)(39840400002)(39400400002)(39850400002)(4001350100001)(42186005)(110136004)(2950100002)(6506006)(6666003)(103116003)(38730400002)(189998001)(86362001)(97746001)(55016002)(54906002)(5660300001)(7406005)(305945005)(81166006)(7416002)(8676002)(53936002)(4326008)(9686003)(7736002)(83506001)(478600001)(72206003)(2906002)(66066001)(23676002)(25786009)(54356999)(76176999)(47776003)(53416004)(50986999)(50466002)(33646002)(1076002)(6116002)(3846002)(230700001)(921003)(1121003)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR12MB1150; H:tlendack-t1.amdoffice.net; FPR:; SPF:None; MLV:ovrnspm; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtNV0hQUjEyTUIxMTUwOzIzOnJrSDhhbW9Ka2pXYndKRGVmUGc5aW95eEUy?= =?utf-8?B?NUxuVWdJTlErazdmRFZpNWdZMU11TWRXdlFzLzBSL3VpdzZDbEZoZjBVRm1H?= =?utf-8?B?V0JPaUpSTVJQb3RFZjV6VzZVbWZCRFFRTTFzK0dyc1cyYlBRNjRLUGwvM244?= =?utf-8?B?eVZpMzdaUEpmcnFmalA3SFIvcEhYNjBxRi9OVXhJcUFadjI0Q2c4VTN2TGRn?= =?utf-8?B?dEgyZHNqVjhMcWoxamw0RXJ5eVNuZ1dtc0l2ZmEydS8vR1hINE5zK3dwcWxa?= =?utf-8?B?SGtaOWlHOGR3N1V4Q2FQM09VQ0g3M3VJckJ6aFZGOGk0emo2K1BlR2I2Vytn?= =?utf-8?B?UWtCODA2R1ozcjh3bnNMckNxTktYT1g4WDM2WVdCUWhBOStLMVhZVTdFR0Jy?= =?utf-8?B?Sk5hUURsUWhtK3FIM25PUHJZVGZzcXcwUWhBeVR2SktKQ3M0VFJLSnU4dFZj?= =?utf-8?B?V1FrelN3Vkg2cWZIQ1BCaUZmcThYaWJ6ZDhNNGZ0OE9ORHczTDZoRFgwQXNa?= =?utf-8?B?U3d5NjdqczNLMkZrRzZLUHhuaUN4dVJ0Q0ZZaHlVZFRYZ1Vab2tTckZtK2lm?= =?utf-8?B?UTB3ZVdoSE1LRkJsQThUTk5tSEViZEtCRTZtOTVyZG5QTWx4ZjNRVTJ1U3h1?= =?utf-8?B?YTJLTExyeDl1MXljcGlodk1pMVBabTMyajR5YnhrdnVjeG1nbjhaQjNrRUxH?= =?utf-8?B?cFpCWElKamhMTXNPZEYvOXBGdit1K3l6Rk9nN0VjZmdHOGdpenIweXFYWjhG?= =?utf-8?B?R1FDQmg2VlhHUVZxWEtTOVBhOC9QZkdhb0Uyb3UxZFRKT0xBa3BmKzFGQ2E1?= =?utf-8?B?YjVkVW5SelorUzlCMGl2eVlCVVRFengyUjJSS0UyOG8yWlA4eStrNWlwc08w?= =?utf-8?B?VkNLT0JYTXNvbldzaEpPajgzeC80dWJMT0dkMHNsZTNSdlBVbkI2SHpiNnIz?= =?utf-8?B?ZUZ5NTVhdEhJcUowamJpZzNaNnhWYStiN3NHaGlwNzRkbFM1ak5MZDNhVytJ?= =?utf-8?B?VGw5MGg4dTU4b054eUR2Y2JSaWExL1ZHallUVXJLZzB0a3lqd1RPRHl0ZEtw?= =?utf-8?B?UjJoSHUvaSt6VlhrVmZvcThLeTR2S2pwSVQrNDZOYURYa0ZOT2p5TzZqc0Ft?= =?utf-8?B?eXhoNXZuVm93WWcyRmJGNDUvREtuZHZ1ckxPSmVLNmpob1FZWG94WnFGdUNL?= =?utf-8?B?VFdwdllUZlZEQVBXN1BkWnpuT1dybHQ1ZWI1N3JuMlBCd25WU2xyZVFDSmZ6?= =?utf-8?B?QkFYUEJJSmYzcVUwNDVpUW1ERXNudVhhcThRWTQvU202RXNUMTVVRFFZcHF4?= =?utf-8?B?QTdZVUpSMmc5LzAwZHRYeXQxMzc3cy9nbkJBQnJ3aUVuMC9pUVZqclZDbjU1?= =?utf-8?B?MldoMHN2MDVvVTZhUm9vN0dxSmFUMENzb0FSQlhsdWN3UWRZYXNJSFRsd1Iz?= =?utf-8?B?RG45Q0xRbnlzMitTRjBaOHZtUWN2WGtoWWorTEFGZjdBN2MyL3djWGlXZmM4?= =?utf-8?B?ZnNJZEJzeExpWmR1SWpoQVlvQ21LamQxRnF1THQxQjI0RWdENzdqYWVWaWVR?= =?utf-8?B?T3h3dGRlT0pnUUdqNWFhUm5EWGV6UGRLWUNka3M2WU9JR3RuWVBmZHhhaDBj?= =?utf-8?B?OVdoUEd3Zzcvdnc1eDAyU3hVUlFaR3MrTFhjaUsxck41ZmMwUC94R1NVaUpU?= =?utf-8?B?MEQyQ251WFdFMngySVgreDFLam1lWjJRczNhRDQ5dXFONGdhaEpwbHFjZndG?= =?utf-8?B?Z0VQckNhSWZJK0FUVERvOXRxR0pHNnZtR1M5QjhsTmFrY2htUTc2NTlqa3hI?= =?utf-8?B?YnVvcVkrRkxXNVVaT0UvcW8vWjRGbnNhaE5ZZ2YzQUJ1RlE9PQ==?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtNV0hQUjEyTUIxMTUwOzY6QjE0WWhRU1F4NS9UMjh3Rk11SXNMeEtGTG9q?= =?utf-8?B?a0xBRmNtOXozdHpnNWFCSDg3RytBcVd4QkJhNi9uMlcvR0U3K1FZZHhSSmQv?= =?utf-8?B?QUlvVlZNN29HVThxbEE1em5ZOXYyaGZnUkNnbG5LL0QwcXpSNGphbkJjWS9x?= =?utf-8?B?RUxYMlcrd0ZzZEZNR0ZRWTRaYkZFSlJYOFd6Q2JsRmlyR3lkSzVxOWE1Q1FZ?= =?utf-8?B?dElYQVA4ZEU1RXNkQ1JXRVpSK1RKVkZUeW1FR25ZbzJOOE8zT0JuZnBlR3Ri?= =?utf-8?B?VUUrN1c0WXJaN1gwT1NSbkFnL1ZmWnRoWWVRVDVuaEI0ZHFqR0VTMjFRMmRy?= =?utf-8?B?RXRuNmhySjkrSW40Vm1YRDhHbUJMdmZQamdVd3hONEkwUnQ4KzBPWWpDZUpX?= =?utf-8?B?VXQyeFZEYnM3YnhFRzdXaW9KbUxoSEFHSjc4VmhOYkVmaFJaOE41WEdMNmlC?= =?utf-8?B?ZGo2T1FudWEzY3NHKzNqOGlWV2xwNUR3U3lWSlZKSjJpNnpBR3huV3RCS3Vv?= =?utf-8?B?cHpsd216M3lyNWdxNm13ZFh0Q0NIZkhOUW1xbXBmNFNGSllacGNkTzI0ZVM2?= =?utf-8?B?YzZTeUIyVE1RS1FWQmREUTVZVlkrMkVVRFhibU94cmg3bDREMHZsZTQ0Vkh4?= =?utf-8?B?aTJUcmZkRmdLNWNYV29ER1JVZWtUMy9hclU2aS9ZRnlCR0Q0QVg0VGhuNzht?= =?utf-8?B?MWFRaUdKMEpSV2lGVm9FRHhnQmQ0WngrTUszaFVFeVh2djRJeTRRWkJ2VjVv?= =?utf-8?B?NmpJcklEdzNMZGxYR0NRWTdNbUFmZnRvd2xxTmxSd2o4Z3JOQi90aUxFTkps?= =?utf-8?B?TWJJTVJkenE1QnBIRVZWSHRreUFTYjZBNHNjejdsOTk1eWw3ZnlGdWVkR2RM?= =?utf-8?B?RFlRd2VNVlk1NTBsTzdjdjZtZTIzWnlOS1lsVXcyV2o4ZCtsTmljVmxVRjNj?= =?utf-8?B?MnkwNUFreWFaY3Vnd0U1d256dzlPSWlYZGs3THVJU1FqT0VnMzZieTI2cW5K?= =?utf-8?B?clRuZFFLN2x0K0VTdGF0WXI3VEFVbC93bWJmYllrNlpVOVR3RkJDdEdicmxk?= =?utf-8?B?Y00yb0ZCZWpGRUxtV2l5YmN3c2RUNmdGWG55MGxlRTFpSFh2THVCSVdXOVFB?= =?utf-8?B?Tk0wYWMvSXlBMEhBTUk4R2NyRkVjYnhDU0xQTFhPSGUyRWNiYUs3di85d2ky?= =?utf-8?B?VUw1a3c2bDJWM2x5TXcwYnVpQis2UVdQWE1oMTl5c256b2dDYXd2c0Ywd0FT?= =?utf-8?B?b09YaEw0OW1aN2dCcWZPNnNTdm9EQ3hlOVN4aE1oR1FONU5Xd2ZzYmYrSFVR?= =?utf-8?B?YlZQWCs4aUExemNTVTNZVG1HenFuNXZoZ3pQOEtyU05tMzZOVHdnWC96SnpC?= =?utf-8?Q?QOxv5jq?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 5:XLN8nObAVKe+xdCCebqgy4Bd5KF/3CjCpCA4QYvEeu3BDpBIaNXTeLWeQcUMQ9TqZhND5zEcpbljJdyJHuSeFT2gKNBwmgBAJikKDbKtVd54iXV2erho39TY8eKl6haPtrD5tHsCBIf3dG/Wt49dfpLiy2ih05uUaykJYQQVKq5olZasa85jgmJgQAXuJi27ItxX+NqHeYsAIveUCCcRYUu2ctn0MYr1uTBTeBqtRDO22+PtnHQtiiwPAVqgqRUvnX21+k78EiVVwF5/4iq3fZ+twIuZM/HBw1OHr5D4HyMLISIaLxkQs2ZqgPVNH9W44jOIizvzD+8c/ut6sLJKCsAQf3rs7LkbrrKnd1024Q6kSq2BNWJ/dR+NsHnw0Mq708igfdWdnGGpDEU2CJPy7QoGXv6bzxKLo8bR67mclTFyazBMLo7odKZODkiFmuSU7oiWoMOsbk3wtV9tCeHAgYl+OrPogX3HkVivSr49Hwne4ohvedA7KIO/Mt9S9fM6; 24:L1m2OELkwNfX/mRdHRuo+OoTfMbgZUicvRyZvgaVedpidr40woaGSWQ/sMrHWjv3VDj1InIJgQ+t4XkOKrX8mVWcjVS9A9s6GZ/yQ+n0CpM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 7:Z8pXCDaHMHVlWsX9vSfRl5GooUGRn7H0lC+jYzEEcs7P+VHkHqsaNlhWxkzqc8c1fOVtIopTgw2lKDRhFrzdIdd1yLH2lGj6Aoj2Zjcdc1vaVuPiMsp8HHdcrSBxEgPQ/N5L//lOqyAStu9pH0gJf01GOo5jjtoFs4eVCDnq6an80ClCmUU33AEyUjLNrM5JpW1Y41uhWXVVPYkC7WRP9+ghozY3YbwfHd76vVPmUXQkPXx9aSY+HtMHuCFfmkQq3thFcSxHKOie99ha91YA5wy2ObB56hjdze43eaHSLk0C4cvclJOrPtK7J88WKr4tszO2SVLlWt6KeatqH9+UrpGGy6WrPlxShGlease9y3q8HyZ/AwyHh9YwjirYrvPgtI9KHCg65wi3kcwVsC9+P4VrY1NNukBXh5TubJCeJnbWYeyXo94PfN9WotU4U8jijd4NkJU7YZtfsBXFwYh6UQo4xthn91LLgJSQPl6yNI2QppF+LdpAULDTWHWU5mDrW+pjCXEUrIdlZIBGiGIVO27PrOJRb6Z5e9zBr4lL88vvq1F6wLj8udGRxcfyOIRwNs8p7cv6xIGfHqabn85MsI1ih6C2xvqE7omDN3DA0qEJPr5aPAJxgwSe3jpjjRsGkGr80Mo5Z4EYPyTOzzc/xXkXOfMiiiUKZyQUi3+XyWNIVzn50WtVD4iMgu9st8B+CP7jWlnVaVVqlEYypCUjQI80c93mUN1ipGIHtDwsE+T7rILnQqPdyCcL3zMXIzRsj1MakahlT+X18oQe9ZXdIiDQR3oxYPCVNfskHFL2ZBo= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1150; 20:z5oTg3gF/GSJ6QfqkWwYTUhaf9yGRS5izNgYFU6MVCXjBxNjXubiWCOsYv9tszvg5CYCAlSBwBb0X3tCt19MeRs0LBAQ4Y97HAGaUs6c2pN/WeTQ3Phv8+d46U7u1TludIqKq5fjfTCGjgS7H3rfAQp84M/x6mTkPAzvjjErJDYgOKwmhc3yaDAJ+rOw5h0+cTuuiKf27xwCVh++KpcPMzI+f1V7dSialbC6TjztYtUzo0Sc2qiec0s3OVertsyv X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jun 2017 15:11:04.0198 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1150 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The SMP MP-table is built by UEFI and placed in memory in a decrypted state. These tables are accessed using a mix of early_memremap(), early_memunmap(), phys_to_virt() and virt_to_phys(). Change all accesses to use early_memremap()/early_memunmap(). This allows for proper setting of the encryption mask so that the data can be successfully accessed when SME is active. Reviewed-by: Borislav Petkov Signed-off-by: Tom Lendacky --- arch/x86/kernel/mpparse.c | 98 ++++++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 28 deletions(-) diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index fd37f39..5cbb317 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c @@ -429,7 +429,7 @@ static inline void __init construct_default_ISA_mptable(int mpc_default_type) } } -static struct mpf_intel *mpf_found; +static unsigned long mpf_base; static unsigned long __init get_mpc_size(unsigned long physptr) { @@ -451,6 +451,7 @@ static int __init check_physptr(struct mpf_intel *mpf, unsigned int early) size = get_mpc_size(mpf->physptr); mpc = early_memremap(mpf->physptr, size); + /* * Read the physical hardware table. Anything here will * override the defaults. @@ -497,12 +498,12 @@ static int __init check_physptr(struct mpf_intel *mpf, unsigned int early) */ void __init default_get_smp_config(unsigned int early) { - struct mpf_intel *mpf = mpf_found; + struct mpf_intel *mpf; if (!smp_found_config) return; - if (!mpf) + if (!mpf_base) return; if (acpi_lapic && early) @@ -515,6 +516,12 @@ void __init default_get_smp_config(unsigned int early) if (acpi_lapic && acpi_ioapic) return; + mpf = early_memremap(mpf_base, sizeof(*mpf)); + if (!mpf) { + pr_err("MPTABLE: error mapping MP table\n"); + return; + } + pr_info("Intel MultiProcessor Specification v1.%d\n", mpf->specification); #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) @@ -529,7 +536,7 @@ void __init default_get_smp_config(unsigned int early) /* * Now see if we need to read further. */ - if (mpf->feature1 != 0) { + if (mpf->feature1) { if (early) { /* * local APIC has default address @@ -542,8 +549,10 @@ void __init default_get_smp_config(unsigned int early) construct_default_ISA_mptable(mpf->feature1); } else if (mpf->physptr) { - if (check_physptr(mpf, early)) + if (check_physptr(mpf, early)) { + early_memunmap(mpf, sizeof(*mpf)); return; + } } else BUG(); @@ -552,6 +561,8 @@ void __init default_get_smp_config(unsigned int early) /* * Only use the first configuration found. */ + + early_memunmap(mpf, sizeof(*mpf)); } static void __init smp_reserve_memory(struct mpf_intel *mpf) @@ -561,15 +572,16 @@ static void __init smp_reserve_memory(struct mpf_intel *mpf) static int __init smp_scan_config(unsigned long base, unsigned long length) { - unsigned int *bp = phys_to_virt(base); + unsigned int *bp; struct mpf_intel *mpf; - unsigned long mem; + int ret = 0; apic_printk(APIC_VERBOSE, "Scan for SMP in [mem %#010lx-%#010lx]\n", base, base + length - 1); BUILD_BUG_ON(sizeof(*mpf) != 16); while (length > 0) { + bp = early_memremap(base, length); mpf = (struct mpf_intel *)bp; if ((*bp == SMP_MAGIC_IDENT) && (mpf->length == 1) && @@ -579,24 +591,26 @@ static int __init smp_scan_config(unsigned long base, unsigned long length) #ifdef CONFIG_X86_LOCAL_APIC smp_found_config = 1; #endif - mpf_found = mpf; + mpf_base = base; - pr_info("found SMP MP-table at [mem %#010llx-%#010llx] mapped at [%p]\n", - (unsigned long long) virt_to_phys(mpf), - (unsigned long long) virt_to_phys(mpf) + - sizeof(*mpf) - 1, mpf); + pr_info("found SMP MP-table at [mem %#010lx-%#010lx] mapped at [%p]\n", + base, base + sizeof(*mpf) - 1, mpf); - mem = virt_to_phys(mpf); - memblock_reserve(mem, sizeof(*mpf)); + memblock_reserve(base, sizeof(*mpf)); if (mpf->physptr) smp_reserve_memory(mpf); - return 1; + ret = 1; } - bp += 4; + early_memunmap(bp, length); + + if (ret) + break; + + base += 16; length -= 16; } - return 0; + return ret; } void __init default_find_smp_config(void) @@ -838,29 +852,40 @@ static int __init update_mp_table(void) char oem[10]; struct mpf_intel *mpf; struct mpc_table *mpc, *mpc_new; + unsigned long size; if (!enable_update_mptable) return 0; - mpf = mpf_found; - if (!mpf) + if (!mpf_base) + return 0; + + mpf = early_memremap(mpf_base, sizeof(*mpf)); + if (!mpf) { + pr_err("MPTABLE: mpf early_memremap() failed\n"); return 0; + } /* * Now see if we need to go further. */ - if (mpf->feature1 != 0) - return 0; + if (mpf->feature1) + goto do_unmap_mpf; if (!mpf->physptr) - return 0; + goto do_unmap_mpf; - mpc = phys_to_virt(mpf->physptr); + size = get_mpc_size(mpf->physptr); + mpc = early_memremap(mpf->physptr, size); + if (!mpc) { + pr_err("MPTABLE: mpc early_memremap() failed\n"); + goto do_unmap_mpf; + } if (!smp_check_mpc(mpc, oem, str)) - return 0; + goto do_unmap_mpc; - pr_info("mpf: %llx\n", (u64)virt_to_phys(mpf)); + pr_info("mpf: %llx\n", (u64)mpf_base); pr_info("physptr: %x\n", mpf->physptr); if (mpc_new_phys && mpc->length > mpc_new_length) { @@ -878,21 +903,32 @@ static int __init update_mp_table(void) new = mpf_checksum((unsigned char *)mpc, mpc->length); if (old == new) { pr_info("mpc is readonly, please try alloc_mptable instead\n"); - return 0; + goto do_unmap_mpc; } pr_info("use in-position replacing\n"); } else { + mpc_new = early_memremap(mpc_new_phys, mpc_new_length); + if (!mpc_new) { + pr_err("MPTABLE: new mpc early_memremap() failed\n"); + goto do_unmap_mpc; + } mpf->physptr = mpc_new_phys; - mpc_new = phys_to_virt(mpc_new_phys); memcpy(mpc_new, mpc, mpc->length); + early_memunmap(mpc, size); mpc = mpc_new; + size = mpc_new_length; /* check if we can modify that */ if (mpc_new_phys - mpf->physptr) { struct mpf_intel *mpf_new; /* steal 16 bytes from [0, 1k) */ + mpf_new = early_memremap(0x400 - 16, sizeof(*mpf_new)); + if (!mpf_new) { + pr_err("MPTABLE: new mpf early_memremap() failed\n"); + goto do_unmap_mpc; + } pr_info("mpf new: %x\n", 0x400 - 16); - mpf_new = phys_to_virt(0x400 - 16); memcpy(mpf_new, mpf, 16); + early_memunmap(mpf, sizeof(*mpf)); mpf = mpf_new; mpf->physptr = mpc_new_phys; } @@ -909,6 +945,12 @@ static int __init update_mp_table(void) */ replace_intsrc_all(mpc, mpc_new_phys, mpc_new_length); +do_unmap_mpc: + early_memunmap(mpc, size); + +do_unmap_mpf: + early_memunmap(mpf, sizeof(*mpf)); + return 0; }