Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753014AbdGGNmH (ORCPT ); Fri, 7 Jul 2017 09:42:07 -0400 Received: from mail-by2nam03on0042.outbound.protection.outlook.com ([104.47.42.42]:30784 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752707AbdGGNmA (ORCPT ); Fri, 7 Jul 2017 09:42:00 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Tom Lendacky Subject: [PATCH v9 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: Fri, 07 Jul 2017 08:41:46 -0500 Message-ID: <20170707134146.29711.77830.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170707133804.29711.1616.stgit@tlendack-t1.amdoffice.net> References: <20170707133804.29711.1616.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: DM5PR12CA0068.namprd12.prod.outlook.com (10.175.83.158) To CY4PR12MB1141.namprd12.prod.outlook.com (10.168.163.149) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 86f91238-1433-4a7e-ae80-08d4c53debbb 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)(300000506095)(300135500095);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;3:J2+kpgVij6yQe47a0AooV+MVrU6aTS2f+BcsxFfUYAJE8WCav/798Uu75xwth2Vu/la/U7MxklllwP6Ld0Pf0j+U8Jo/qYEXkXHawf51TacZnnln7mLvzKklAKYVITRXp3SL5RIxEm3tfY1PQgt3K+VsTRGJA72INqxgg8iz2xHW/zLMuzXPFOu/dCjbkauYdE/DznOSqggfrRRn3QEmaoi4lbX/pcV0DC4M8z6AxN0ZgUYWfGQyPuseRtT4yCyW+I+rYXOb/JiwzwzK/VuKdkqkHtfJK1ym/AEDFdaUC22AJNjL3ErJ67RFPRxEo2xsAsi4owaQ9PQnNkKmtOAu24lFm6FFvaGe2QpS3W6xJN8R70Lgk5cNW9o9mZn36/202pJuXFthVW1IIrETcaacW8HoJYgso5L5PhpoZ7iQYPUgya1yGe9gYLanx/ZZtdOS/poN6R2m/JUDuNQbyHwU2bdzAB+YjIskFjmmPGN3dj+bd2yGwY8JGq4PU+32xK8o4oZFG8433kYHdXSl4FgqTCARU4ptT8HPnk2tqAZAm2Qp8YbGzduqRKWgp9BBNr0PhsdPxtYIvVxDeTduiBZTZ53tucORVwAriSBy5Fyu8CSbLJM+Sp9idboqe39217izT8gFyh2SYnovlgAEfDNuxR52DhMJ/B8W0O6/rh+xS0eT74h6ivyNKZn62Aaf9xdOOPaXHjEll2x4iU5PYdqmvM9GmIkdZWESLa9dRMpzmP9vjlBUZ/mlh12557lLBssRdSQzrtI0VqoQmCMCi3ljtg== X-MS-TrafficTypeDiagnostic: CY4PR12MB1141: X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;25:lZf3mupIO6vcEJXSp/qfUSe1jnPYSE4LcEXPVb303RIOYFWuyY+NB3GysN9xY3NvrcMELAQJ+1oYIYUH6bMsqpCM6dXpjTjM6F3u2Az09lSMU/D0U4JQzC5wlzzI97+0PrQ2QWPYfDEj72L8h7BAvenRsuhCBL0bmduqJST2xUnGKgc7oAevDcXRtZLc+Gnhdxbdv8gLtbgS+HAcJTcd04vc+lP0V9Vs+4iGV1BKDK06FIy7y8D6JPjawuToW6ReRHLqswpWIoIUGS1kcsNfcORhD3cYGvaTH7VFmro9oIjV0wRxVvL9jJzbIEST/AwnMZ2I/60H+rL6VjNHO9b7uT+nRw6PGwh8CjMIsEXBVtVr+xibEZYBNfQuGhvZtRsXWrRzwRqDm1WJ2gPGcj24f9DsOf55MwvEKS1YxDaJ1kAl/tZVNmz3hQZPLDzNxjRy3th5s3kXx9ihMzlXzkAw5lpVD//VrCYWkCIfiEDQFI7JK/ezK1zJIK/nry3yc3SPnGELDbjJMo7v1wn/tBR++yqIJrouQKHvxtlU12RArHktJ9TmtV5O4DxJrQ0cNpP2cAQjhtXP9kKDLpQ/tUM2vfl3tSdVXvh2cBmOiuYazsdXmMJyJvtVMez0xrmNYe41XzGra7UPOtSKSFa2AzReUeqxL0GkpnrMNXp1QFRhWoNDjQyln2Uo/Niob4vkyJAMENb2IVI9hjpW0pu39YXckVkhpHsEs38jDks7HoSGcMn0qAC7mMlMr5OQRusCmSyCicDVVYqtF3R7RPoZvCQfqE6Wj5YUEiNXhhkub5djKx0UsmB/GlZLOFRdHYS0eY2CYyKmkufDtxobrHTBAgRVQfLDZu43Jj8hrlZIc/BOGIvx8vfXut4VR4GoYiysDCt5QT81W5TfYOaL9jQhjdNQ8oglnk8dLfYwGxmixhn+aSA= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;31:8XnziKtLFPsd/LvV0LsVCGXXiIrTgR2S/+ktD3fNC+0pwnSdqOsUWyYtUHlmCKGJsOOQkK9IOLVXpoV/AfRpNXPl0ySAKaWWPlHM4+r1wvBTtayZXiHD3/yFVhhmC924tj3HDTJl3Fb2PRltYDVNBMKQsV3Y5RXz9EYs7Y45O/gH2Z0vmoGF1ISNKsDSsBfk5lfEpVU1JypzaG+TfHdZSabmWHQNJyqLsOgmRm6c9QCFDSJvcR1lAYuB6vvJtDhYHvZ28HvnAwv46s6YQmG/3ENkHfTVTiMPXZ01Oe4dweki1efT6N8/+tgx/emjz1JLpxGSoxgyqZijGY2C2ASDOSdTInBmmJ4ZHCC4ll3oB5qK0JWXAgVJacwXWK0ZQUHzojxEZYT2FuN/oTkeDNa5LAIJlYMzXKw+dM1wT3BRoce029YlqpcjKJ2JZ2ZVcMvhi/G3IKYIbEIpoWRu6Y4KTvzJ5/cxqr/QABoP9nNP5iWLHl28ojd4KDFvuTPN2mkE6oJZpM3hQX9xKpqcsNeVj6mlYHBRvzYhF8tKhyPNOxuXosAzRRXLINMSMfc9Sv5XCCc5k7nK3EedNV6J0kaEXR/vLjqNcw5xEGWQWs3HGXldLjI1n4H3DDHbdW3BZXEFvungm0zhwnT4FDtV6anfOvvZ25vE6175CUW/X/s6Ypk= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;20:84QaUENHHIqfkKIcbM+Oz/wjVBklKGNoisVUZmzI9PfTwcQFo3diBAB4k4b+xtQubW21JcBWTcmKBNsEpnGin3vUyMxPhBmbx49mgTDSR0cJUkk7++kOPqTMH/hCXZ/V+6hT5YESSAVNvExqbuzTZHQwTAU13KoHZ97AwA9fVwglKbkWdGRKhpBR0IoKGndBrYiRchLio1waE3Dlmtzveb2VSyPR7ivFQ+pPzTwX+sCAMmYgl66wT5hoR9W59lSwQs20VoN5nnhQYcMzBzGPc11SGOG7Aim7ku5O+/NHpnHS1STw3NjGjSpD/qQx3iT1mWOVzwtaF3Y3knI5T+yG3eVGfntwW/uhzyeJPuFhcOHimaMuCKCfccXSXnOlQJOIqAc0H5n4GlwfZSpFa02SqiY09iGd7cHTXi1hlqfmBrVYvz8l9pOkPeTJR4mM6HT9fwZAfk7QfRtrcx9s33MAMdGb9F2VLs8sSXnveXhjuyAE5S8awO78E4w1x1/TS7A9 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)(2017060910064)(5005006)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6055026)(6041248)(20161123564025)(20161123558100)(20161123555025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR12MB1141;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzQ6OHdRVFR2ZUJwRlJsUWF5NWN6ZVFGai94RnZX?= =?utf-8?B?RzBIYUthRm5XdFlKc091T2p5VUpzNmErUDhETUpkV1ROc2hGSHFDcWgxZi9M?= =?utf-8?B?SVl4NU5va1ZlYnZFODBUeCtKUVFMNm5Yd0laUC9TYzZ0R1lRRDNsVW1hMmlx?= =?utf-8?B?TWIzbFczQVYyT255MEJoMVM2cXFESTgwV2ZRK3lydVl5c0dWZjRCNzVEWWRC?= =?utf-8?B?d1p1THdBRFpEdlpRMGFjSDh5VDhRWDJhb3VtTVJsUHRxY0NuaTI3SW1Yblp5?= =?utf-8?B?REFzZWNxRnUzVkJ1SVNrVi9xQVkyWFd0ME9idVVaVUF2NTNRZHU0NGtDanpM?= =?utf-8?B?NWk4YXdBb3UwWFFySmJ2QnU3bGhXVFFjK2ZuRENRc3RSNGR1QzQ1Nld3Y1Fp?= =?utf-8?B?Q21FaUJ6bUJUSjdJVlhqblIzaldaS2VvNkpwWE5IN3lZa29VdHk1R3lQbSs0?= =?utf-8?B?ZVRWak9qdE9hZGJPZmhwY2Fyd1NpUmR3WlR0NkFHQ0dPRXhrTHBhcEptbUtV?= =?utf-8?B?NjdCMDdhdzMrSGVmdzI5NmRoNnFYK0hyUU9EK3VyQU1tcnNjbFJUOHlMQ0w2?= =?utf-8?B?Z0NyRnpuUGVmODhuemxhTFBzckN6REhlcEFORmdFNE9aaFU0MFpWaFV3aGdR?= =?utf-8?B?L0FXcGpPWUxmeTl2aFdud0lEcEEzKzFnenBPbFM2VVVkK2N1MHpkbjF1Ykk2?= =?utf-8?B?cDBobyt4NGcrODNnOHdyVklHV3lIZHRBQ1M0RFRFek82TjVrZU53REJJeFZL?= =?utf-8?B?c0Ura2pJZ1QzVDVTazM4Q3RGSlp2K2NaUHorblN4REJFelA1MXhPR0N3K01a?= =?utf-8?B?SnF0MEF4NDgrcGxpRnBESFdiYWcwNjlsNWxTTFlkemFVZTRVWEpNQ3Fra0Ex?= =?utf-8?B?N3FQSHpRNG8ybG0wYUZFeXVWZTdqM2JseUFnclVxWm9HOVdzdHUxNmlneERL?= =?utf-8?B?cVJGZk9ocXF2UXdrMEhTb1hUTnRLWkVzanZpRGJvNCs2THN6UnpVRFBwSVg1?= =?utf-8?B?Vk5JaVdMcG9kdFFRQ2RnajlPNXV4U0t2V0lLRW9FNFR3UmFWdkw0UUFTc3oz?= =?utf-8?B?VStuanExWXc5ZUJSSHphTUY2QlVmKzgySm9jMmRuZVJuTTFMZll3VU84WHJj?= =?utf-8?B?aXhKc2VSRE9mSVRwSkFQbWE2T09zeDJVemQ2TG03RFlwcG42Rk9JRitNOEMx?= =?utf-8?B?RW5STTBkaEIyNFVaVnlXQjZRRG9xVkdEeVV3SndMRlEvVHNjZmtMbmYxOGFn?= =?utf-8?B?aGVaV1JQQUZYWUZ2SE0xZ00zMFJRNEk5Nm9EVFE5Q0hpVytMSUtwUEhmYnhS?= =?utf-8?B?Y21pQ0laNjVaQVpOR3AwVUl0QjEyYk1iOUc3VkVTRi9OcXJ6VitYTHJGaVIv?= =?utf-8?B?bFEwWVZpVzRhMTBYS3E0T095M1B5NTkzNFJsQXJ0WXVNYU9qVm1LZGZQWFEr?= =?utf-8?B?NVVxemFQaDRqWThuMmFyZzZSenhRL2VCZ0VlUXJoNnI4Yllrclpnc1JBZXZs?= =?utf-8?B?QlhpdWJ3MTBnTTE5SGlGMTh2UFlQNmkzSGVUTG51dzNqKzRGTWpNbXE5ZzVu?= =?utf-8?B?aDFZZG5BV0NUbG55ZWpFZzJXU0M1YkwvUVM2eW0rZlpTdnBDK0QrYmpCdnRU?= =?utf-8?B?cGVkaHJkYmhBQkxlc0VDNTE1R0FIdENlcTF5K0hTTFNIUXlUNnVCakV3NCsw?= =?utf-8?B?My9wRzJYUzUrUHY4ZGQ3Nk53dkdmT1BZVXJCb2ZCVzV6SnNEdEZUdDM2djBN?= =?utf-8?B?VTltWnp6M01JaXYrZG1oOWpNUHRFalFFMEJWZmNQS3BDTDVwRU1GeGJlbExG?= =?utf-8?B?U292dEhBb3ljb1laaDkyUHZRZGdwL1RrQUtBVkxNWnNsSGFWcnNOdUl4VitO?= =?utf-8?Q?tIyZESXcCw=3D?= X-Forefront-PRVS: 0361212EA8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39840400002)(39860400002)(39450400003)(39850400002)(39400400002)(39410400002)(5660300001)(50466002)(23676002)(230700001)(305945005)(7406005)(66066001)(81166006)(7736002)(478600001)(8676002)(2906002)(47776003)(7416002)(83506001)(97746001)(53416004)(6666003)(54356999)(2950100002)(42186005)(103116003)(4326008)(6116002)(6506006)(25786009)(55016002)(1076002)(50986999)(189998001)(3846002)(54906002)(86362001)(72206003)(9686003)(33646002)(53936002)(76176999)(38730400002)(110136004)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1141;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzIzOkJTc3QrY1plaEZMcnRUZFRPQmxFRUlocy84?= =?utf-8?B?U1ZTaUpsemtDWVV0VGx3c1Jkam9NL0FHZ3lOQmoydHl6V0VleUVUU0hJekZF?= =?utf-8?B?UVJ2VUFEb1JhOVIvWnVSNVltV0cyVit2TTJJVUpiSi9kQjJQYWR2WkVhZjNw?= =?utf-8?B?UFp2U2JmWTk1Uzl5TW1IQldsZnhyTEhkcmNPditZd083SWdIaUlLcU9SOFNF?= =?utf-8?B?NjVnSE9WWHFVMUp3UVZQMEtJRGRkMkRQQ1FlU0kwYlFsVG15WitvalRIU2hK?= =?utf-8?B?L3R2M09mbEh4eHFNUVVWNXJqTiswVGRXU3FYcTJBaUdPSmYvT2MxMWxwNStS?= =?utf-8?B?VEIzbUtiMGRFTFJ3aFZ3aDRFVzk0OFRpdTN6Y3hzVXc5aVFBVWVIMmk1QzhH?= =?utf-8?B?amx5MjgrWi9CcmFpK0V5SHFFMTZHYVgrUXN5R2l1S2x5MXF1ait1NDUveWpj?= =?utf-8?B?bUtkWVpPODRuNEZ1UWNXbWRDZ2xNdy96SlJlQ2Y0VmpzU0Z3ZXdZNndUbi9j?= =?utf-8?B?VlpOK2pSMytidCswRTJFbmdHZjZlaVhURmNNL1JoN05HWktIRVl2Ky9BRWhB?= =?utf-8?B?akM4TGJET1VqazBWYjMrUUNaVmVJNWN0bXJlTCsxKy9za0ZlZzNaTktsQmlY?= =?utf-8?B?M2QveHlxRklzOVgrYnhFUGJkdnVRRzhyUnNvNndMbVI3c3loSExWT2s5Zjlp?= =?utf-8?B?czQ4RUM4bTdweGszTUlsN2d2NSs4NFR3ekc0Nm1QeWl4R3h0eUJvcWovVVdW?= =?utf-8?B?RTU1K2hFTm9LRWluUjEzWlRoRnhha2c4aWFITFhxVGdsSnI0dyt4THV0d2t3?= =?utf-8?B?RzlJV1JGN2ptcWVwSTRzS1BRUlVjTGsxeG5iWHRKbTFxUEVzV2ZhdVRQSUkx?= =?utf-8?B?SDhVRXBwTml6eER5MW0wOG4xTTBnMTdjZUpETTlYd2dxT3FncTBMUWRXSDJm?= =?utf-8?B?RFdOWmNUbVhGT21yeG9XOE9MbWVhWms1SUtOVHZ2aVBNR25VZEdxVnR4cFdr?= =?utf-8?B?ZUxqRGY3TUhnZ29SQUZhZHhWeTd4c3hsM1hQY2VrVHlPQS95TGN6OFM1QmVJ?= =?utf-8?B?S3M1MFdPalVDamVmTTg3NHJKdGRNSHJseHN4RHF5M0FoM0xOWndMcHhXd1o0?= =?utf-8?B?YTNGYmtXMklNTk55VTFMdDF5NlhWQUJrNmp1dTUwUkc0ZjY2dGl6WWhVV2pU?= =?utf-8?B?ODVrTUk3MUFURjJhWmpkR0s5Y2VIZnVic0NRNitINEM1d3RiWVZpZzU1bTdB?= =?utf-8?B?RjBtTy9QWnQxR0VuTzNHWk5NMkwwV0pSWWFBdzZvL3JtZk1IeFBKaGNPaktJ?= =?utf-8?B?bVk4K2hiVUVibUUrTmFYQW9nVG9hYzFrS1p1S1Q1d1lCM3lkaEJoekhraWxE?= =?utf-8?B?bi9RMWJsZytHZFNraUFVcy95K202L1VMQTBvajFtS0N6b05jTHdUN3pyQmpV?= =?utf-8?B?NTcyOC96dnI2a0RyT2Y4VmJtR0pDOUgzOEtsZ2JTaGtBanlzeGQrQW9aVnR2?= =?utf-8?B?bG1PcXNLRGlKZ3BVS2N3Qnk5WTdwVkVpWDhyYTJCR2NRUWFjVC91WmxRWlVO?= =?utf-8?B?SEJYQis3TG1vZ2ZUM3N5bVJOMmJuekJVdWtzWmlCVVhaYTRwWi9DN0JXc1Bj?= =?utf-8?B?ZUwzWDI4V240Lzg4dWFMWlUwczFlQkxUeFllQkN1eThvN1RILy9PbzJ3PT0=?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzY6ajBSYWgzMEIvOWZkeHRhSlJqMmF0dVBwWkg0?= =?utf-8?B?cmJSTThpWEdENXBZVmhtcGRScnBBdmd6a3ZMOE9mNVZUVlE4a0ZuaC9VWmk3?= =?utf-8?B?ck9OTVlUMkNNTlRXL25QT2ZINFBHL29meUpQK3VQZWVSaTd0WkRDUDRNQTFt?= =?utf-8?B?RnBQbC9leU1WWFBnanFkekp0ZjBZMi85UGZBbVh6ajZ1aDBOZ3JmR0JwMTYw?= =?utf-8?B?eEUySkR6aUtOYWhYZ2RRWEtlamE2b1VmZDRucU1FdTV2dmRIZzJrQVh5N2tG?= =?utf-8?B?dzJRUlFLREhnRkU5cm9UVjh5UTh4bmVvRDFFZXJVdjZrZmVEU1M4OVJUdkZJ?= =?utf-8?B?elAwOE9PdnRIK2F2QnhpOWZUMVVSM0ZmeVJWZ0tqVE9JY2VnMjRWdnpwWEp5?= =?utf-8?B?MTZaUUFuTU1LVWlMMlRwUEh3WGt5VFVzRFJhMWRCRzFLWnM2ZzFBRUJvWmVZ?= =?utf-8?B?UVJSK1pSMmtOc0lWZy81dno3NlhjZDhNVy81RXVPNC9sc21pdWxjRkhhM2RX?= =?utf-8?B?MFdIUk0wWWwwRXJMNFk1bHVEWHdkc3R3My9xZWtBZEppSkZoNWE2TkFsK2tv?= =?utf-8?B?cWZFYk5tSDJYQmhUQjJ1elAzblZGMUdXVGwzS29EeVUrTDBFMFRaU1NYdmhk?= =?utf-8?B?SXBkRkpTaVQ1SDZVTnBjbUR5ekFuRC81cjl5YURiVFZBOFZPNDRFSkVzdzMw?= =?utf-8?B?aEpEd1p2a1RGdUEreTJ6eXpiY1RJUm04QzRwT25wUDVXaVJhTnh3Z3JXRHJo?= =?utf-8?B?Zm16anM2SXlpalFlS2E0ZkhwY2tOOU1RMlJaN3dsV0lEREFMK0dWNjFJcUNW?= =?utf-8?B?eHlRNjlkZmJBck5hQXNEenBXaFJGUFNnU1VyN2lXYUprZ0pGYWwxOGFFTDB0?= =?utf-8?B?T0h6eWFhTHgyWWt4bjQ4NTlKRGRQQ0c1V3hxazc5ZXZnNkhMTFIrL2hJZ2J2?= =?utf-8?B?M1ZNR01UNHVKM1FmTi9BbmtpZGs1OXM2SVpWQ3ptN3lKZ0NhWnBjS0gxeWww?= =?utf-8?B?MGdwQ1hjdmV6dVAweWhRcWc5cW4rN0psUGtvS2gwOFBCblhndFY4THJPbThL?= =?utf-8?B?NmUwUEF2dnlUVmpiZlQvK1pRV0srbVdLcysrbDFOYU9NTytoL1VnUzMwS2hm?= =?utf-8?B?ekVCSUlrWHBRRjA1M284ZGVYSkk1QmZwRzRzOXNJbXlSdUh4VlN3NHNJbkNY?= =?utf-8?B?V0lqZVliTlphYmRtbk1BUnV5K3hmaU94aGVYZ3BFMWxoTlBXNVRjcmxUSTR5?= =?utf-8?B?bWVxWWJXMERIKzZUeTUwRmZhZTg2NHJPZURlR0ZDVkY2RTBqcjlMWUc2ckJH?= =?utf-8?B?MlhHNVc1L01CaVdya1N3SFJKc1c5aXhldGtpeUN2MzJKSlNoZUxYVmJTOUIv?= =?utf-8?Q?XS/dqCS?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;5:jf03Q1ct5U5/iirK0HxKltrsSWcR/V074F8W5eVW3LEQXoaPxcn+561KIGuUYW5oC9KPlpoIIwz4eRRO+xQU7xlXp6B0V2SiVP0eZfmS0AHZCO+P6LtfPWXa/WOjTwUm0XL8HhBe788jhg5ygjIED79DZMYrCOSS+bp9UmKUYWjZEkpaYxGC6bqxpKjxBwAoOz9+ygIsUwv/bW+f/kHZwOLE9YXC8CEWzYSDYllv8iN+9efdxT9t4lzjTfQsb8JW419atGp+m8T3wambqffZRgttlCjNuO548niZCHtSM0FNQtE54VOctgWZZXVOdCl3C+BSNNW6OmLNmIlFqyrqc/cioDTc/DFGyDZj5m60rl1p8UpRggFoLRomAsTh9VZtWShxKEDyBFVFw9xFgB6V4fuQoI8pROez6AnqObGPF4+X26mekbPVdtoGf52DlLaIjO4UXNHB+xbnwhKzSsPc7lyWtlN2SitSc0BCe78CoP1ik6GRtuigv2LSSj5RD/5P;24:JuchuIWIb2GPC9osrKiGiSN0M1vr7FnqyeP/0MlHLJ4+jndM4k35gl9FUcTNSnK3mDujuDHmlycPkiNUUYZRnKoBH48Hb7pBizVyUk2F8j0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;7:Egz9NYa5MpdmFC/IKN5g8sveyI7jPaMwWOCf8aDtY2Metc1Zz4EQDMgnEK+8dKVuujY7v0xU08xdBy8thkIoqz32Rd23rN020zWMPAp0cyRhYmeeoz/zG0W+4hnqZc+DvCW+b3snYmNhff/9205ekbw8lH6zaQU3Ia5JV8PL/8GVz0oJTgfxE4TZMvcNTY3Se4FDIHfhkXWDHrPX5Jz4OHrOUoImtoU7YnTEmkgpcnDBo0WvxXrbIPdQLOlU2vdXZeEUO7hjj7oQdpLqvx/5zdmLTVaFDoB77/q+geqoeT/x3p+lP//LaKNQuDTvbsPMgx+Xe5pDIpc3WadbeycJcXq7ezDkZR9TLphkfQywu9R8fbv/GdLVKZSCe3IL/9wm8hHaStwZwzF4VBkE46ZqQCKbxzq+sCvwtcDeaxKbVuzq/+SVLOnwT3xNGa2nNr984M+v64dyTgnGzEBNgKpGhY85cYX26uMROQEtX+eNTUFNsWfbOrM4JZ69JMn4KqDoFAVQj6hEQF43uGctD4zIq9skqqtU/71okPGVALG3HBpcmAL6L7MPiKxDV39+AkkcFOCyu97axXg5h0TRJxLRJNhXJ0fQsG5gHoZxmsiP4phOT8BXHEHIB/vnUGHjeDSNLPShXJ5VQlZ/J2iPiV9hM831e9cysSV8K3nsB0MhSESHVmXbBdiTA68+xb6gm+YxThaI6LjbCl6p2BpAwi9DxFaZagacrhAjGnTpVxrRN8CdrK0ZVOKhPBY7r5WjUEE8d2OoTHJzKk/QnDsfv4vphVbJ1vKaPO5FKG6bLc0/dvw= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;20:k6TkmncP5mkaE9hrQixX5crifdjRPvT79+2Is87kYcmjESgiVK4TkYPkqOU5+3vVMU++P0UMmtbLh7PaPycS4bpGDuVTO1CTBxiYYklsZeMGH6AvKZ1Ao+TlFdIL/465aLZrhnbTov8c2AWN01Xe3EdiMzBpy7+7GEVuHyTaMP8MwLkVhG0C4czbwNC9qT57J8r/aOHQpurawRkMrm3/qRjbELmfgNyi7kLJ9Z2hUGnLfjGUW9rWvLthG3wVUxOi X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2017 13:41:49.1580 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1141 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6765 Lines: 246 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; }