Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932074AbdDRVRN (ORCPT ); Tue, 18 Apr 2017 17:17:13 -0400 Received: from mail-dm3nam03on0089.outbound.protection.outlook.com ([104.47.41.89]:58031 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752233AbdDRVRD (ORCPT ); Tue, 18 Apr 2017 17:17:03 -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 v5 03/32] x86, mpparse, x86/acpi, x86/PCI, SFI: Use memremap for RAM mappings To: , , , , , , , , , CC: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Larry Woodman , Brijesh Singh , Ingo Molnar , Borislav Petkov , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin , Alexander Potapenko , Dave Young , Thomas Gleixner , Dmitry Vyukov Date: Tue, 18 Apr 2017 16:16:49 -0500 Message-ID: <20170418211649.10190.81194.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170418211612.10190.82788.stgit@tlendack-t1.amdoffice.net> References: <20170418211612.10190.82788.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: MWHPR10CA0005.namprd10.prod.outlook.com (10.172.48.15) To CY4PR12MB1144.namprd12.prod.outlook.com (10.168.164.136) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8931a21c-46ca-4421-5707-08d486a03e03 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:CY4PR12MB1144; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1144;3:lTiHzcHaHZl4EnFuhK3YNUr/4RjjB28EFnbFabLo7wHzd8IzoImKwDm8qI/hVtYITOMlO6Bkme6ttLdbMI08QlqPorce0rLFsi2WO4eFpinW8IIifeJpNQzMRiHekOcKZiDebUhPhcY9hLrz9jfmbPV7DNKqH+0ct10/CwAz7JMRMXcCjwE26Xijn/mBDfFyfd4BVdZm6a/9cJoyXi4HP8pX/fceH9GFKq1YK1sFrUVFwM6Gp2s/f3QmsDQaiJoMzQCwTV5tgW265TzZ0ivFnVelGNmvNHG4z7RsFErDVbgQIo/8SaeIgx7VRzAIE6ntkPy8TxkmqrmQEm+OR40t0ngHmFD0ls15ieVAAVMPv1Q=;25:xxVXP/qdC0Vn4FR3I6haL/mbE4sBTmjztcZ528TK+4xUownCp83FBerm8l913Wmm9cCgkbY3oNLiQYZr3D/UM/RG8lOKWBph1+IEDHAUpe5MfqhpVctv94BIVQk9vhaXkUSZ6AObT8hydLCAnoDySrAMPq+JKSvMFQ/kKJSFQncOvwFwgVM1tIYM9g3WxsLjfxTcnRUOCvZ+BVYb2n/IbDJuWuWZbQ7aclCTDOP9SA+Rz7nEQvYTUYy97CSxHGs0i6yC9IXWbuP+KGgxE/aETgPXNksuYrnwkCtmq/OiJ8SFomSR8NzMQ4/yQgCtwySo24Br7LQCtG1N0/0K3gzkRlpfljY8FTdTFGOc/I63oaxy+MgUcl9Dri2Bs3i3+BQdP74oDNxtZzs2nyPtH3eTpgB4ofcTpx/Jhvnz2ag346k3tRnu3RFytd/N/wf8O3Jp0iROfJgqgjwfsj+mCsiYGg== X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1144;31:TGNBSdcdTr96PkuhAbtWrPP+pJjIP9VBXg5mbG8ZKR128oXa5qqbigzUEUEFPO2u+m4LBnR0c8KA00qABh1b/eR8Oa5VPlY0Xl4X5gbEPSwkZPzYjJOOUKKZVWJ/bOKozQ/Qp64DK1Ylvj7PEzEwsrIwlv8V9oiVlpS8RVXqGS5gFbfWPSsvK56vEQut50zpMf1e9luUK1wWFQHWJyu+iMKMq8zuiKI7rhuDHoGm9WY=;20:hN/6OYUiTagebHymEboBbx7aNFpdT5CpgQvolLuHqM3zhy483X6r/TmwNes88zdMSBhxAjEEAt9SOrdc/l1NxFKnmT//nfuSyz3trwl5NLv4sG64YNXh2u1SHZYcmWlZo8jvU/9SR2ZRz6gcL4gu3fuzXwDaMaRBJbC2nlyzQdU/bl4lqGTu/wBWLXRJ/Gwr3+SPUoe9ICpWednRQg0E4vQgddvJMAAz7YtV2DrI6bdJBCJwxCARgkU2vM9kQBYCyyBWLWDZ6EslaFraCBW6wcTrZbUt4dz1eY8tjbvilU8JuJdqCLzB3S0qRYNDTgSmrX3iMRa61UuB1UbLBonauJt2SWoUYAPgVWkOZdEfpgfIF4ql5s7LPukmtXKV9PoYv3S0qqUrc2DGqXR6xDkWh+0dAWan/2jFbr60sGjU4sU6mXVOfOz8ofv5k3NQqCNNwXVZcdj1R3pu6YcwwPSurWscfJC0A5BT55wAiwd/B28EMmFqO0lBwKe/XZ6Hd+rI X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(6072148);SRVR:CY4PR12MB1144;BCL:0;PCL:0;RULEID:;SRVR:CY4PR12MB1144; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1144;4:i6Wa6MxaKRSG90u1ujxgH+tA02XgUHXMvm74gWVnby+a9tMX7FwgXts04lr3LM9hewG5Z84/A/qXLAlt429FmZddiuN/YJQfyd1lTA1ZsO3BhNxXoBge31jMWsJRql0nWg2DvpQWWYMYmbynxE4Zi18Y7wAkrSlSmZ4n61QqXCYX9TirAOjdHBUIVWN3iZnHE7/RjsdFaJrzVZJm9AQK5Uos0/Fnx5zFRzInXMdcYCdK/qJFgjOWf07uWEgZtlNmV60yVyasem6ODT1dxlEeA3cWuprY8agClevPi2D5IBXbxouODSfehWF4DWn/v4oUn0EjicJjKc3CZLCMa0v7p/lq5fZCVbE2z8yjlcGJmH2/jlifMRGXPaaHq8xSyj2RbXC32RaGLVrCrW/BAg/F01D4zy6hT4QcDHx/CzeZCsUcFSy+MsEiXhoKQ5WIEghVhJmNqIfQecvAXIUFCOgbJrCTBtaAABbG5LmN72r12y5psPQOJSWQKjtBG4qBNb1fJMZkpACkn3hrHlmad90XEY7k3XUG4hT8Kpb3Yq2vJiDwc+nJw4wNxdfXZLcUe3YF74PAhOP3F4ObPnxjnBXYxzd4OVtNGxEPcWdA9zzpsh0lvzlz0MRatsX5J1dCAPl19fs23Vw7KiIErmwI4OYfuArcu1ao8sGKfOwHAph0zr21V1St3sLfPX38KbyJtkZHoSrTXRaC3i0MIkR8+vLLHlbdvyAIrjgnhi8AqHTogmvnAZ3KpgL7YTWGKVLTA/9mNPMyIYESOvgC9H15zbMQDw== X-Forefront-PRVS: 028166BF91 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39450400003)(39860400002)(39400400002)(39410400002)(39840400002)(39850400002)(50986999)(33646002)(4326008)(50466002)(76176999)(54356999)(38730400002)(42186005)(8676002)(47776003)(23676002)(81166006)(103116003)(53416004)(66066001)(83506001)(7416002)(2950100002)(25786009)(6666003)(7736002)(5660300001)(305945005)(2201001)(97746001)(1076002)(9686003)(55016002)(4001350100001)(7406005)(189998001)(6116002)(53936002)(54906002)(6506006)(86362001)(3846002)(230700001)(2906002)(921003)(71626007)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1144;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQ0OzIzOjVzS2s2SnhrYlNSZlNOMHMvYktqQVJudHJL?= =?utf-8?B?VVJWSEprV08xRWMza1poREJEMndsT0liWHNoTkhGOU5ScHdubnM0ejZHdlJj?= =?utf-8?B?dFQxVGNEUFpYTnFKU3RoQVptZmRpUmlzRnp5K2FqZHJsRDhwb1ZYd2hOTVU5?= =?utf-8?B?a2pBeVhoQkdudjQwdUNmU0svUTFuQWdsb2IvUFZhaDNkNmdVcVdxcE81Sm83?= =?utf-8?B?aTIrZStINFlOMm9HZnkvSjBaVDdmam5qUXFTbTErTmo2cGFreFE5SkhCQ1dV?= =?utf-8?B?SkhoTkRWRWYyVThMU3paTTJXdFRkNDBlUnBpU0RPUUxLb2RCOWtpYUJ0TzY0?= =?utf-8?B?Q0hibXdYcVBnNmszenRHUnR3dlB1RVNtUWpoMXl6NFdYaEdyS212bnlRQS9T?= =?utf-8?B?Z3orQ1B1cjJ2dnoxOXdXUWROeHROamJkRTlUeWRTRVB5dlVyU1YzbW9xQ1d6?= =?utf-8?B?cXdXVnEzTDlrN1BEMHk0Q2M1V0dhd3gzRnRYV1ZSYUh0dzEvTWx1bWpvNkt1?= =?utf-8?B?WlJmWS9QR3h4eHlFT0I5VkI4czZjRmdma29PNk5zZnBuUHBDcXR1ckk1bG9j?= =?utf-8?B?N09HdDI4Q0JmbG4zcGliRVNNdjZuVW5ldmY4c0FOQzN6MFZNZ2ZUT0x4RitN?= =?utf-8?B?NGptZ0NaTUloZFFxalJRNzlGTDJrejR5NHF2MSt6QURTaGRHMHBCNHM4NUp3?= =?utf-8?B?YnNacE1lTkdoOFlHYWxicVZoUnkvWWRDaWxnd3I2djM2Rzd2Mnl2WHA4c1Vw?= =?utf-8?B?bHRzOWdOcktiWlExMTRYSVlaRSt6WHl5ZUlNZ01Zd3B0Ym5JVlFpWklvaUV3?= =?utf-8?B?WFlCMXdBL3RKUVc3QTVFbVkzb3JPS3JiYjR1UlJZWWlVSk1TRDN5bXI5ZmRW?= =?utf-8?B?WFpTSysvNTJOTzJ0RWp0RUxxQWU4SE95b21PU3JDSVpnOWU5c0NzMWltU3hv?= =?utf-8?B?eUpuY3F0Tkw1RldRVmtMM1hMNUJkcjZ0TFU0Y2QvZHJDZGZMS3ZwTU5rRVg5?= =?utf-8?B?TUZNVVlmeWc5VDRkRlhQQ3JQMHUvY1JnRkpVN0tySTVMako1NXE4ck4yaFpm?= =?utf-8?B?aWpCTmNOY3hXVDVzQitwK0xmU3FZY2UvWU45UnJ2ZHZWcjNFNVo5WE92SXNk?= =?utf-8?B?K3d4bG9OQUttdnpBcjR0NGl4UFFxSzVxR0oyUkx5WlNYSGlxdC9PZC8xUWJW?= =?utf-8?B?S3hoMGxpMklqaGdwWTdqaDI3OFRzMVRnZkdDNWh4RUtlQmlucTF1WHdqb1hB?= =?utf-8?B?Y3V4Z0NnY3NNdThkOWYwRkdQYVdaTHhwL0lYSExYSVRyUkU0RmdJQVVUbnZt?= =?utf-8?B?SjZZelhuQkUvbk50Z3RDN1dlWG9OUWVDMENxcDZ6cnNXQlZGdkJBbnpleEVI?= =?utf-8?B?a1I4MFVhQ3pnZUx0RjRKVUhJa2t6STlxZEdUeEtxRjl0R2ZyaGJ2K3Q5RkRZ?= =?utf-8?B?clZiOVN6Q2xGREJzYmM0bDB5Z21LK2c5dElrYjVzaTltNzluMFNzU1YyM3dX?= =?utf-8?B?emQzanJLRmtJNlBrQ3ZEY3ZJT3p3bHR4RndBdmFCS2d4L2hydEYyVDhzdzdT?= =?utf-8?B?UnUxdVhsNEJ4NExSakpna0pselB4R0pCemI0QjFZeVhZRHVEQ0s3NWl2VmNo?= =?utf-8?B?OFk3aXVvV0REWnlpb012ZmppWjNXbWg5VHFvMWpSblpMYWtEYXQ4ZGRnPT0=?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1144;6:KOlK6e/edALF25O/XSXdMD2Gm2qosiZfqn+tJCkXcyqBQ5PkcHWICu/c5ruvS06KWHvt2ezB70cjQ0tp1NxBOu8BSYMuvy+Mqou9OXrYNw3JgKWLySV7MdkIHI69Bj8HapKSnrtMI10it7S+SknU/mpl9JEvBJPYF4m0rQRpJeUw4IZqZyy4Z9P2RTvji2BlAggKFp2iH2u0ASDW49b2XxDKW6wiHvBTK6TVjbc1YkuAPTmSHgB9XlfUOWdqDBWjymi6W7WCOZJP2OpJUaJXTsSVrA8/gFZ+RkzPHISrhfvTUWfypiR+of/Vo/v87juMskx72DrcUsuqN3HIarkwdryN0Niex/VDCLHu2Wvyl+6//3gr9eXtgGamoqP5ApwFpzekhKyOl5OTxrXCGPFLiHCDnhqpr846kP9G26j2S+6S9C+q+IWicf6gDEgVX/gU/uy+apQQcoMzsqGcpAfJSZtsUHNIKrOe/wLE6AIouz0=;5:N3mgNDtOZh5Ub18xtTu4tKKOjjSAQzKZL/Lp2m1kpRAsp4IysAbTesOANnsKGhwpLF39Uj/VOu+QoHYBcQGAulOeF0tyTC+DFcQydXiyymQX1Wbr+OCVe786HmHJkKOA44Op8CjyGuOtxp5MrASepA==;24:ZoQf4TKoD+NdCXIBDKBhpL9e/WZqchmhQkHr1SBNAfJC600SSB24M/AO702+1VZDk1ti5WL0RFsJlZGWOQsuAwTRvD1EYAoBJkFVdaiNa58= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1144;7:nGMudqRVHGXORIDIEWSHzDJ+nR29IrGj6Oojpf4Q807wBCQGSEpygfKiRIoNqNW0EYl4CAe6l5HHLP8r4+nGkuodLYLmJxHUTkxoKND5SIOhEWY8JQqcLvSFTsx2eXTZhjsrirwheqfMkr+OpWBD68OzwK1xflU70Bs8sVnmV2v/AKNyl9KtNB3UroDU9YofhQWUZ83i4tT/mrSZAIuriuiNwJ9ZmaLbcF06T5xL7gEtECB78WJ6HcPK/4/rapSWCGXRJ8nKQJrWSLT5OJyotaKrQSt/UbXCrnj8Esydr4nKVv3w922MyBg4X8y7gNbWOLV4QuD3CDg9zFvor4uQrw==;20:c+LG5tFPVpWoGA4fcoXiln1zKQo8egvZyepaFksPZWMLgL0/nRacFjVRdH/PqykdZuN6TdqYg8dPwVlQ51z2JTUWJ7xnNx24ttJ7JoJ5fRqGZyP6PS6j0RilLVyCQrjUu3Dy47Czlb0/2eJZhAJE+tI1asRwSIqJoOy7TPg/IAjlwEtZ0D4ZEe0fw5QIjbVXswCH0Ih244sxrCtCSqvlMq2T1MrhYUsfgR8FZjht/UxkDdCVPdFmoRcSGMjPNWxn X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2017 21:16:53.3776 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1144 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10146 Lines: 354 The ioremap() function is intended for mapping MMIO. For RAM, the memremap() function can be used. Convert calls from ioremap() to memremap() when re-mapping RAM. This will be used later by SME to control how the encryption mask is applied to memory mappings, with certain memory locations being mapped decrypted vs encrypted. Signed-off-by: Tom Lendacky --- arch/x86/kernel/acpi/boot.c | 6 +++--- arch/x86/kernel/kdebugfs.c | 34 +++++++++++----------------------- arch/x86/kernel/ksysfs.c | 28 ++++++++++++++-------------- arch/x86/kernel/mpparse.c | 10 +++++----- arch/x86/pci/common.c | 4 ++-- drivers/sfi/sfi_core.c | 22 +++++++++++----------- 6 files changed, 46 insertions(+), 58 deletions(-) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 6bb6806..850160a 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -115,7 +115,7 @@ #define ACPI_INVALID_GSI INT_MIN /* - * This is just a simple wrapper around early_ioremap(), + * This is just a simple wrapper around early_memremap(), * with sanity checks for phys == 0 and size == 0. */ char *__init __acpi_map_table(unsigned long phys, unsigned long size) @@ -124,7 +124,7 @@ char *__init __acpi_map_table(unsigned long phys, unsigned long size) if (!phys || !size) return NULL; - return early_ioremap(phys, size); + return early_memremap(phys, size); } void __init __acpi_unmap_table(char *map, unsigned long size) @@ -132,7 +132,7 @@ void __init __acpi_unmap_table(char *map, unsigned long size) if (!map || !size) return; - early_iounmap(map, size); + early_memunmap(map, size); } #ifdef CONFIG_X86_LOCAL_APIC diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c index 38b6458..fd6f8fb 100644 --- a/arch/x86/kernel/kdebugfs.c +++ b/arch/x86/kernel/kdebugfs.c @@ -33,7 +33,6 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf, struct setup_data_node *node = file->private_data; unsigned long remain; loff_t pos = *ppos; - struct page *pg; void *p; u64 pa; @@ -47,18 +46,13 @@ static ssize_t setup_data_read(struct file *file, char __user *user_buf, count = node->len - pos; pa = node->paddr + sizeof(struct setup_data) + pos; - pg = pfn_to_page((pa + count - 1) >> PAGE_SHIFT); - if (PageHighMem(pg)) { - p = ioremap_cache(pa, count); - if (!p) - return -ENXIO; - } else - p = __va(pa); + p = memremap(pa, count, MEMREMAP_WB); + if (!p) + return -ENOMEM; remain = copy_to_user(user_buf, p, count); - if (PageHighMem(pg)) - iounmap(p); + memunmap(p); if (remain) return -EFAULT; @@ -109,7 +103,6 @@ static int __init create_setup_data_nodes(struct dentry *parent) struct setup_data *data; int error; struct dentry *d; - struct page *pg; u64 pa_data; int no = 0; @@ -126,16 +119,12 @@ static int __init create_setup_data_nodes(struct dentry *parent) goto err_dir; } - pg = pfn_to_page((pa_data+sizeof(*data)-1) >> PAGE_SHIFT); - if (PageHighMem(pg)) { - data = ioremap_cache(pa_data, sizeof(*data)); - if (!data) { - kfree(node); - error = -ENXIO; - goto err_dir; - } - } else - data = __va(pa_data); + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); + if (!data) { + kfree(node); + error = -ENOMEM; + goto err_dir; + } node->paddr = pa_data; node->type = data->type; @@ -143,8 +132,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) error = create_setup_data_node(d, no, node); pa_data = data->next; - if (PageHighMem(pg)) - iounmap(data); + memunmap(data); if (error) goto err_dir; no++; diff --git a/arch/x86/kernel/ksysfs.c b/arch/x86/kernel/ksysfs.c index 4afc67f..ee51db9 100644 --- a/arch/x86/kernel/ksysfs.c +++ b/arch/x86/kernel/ksysfs.c @@ -16,8 +16,8 @@ #include #include #include +#include -#include #include static ssize_t version_show(struct kobject *kobj, @@ -79,12 +79,12 @@ static int get_setup_data_paddr(int nr, u64 *paddr) *paddr = pa_data; return 0; } - data = ioremap_cache(pa_data, sizeof(*data)); + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM; pa_data = data->next; - iounmap(data); + memunmap(data); i++; } return -EINVAL; @@ -97,17 +97,17 @@ static int __init get_setup_data_size(int nr, size_t *size) u64 pa_data = boot_params.hdr.setup_data; while (pa_data) { - data = ioremap_cache(pa_data, sizeof(*data)); + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM; if (nr == i) { *size = data->len; - iounmap(data); + memunmap(data); return 0; } pa_data = data->next; - iounmap(data); + memunmap(data); i++; } return -EINVAL; @@ -127,12 +127,12 @@ static ssize_t type_show(struct kobject *kobj, ret = get_setup_data_paddr(nr, &paddr); if (ret) return ret; - data = ioremap_cache(paddr, sizeof(*data)); + data = memremap(paddr, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM; ret = sprintf(buf, "0x%x\n", data->type); - iounmap(data); + memunmap(data); return ret; } @@ -154,7 +154,7 @@ static ssize_t setup_data_data_read(struct file *fp, ret = get_setup_data_paddr(nr, &paddr); if (ret) return ret; - data = ioremap_cache(paddr, sizeof(*data)); + data = memremap(paddr, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM; @@ -170,15 +170,15 @@ static ssize_t setup_data_data_read(struct file *fp, goto out; ret = count; - p = ioremap_cache(paddr + sizeof(*data), data->len); + p = memremap(paddr + sizeof(*data), data->len, MEMREMAP_WB); if (!p) { ret = -ENOMEM; goto out; } memcpy(buf, p + off, count); - iounmap(p); + memunmap(p); out: - iounmap(data); + memunmap(data); return ret; } @@ -250,13 +250,13 @@ static int __init get_setup_data_total_num(u64 pa_data, int *nr) *nr = 0; while (pa_data) { *nr += 1; - data = ioremap_cache(pa_data, sizeof(*data)); + data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); if (!data) { ret = -ENOMEM; goto out; } pa_data = data->next; - iounmap(data); + memunmap(data); } out: diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 0d904d7..fd37f39 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c @@ -436,9 +436,9 @@ static unsigned long __init get_mpc_size(unsigned long physptr) struct mpc_table *mpc; unsigned long size; - mpc = early_ioremap(physptr, PAGE_SIZE); + mpc = early_memremap(physptr, PAGE_SIZE); size = mpc->length; - early_iounmap(mpc, PAGE_SIZE); + early_memunmap(mpc, PAGE_SIZE); apic_printk(APIC_VERBOSE, " mpc: %lx-%lx\n", physptr, physptr + size); return size; @@ -450,7 +450,7 @@ static int __init check_physptr(struct mpf_intel *mpf, unsigned int early) unsigned long size; size = get_mpc_size(mpf->physptr); - mpc = early_ioremap(mpf->physptr, size); + mpc = early_memremap(mpf->physptr, size); /* * Read the physical hardware table. Anything here will * override the defaults. @@ -461,10 +461,10 @@ static int __init check_physptr(struct mpf_intel *mpf, unsigned int early) #endif pr_err("BIOS bug, MP table errors detected!...\n"); pr_cont("... disabling SMP support. (tell your hw vendor)\n"); - early_iounmap(mpc, size); + early_memunmap(mpc, size); return -1; } - early_iounmap(mpc, size); + early_memunmap(mpc, size); if (early) return -1; diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 190e718..08cf71c 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c @@ -691,7 +691,7 @@ int pcibios_add_device(struct pci_dev *dev) pa_data = boot_params.hdr.setup_data; while (pa_data) { - data = ioremap(pa_data, sizeof(*rom)); + data = memremap(pa_data, sizeof(*rom), MEMREMAP_WB); if (!data) return -ENOMEM; @@ -710,7 +710,7 @@ int pcibios_add_device(struct pci_dev *dev) } } pa_data = data->next; - iounmap(data); + memunmap(data); } set_dma_domain_ops(dev); set_dev_domain_options(dev); diff --git a/drivers/sfi/sfi_core.c b/drivers/sfi/sfi_core.c index 296db7a..d5ce534 100644 --- a/drivers/sfi/sfi_core.c +++ b/drivers/sfi/sfi_core.c @@ -86,13 +86,13 @@ /* * FW creates and saves the SFI tables in memory. When these tables get * used, they may need to be mapped to virtual address space, and the mapping - * can happen before or after the ioremap() is ready, so a flag is needed + * can happen before or after the memremap() is ready, so a flag is needed * to indicating this */ -static u32 sfi_use_ioremap __read_mostly; +static u32 sfi_use_memremap __read_mostly; /* - * sfi_un/map_memory calls early_ioremap/iounmap which is a __init function + * sfi_un/map_memory calls early_memremap/memunmap which is a __init function * and introduces section mismatch. So use __ref to make it calm. */ static void __iomem * __ref sfi_map_memory(u64 phys, u32 size) @@ -100,10 +100,10 @@ static void __iomem * __ref sfi_map_memory(u64 phys, u32 size) if (!phys || !size) return NULL; - if (sfi_use_ioremap) - return ioremap_cache(phys, size); + if (sfi_use_memremap) + return memremap(phys, size, MEMREMAP_WB); else - return early_ioremap(phys, size); + return early_memremap(phys, size); } static void __ref sfi_unmap_memory(void __iomem *virt, u32 size) @@ -111,10 +111,10 @@ static void __ref sfi_unmap_memory(void __iomem *virt, u32 size) if (!virt || !size) return; - if (sfi_use_ioremap) - iounmap(virt); + if (sfi_use_memremap) + memunmap(virt); else - early_iounmap(virt, size); + early_memunmap(virt, size); } static void sfi_print_table_header(unsigned long long pa, @@ -507,8 +507,8 @@ void __init sfi_init_late(void) length = syst_va->header.len; sfi_unmap_memory(syst_va, sizeof(struct sfi_table_simple)); - /* Use ioremap now after it is ready */ - sfi_use_ioremap = 1; + /* Use memremap now after it is ready */ + sfi_use_memremap = 1; syst_va = sfi_map_memory(syst_pa, length); sfi_acpi_init();