From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756511AbdDRVPB (ORCPT ); Tue, 18 Apr 2017 17:15:01 -0400 Received: from mail-dm3nam03on0088.outbound.protection.outlook.com ([104.47.41.88]:8349 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753719AbdDRVOh (ORCPT ); Tue, 18 Apr 2017 17:14:37 -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:14:31 -0500 Message-ID: <20170418211431.9689.54269.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170418211400.9689.10175.stgit@tlendack-t1.amdoffice.net> References: <20170418211400.9689.10175.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: DM5PR15CA0005.namprd15.prod.outlook.com (10.173.207.143) To CY4PR12MB1143.namprd12.prod.outlook.com (10.168.164.135) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eb8d9fb2-51a2-413c-054f-08d4869fea0b X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:CY4PR12MB1143; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;3:UPZnuJIiaWKRv2KT0DdDd2Jh77P/g8cWq4noqpPIOr4TfcIKiV3j7UV6EMYY2BCEtt0pCCZkbsL33XjPFKsK917oCFFEB1ekfDYaDsKCyAtLqhnlYSS5zl/KRn1Oi6z4IiWo7KEZz0PEFkmfc0sorZPhytdj2TZR+B8vk9pLrEv4qGLJYM4H98VwtlHUwoR0CLIDBl13UFYgnNPzs7M+/cWN5WVilyR0u0W3XL+TuQta0+PA0GT2ziv5zrCg4lNVyPnGJye/0L9s7VaMFusaIdSs+slXsAMrOywJ6k5A6hDiEWsueBftBEd4mShYKR8Hu6SrrZ0tg73cAz7ek7tp1R7u2ULuJjgpEM133fnVMdc=;25:mBUlX8EcwHwJdqJzjw408tjt7RQZdlEQrvvfvKvsY2q7kSihQrVE+DOQoF8dK4vfgK0UhfyTgtEzzvxF7Nr/B6q3tKaojvQeO/ADqZtQba6To18LX2yHrqdlqQP+PETY2eYSY9+ORQnK8mlaGoX5mbpYjWSJtIDSSoIcvqXJJXys+hM3NVvWhsjCvyBNzX+OcRfAQByfVt2wulhfp6DupcdDMOPWqoXUMGbiKMrfCDNht41BSMbJVdhUuYKu6g+k58244JGprGOtnmyAarsk4pbIxNTH1/T6N3YN8o6y0TkP+7Bbb5urpajkynnDlvpnhSIhECYiUl1u4t714mN8kiKFxlJcet41eh5zrUkU9gqAUme6CpxvNMbux8s0d8z7iUyPeoyBNE1lymLp6rNTfVv+ans6ilzDx9N5qbYlhREkvH9bwYlGehxDuF8cx9WMbBkpEx2UqBg6opx971kDZQ== X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;31:eDoE/OqV2sgwcfZyZqX4sus5OFWzJOo68x7SwK4CmD261+cd4KKq2DdTdYiDWsRFP+pBf/ThF8si3JqhBFrqQbgFLdyy62zIJ5G2LhFgDyaja6Lt5VTmj0B4OUmN4e+oscUt2GOWp9h2rtSYrssS+0/0cBbNR9bn4Ti7Kbdkk8uTjP02noWNoVkxK26GyjPLQx52w56owoaCDZ76HS3CKyWqdwMGJnGobxL+ubgDf3o=;20:DBL3i3JsyrnIn7KxlTraRqeDFy+Kl40qWHWnvOn5z28NDI3o8/6iyvn0Mq74kLvHsZqfGjM1VWfujawJ63PGlNb2uJx8fFJECFTagn1g6x6cvmdodsNlJjifqm9SBxnrRg6y07XLC6VSRrPUz4GLrWJBdSOAoXAvhAiRTu1qcEhl8kjmpFBCOTMmEBCu7GAPMUQ2jagI7WCpSGRCjrJ8dpUxUXwI3srSoC2ViPQKlxO2ORsU0T4bEt1Jy2ZZF3lL7v6rnXVhjQAy7V02yhkHsCEuTHAKRrrEh10Mut7CfON4dOWww/nMRlxMgssEpBnbvX9mU07OLwth1m3LfJ0c2KuyObBfhRk3qjm3F5NCiTuEWfDuL6gok17VMdPwm0ygl2MrUL3A9USpFGRcqv3E9hvTkHCsX2/RbZSaVlqomOfmSBDPBrSgDtBSSew9xgFMcIfFud0OtxX9l4KElMC3ilTqrY8OuLGA5es9c81KnHNrpz7COfvWcVIXrtjRPb0g 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)(20161123562025)(20161123564025)(20161123560025)(6072148);SRVR:CY4PR12MB1143;BCL:0;PCL:0;RULEID:;SRVR:CY4PR12MB1143; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;4:4L4OeJQefpNhCrkgKOxNBlo8j4Ax/hv/QDr4zgT7yOSipfBWBK9JYmc5nrtsfOviixBwDQanj8oynhRff+cRgc/fdeY8E1cYgOo5Sz17PDhLECR8BSWwbLWCrkKuV/kXS3xfZSmBMikn070gS50yWAfenIve6p6y96Xd3XriCCy7b3/bo2XfQ+OxSj1hGtavseae/1uBL9OINAaTVCwmMqwDOksVmRXa5y2MDw/LNGD2FBRyFzL4B0ph3nZvL+Bk0vz8BSDYmiaayqTKx6DsdK87K/B76Zk/n28co6O7Ns4JhWwBlY818iWj+hbyBrbo5LUrHC9w+bh+ym8+Z4r5buRrQfHzxijulpnh0tGP0NBCxPT70Dm+mcQRvJ2ZLJyXMahndX/xyruu/PkVBPE4j5N+T6jl4LJk3mzhZ7k/elTnpIcral5hgw6VInwqi4tm40Tyi04SiJJHe8+AN91HtROZ0sdIKSMx4ja4yq7+gpbgU5+TR7PsozlZzF8T+dOBH8NwscZ3x+W4XEH7sAH6l6GpsBHSVoMPcTz9kagFsgDlWWoSwk0PghAGK2YSLpFwWatq1rBWlmR6Nex71Rs0BHCtURcetZQk0RcwQsPAFFoLcQz3We1KwSXT74PUnhyQvXWSiNUup4wvmU34Z6SNx1o3Fy35mr31TgPAp0z4QCL4UW83y6YmM7P1L/xhM6pbrVEA6/eSpHoolJPDWAn9TnwD+/pma5zCHb1ISYAcnmHpriSBxcrnf0Z2G7xGZvTSWiAbMbiLtfQm3pJD20xhDw== X-Forefront-PRVS: 028166BF91 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(979002)(6009001)(39860400002)(39850400002)(39410400002)(39400400002)(39840400002)(39450400003)(86362001)(38730400002)(53936002)(54906002)(97746001)(305945005)(7406005)(5660300001)(42186005)(9686003)(47776003)(23676002)(55016002)(25786009)(7416002)(76176999)(50986999)(7736002)(66066001)(6506006)(54356999)(53416004)(8676002)(4001350100001)(83506001)(2906002)(189998001)(33646002)(81166006)(81156014)(103116003)(2201001)(50466002)(1076002)(2950100002)(4326008)(6116002)(230700001)(3846002)(69596002)(921003)(71626007)(1121003)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1143;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQzOzIzOjdzSS9uYWlPNVZaY0psa0hpVDdBYVA4d1pQ?= =?utf-8?B?TzIvczJCeCtDNDUyb0NmN0J1N2c1TnhhMEZaZnVORUFGR0NkdTNTNDR2YnJ0?= =?utf-8?B?MmxnR1h1aHo5eFR4azhPVmhKcHMrMzlkYUIxdjF3Ty9PZzhseG8rY3pXZnJ6?= =?utf-8?B?SUMxWDA5aHBmbTgwM0t3c0Q2cWRyQ3VaWDhYako5QXRzUFpaNW9XV1d4em1N?= =?utf-8?B?d2R6ZE5CeTRRWTZ4ZFJLMG9ENmFQNHFNZjQxWjRLS0dJamxWYWdhcW0wUnp1?= =?utf-8?B?TTFENy9YVGJPSjRTLytXZDA4anJJNFpYeUtmZWtabWVGejh0S2VwU284cHVW?= =?utf-8?B?TTc2aVdIbVl4SjlaZGNOY29CVHBodlo5SldubHpTSHdPb1FLUE9ZeGk0ejVJ?= =?utf-8?B?YmxCaDZnbHI1RE44RXV0VFNYNDc3RDZkcW9Denh3RW5ucmEzY203WFNEWHVp?= =?utf-8?B?ZVlWTUtWWkFPaHVNQzRoZ3Q2OFl4Sk9kRlBNM3FzZS9vVzZ4TnQ3M0prd1ov?= =?utf-8?B?WlI0aWhsWWg3UzV4VXUvZ1J2ZXFPSjk1TDJJOGlNSU1QNDVrR3FOOXJyRWtB?= =?utf-8?B?dzRhWlJTU2J5bFp0SEZPVTZEb0lYUTNOZ05PblBCSkIxWnFPaVB4MjVyUGRv?= =?utf-8?B?TEI4TXMzc21ZdkxRc3BwMXIxTllveHE0ZzZqZHJGSG11SHhFN1RHcCtlS2dV?= =?utf-8?B?Ny9YbGRDMS8rT2xkN0xPUHFQclIvTVRUWjFBcGRSTjg1K1dybFVnWkVnWU52?= =?utf-8?B?dzRyd0VXT3pQREs2TWQ0dyt3N1poVnFMVjk2RW9oOEtxOUlQZWRSY1hrb2Na?= =?utf-8?B?VC9mdGlLYS9PWFgrRTA2K0VrWkk5UFhrSXdyeDk4RXZxdytncjJneEpTalVP?= =?utf-8?B?SDVTTHlCMVJLaFUyZVZ2RGVudFF1Nzg5QzNuWW94TW12NUZYKzI1STE1TEhK?= =?utf-8?B?MGE1Y21CSGR3L1ZaVDgxVXFwNmgyL2tYanh0MGhlOUJkRkg5L2R1U1NwSnVw?= =?utf-8?B?bGFPZmUxQ1hrTEJRTWM0bnRYTXpXZVMyV1RwYkc0REdoRnZqSG5NYW1CVWVS?= =?utf-8?B?bUpNcjVYZS9EaVgxdHZDNTEwby9UN1E5MG9yb05iN0x1TlhubEczdko1UG1R?= =?utf-8?B?K3l4WEpPK05Ec1lFNWliMzJGampXcHc0NnJQVHNmSDVocUo4L1VGWDQ5b0cr?= =?utf-8?B?OEpsb3Mvays0WEttZE1oUURBeDlSd3doTUNLcTdubHg0SFdoQTE3OWxzTHlE?= =?utf-8?B?NVJyVHZLWUlyb3VzYlZlSmt3OUxzZ2dyNWhWMWdsVDQrTHhsVE5ZaDdKU0ZI?= =?utf-8?B?K01iZVVZVXMvYVBDWTJFVk9lVFVIbEU4c1lyQ1hsRVhjRjZodG9zd0UwaFhj?= =?utf-8?B?ZnM3Y0dGUnNDMnZzQVFGVTh3Yy92RndVQzJRR3k4RVZENkZvc0VBaE9lUWIw?= =?utf-8?B?QWdZemp1Znp6QnNTbEpRcis0NWxtUmVBdzZzMXJibDA5L0JxZjZTWnF1S1Bz?= =?utf-8?B?RjFwYkpHUWwrV29WeThydUd1cG1wemJPSHA5VXA5U2Rya2F3eHAzdTErMzk3?= =?utf-8?B?RUVHc0tHN0xQRDdWTEVTaVNaU3pHNjhKL3hoVGZ0SEpyU05LTlAvaGx1VjBt?= =?utf-8?B?aUpVNm9saXk1RC9YWTI5NHFIN2E1NzRLV0JjTmcyL0ZVbUF6cDQ5cGhNREtU?= =?utf-8?B?LzEranhsRXRvNW8vVi96UUp5OEZERFZuUzljZlZncEp5WVFSRWtBaERGVTRh?= =?utf-8?B?ZWR4ZGEwNHhDOHB1RGY3N2w2VXlkRFRVK0xBQ0NRMjFrRUxKZzZ0QWZsczEv?= =?utf-8?B?OENZMDhrVDduS2lOVjl6SkFBN29ReDlPOTU3ZE16b3FnYXc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;6:kz/GKkWWWy/bIM7o2ILo+s6qjfC4RxtNEbZh9oy1UPNIkFw+MggKAVjzdnI62B1Au5OQkOXM55uiNII+0wMAYO4kOzVlTcYm+j8NFhmyUKuK7WfSScI7peP84GN7sVQvmcUjouxM4JK5mjVJ0vbaH9ozznqkxPGf3KtsTnWvKwVAyIVx0PmcjXdKQPOkfuTeBJIOsxwV0eX5CVr0x5EHTbG0sSCCuyPJH5TwcscZ1OU6vzn57CvMIccrXYYLtPu1HaqNLMiB7IUCEcXW7PdrB0oB2fsZZu5Cxr/u6QOsEYWWB8fKrjDT3FUP87sHjMlLowjhOcckpf0xClN0olVRewDc59w3BNIEABMjLlI3EHykzFlQq6F+fuVXguwu1qyZJX9e8WPgHVmdHaiLlRAmSbC6TY9z96iud4WiZhA7J67udtfrM8NrqFUkOeXFzhKq3jPT3zN6cn7V7VMYxCxrrAIP/02eVEQNb0Vtl49sk0o=;5:udg0/x+va96+SNtPUsmGBFx0/7i5jUEZ8/x5fx9LLMVCJOlP1aEZUeLMphY7h8+b9Gk59xQYoF5iQnYps0/BXIDSvITTUJQlFwQ5MA29A4YfH0lOxPYawsBCQSznD2gXEOhXHAgOlX0ZzJen6ZArHA==;24:ef98Lfr671Rj6p79RpSJPRVpijrzNwql58O/tZZBLwFo4Nc6to6BEvkRUIgUEo6HypzBbKXgvnRaeH3+eZygv0uiKaLsHNhen4mcAWzEBmg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1143;7:DYiZ7xjAOSbRSG4uTq84Fr3Cgo90YwLaKjbfFwDCLLB8mokIjhwkCDyconU2/dkq+/OHlMaWOtZFF+9/TwAbQZVtbyNNiLPM29pqOYREh/e3c3RwfWPOtYeif8qXaRwAvf4xKIrnqoq55rzEBqkotHAwdYY3CNRuIMxTJD8oUDH+OoQnhdg2miJUl3+8ECSSFrnTqgFRPFDs/mwUy56vW9Z9phzHT66sYtW4YAFvZTq9mLB4BAYcgUbxjzMM+7uK4/XjiLGpqCFL0K4jk5MV7UJEhMPxqiu9NiQod299sPnPASTHy+aCftgUU1Vi+ci2gsCDONX/HPm2TSmlE6ZpKA==;20:2yxN4ZQ39pVYfZmsalayvUv5kWq8Jy/QqCyvVknTfz6vK9tbSCSpibYUB1J6aQSVyQL9CbWEE2WoNyNjt7sBvR7KVaaC2oz8XDyrNShbKkI0qlKk1DzKI/h2WcTzknnqS1FU7e3f1N/74lUP2MEiMtgI2OYkT1jf0FiW1EH0bIrjM++GQZHkxiA2QGGroIUsjcrogMQZ/1KqZ0Y57xp4QJgDAq6c0N7lIBQIEz6iceJpsqKCeKCvqk+kim/hXkzp X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2017 21:14:33.4692 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1143 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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();