From patchwork Mon May 15 09:08:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baoquan He X-Patchwork-Id: 13240979 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE34DC77B75 for ; Mon, 15 May 2023 09:09:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 68C30900003; Mon, 15 May 2023 05:09:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 63C67900002; Mon, 15 May 2023 05:09:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 504A8900003; Mon, 15 May 2023 05:09:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 40168900002 for ; Mon, 15 May 2023 05:09:06 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 100191C8BDC for ; Mon, 15 May 2023 09:09:06 +0000 (UTC) X-FDA: 80791915092.20.58B13A9 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf23.hostedemail.com (Postfix) with ESMTP id BD516140012 for ; Mon, 15 May 2023 09:09:03 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MWlzA41Q; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf23.hostedemail.com: domain of bhe@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684141744; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=6AFw5uMgxoqOZewZKceUjejYATe4XYr/MlAYVoQ4hFM=; b=IV5LSRd62JfGfiJZMtuR0fv66IlIBUHy2h72DlF9PYKYkLGXc8YSK1IoNmeGg08arnnDeY 1OGSTn7OWBcWz1TcRAr4aU0ifGKpd2Rw+RlMv035WaZ1z2emg8advP76TRBctn+GRUjK/L NzfHjcn6tmeevv0NWu7Jexw7H7spsz0= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MWlzA41Q; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf23.hostedemail.com: domain of bhe@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=bhe@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684141744; a=rsa-sha256; cv=none; b=PzHAsCRp3EKtWj6ctnr7TSxFrZi+6+kaSmj8ZcyvVSnjFTzXsluj6LRjRlnLx28HYLRimK S4DerQmBh+/Bj9j0xZKUxoHX98Q6JTYDWPz6DmKvndFNFZcOG1XX5nXesuTQLvflonRAZn o9mREv4tFOt1zd7WpMJW8I2vSfOYE9M= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1684141743; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6AFw5uMgxoqOZewZKceUjejYATe4XYr/MlAYVoQ4hFM=; b=MWlzA41QqPZQ5qWAJtEPFQvB6eAJQrRrsVxYn7nZC5pSo4yR2sipirH2XhrEvNhu/tgPZq qwzENJBBft/Zd4kyA1TyA7OfdHl/8pc7gZR+jLwTOFPTQIWupIXedohrmYdnGSMAMtkwAw V/Mdd1mGlh7/aXYLIaRoa72mD1LBLZs= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-515-f4Fr6p0AOImXQoBTiMrqMw-1; Mon, 15 May 2023 05:08:59 -0400 X-MC-Unique: f4Fr6p0AOImXQoBTiMrqMw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BAD06380671D; Mon, 15 May 2023 09:08:58 +0000 (UTC) Received: from MiWiFi-R3L-srv.redhat.com (ovpn-12-32.pek2.redhat.com [10.72.12.32]) by smtp.corp.redhat.com (Postfix) with ESMTP id A376E40C206F; Mon, 15 May 2023 09:08:51 +0000 (UTC) From: Baoquan He To: linux-kernel@vger.kernel.org Cc: linux-arch@vger.kernel.org, linux-mm@kvack.org, arnd@arndb.de, christophe.leroy@csgroup.eu, hch@infradead.org, agordeev@linux.ibm.com, wangkefeng.wang@huawei.com, schnelle@linux.ibm.com, David.Laight@ACULAB.COM, shorne@gmail.com, willy@infradead.org, deller@gmx.de, Baoquan He Subject: [PATCH v5 RESEND 00/17] mm: ioremap: Convert architectures to take GENERIC_IOREMAP way Date: Mon, 15 May 2023 17:08:31 +0800 Message-Id: <20230515090848.833045-1-bhe@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Stat-Signature: icxoq47o4i7m6h48d1hd96krtkj7oy5z X-Rspam-User: X-Rspamd-Queue-Id: BD516140012 X-Rspamd-Server: rspam07 X-HE-Tag: 1684141743-902868 X-HE-Meta: U2FsdGVkX18cKtoi5zn0ZPf8TYEh/21oG7MMphT3hN9Z+NsODqKAYDrgeztuYf8421BDT4b5Bam7u3dG9V9grY5LCWhYd//D+3PRIewneFgj06OywPGdcK7VnVP8+MVLmh4UeX44K8T8XWAy+GPb0L/bCQSeo60WHvt2oxzSKp4stoh1Zr6dkNxGub6qVcz2v0uL7EBlJMuAUIzYgRTQKir5aqLHZGP+qn8QppBtfsE8Z++sfaOGdM2mhpGlncGOXPJM9/5LMIQN/IrZkcTnVQxBQmQUznPZ7XqnI9Nle6wJ8jOWjnc7c/poIO2OAirpkVE/w2d2q8d5v7CsD8be8GG+728ei40c3xCUJfNtqsnJCeerS6Zb88/eWOT2bYiLkSbqx4pxvMdJS1ejVQMV4RAuzLFebKpyTEiHJmDpLex1vumgGkwZZakxvT3vXQSJBGnePk2wJlTZrfGpUOtwov7P8FEC4fka6pDmdxFeMRegqF1JlHSTuSrdoZI+e02bYAH7eniLSferRM0bB4jP2BZnPIPtLG6frNPnYLxUCMJurNJox2OOwhm5uzVHKPhybdo2GNTAUziwEH7hJeenEbfY+A8RFDeM9ZGX2bgpPEkLnDp3Bg02RLCnLQP+lQ8sVSc/P51pszlHgaRTm1qPng/7Gd+4WnfZGRfWYDrVKL3+UQ5yO41Ukm7O7CNGo9QBpULzRxJUy0jcyPFgAANLh0daXxiZE5G29IdPoY3hTH5qpAwWKE0uX4XOC3TJBeo5onPnSvkvZTEOy53Ozvfu8kv8N8V4qapl5NlSCaTcID+OtHtXAC39L1qOBYkpMWLCrSXKyNRXC/CSdh4hdVwlZ7IRGavO2u5qICECv0Wjtb+F1CM2287vDjiN5u0PTcSYbQMKtUOubyPFH2Zjt48PiBge2FU4PgLw5xrmLknkN3z2OBIlG3UTY/N+sjOGGmq1CW7kOlZH0nmdzO4K0eh ccUAbhK7 mQ7hZHjUNcpDZlitPgKTQZ/Py+IERUSEgD6+GdXTEzzVRI2WuDvG8zaAhUR//4Iqa7Mq3NUO+X2guQ9TCzyji5HRLK43gzQJ7cBrerj7V/Yf+SVMENHDpi0dC9TwuQewKzUqJ+InAETZDktFEXcrMiyufL/BILTgSNZdEn57+ffpELEjzU09m06C48M16qnbRp8WPM5qqNWkM0A7FFOsA/2AZ2ecZGgME2uQGBnVzuoCeENvft5clWg60zIkVv7NtC6OwhqUkHYl5do3HylTL5Wo1DkKyd9V8iB70RSJ1Ie3NGOG1KolJBO8zv7GusWmj1P4ii9ISqXjEJKqCZTBL70DCLJYwApawBLBLBcOKxjsZrVP3WWW77NfQBUqpIFx5+HZx7IO/kqDoisSGXYPw5akaCs6+ofy8sUwz X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: This resends v5 series based on the latest linus's master branch. There are conflicts: - on patch 1 ("asm-generic/iomap.h: remove ARCH_HAS_IOREMAP_xx macros") because of commit 7b76ab837522fd ("MIPS: Loongson64: Opt-out war_io_reorder_wmb"): in arch/mips/include/asm/io.h - on patch 11 ("sh: mm: Convert to GENERIC_IOREMAP") because of commit fcbfe8121a45 ("Kconfig: introduce HAS_IOPORT option and select it as necessary"): in arch/sh/Kconfig. Other than above two conflicts and resolving, no other change. I have tried cross compiling mips64 and superH specifically, both passed. And building and running on arm64 bare metal machine, passed too. Motivation and implementation: ============================== Currently, many architecutres have't taken the standard GENERIC_IOREMAP way to implement ioremap_prot(), iounmap(), and ioremap_xx(), but make these functions specifically under each arch's folder. Those cause many duplicated codes of ioremap() and iounmap(). In this patchset, firstly introduce generic_ioremap_prot() and generic_iounmap() to extract the generic codes for GENERIC_IOREMAP. By taking GENERIC_IOREMAP method, the generic generic_ioremap_prot(), generic_iounmap(), and their generic wrapper ioremap_prot(), ioremap() and iounmap() are all visible and available to arch. Arch needs to provide wrapper functions to override the generic version if there's arch specific handling in its corresponding ioremap_prot(), ioremap() or iounmap(). With these changes, duplicated ioremap/iounmap() code uder ARCH-es are removed, and the equivalent functioality is kept as before. Background info: ================ 1) The converting more architectures to take GENERIC_IOREMAP way is suggested by Christoph in below discussion: https://lore.kernel.org/all/Yp7h0Jv6vpgt6xdZ@infradead.org/T/#u 2) In the previous v1 to v3, it's basically further action after arm64 has converted to GENERIC_IOREMAP way in below patchset. It's done by adding hook ioremap_allowed() and iounmap_allowed() in ARCH to add ARCH specific handling the middle of ioremap_prot() and iounmap(). [PATCH v5 0/6] arm64: Cleanup ioremap() and support ioremap_prot() https://lore.kernel.org/all/20220607125027.44946-1-wangkefeng.wang@huawei.com/T/#u Later, during v3 reviewing, Christophe Leroy suggested to introduce generic_ioremap_prot() and generic_iounmap() to generic codes, and ARCH can provide wrapper function ioremap_prot(), ioremap() or iounmap() if needed. Christophe made a RFC patchset as below to specially demonstrate his idea. This is what v4 and now v5 is doing. [RFC PATCH 0/8] mm: ioremap: Convert architectures to take GENERIC_IOREMAP way https://lore.kernel.org/all/cover.1665568707.git.christophe.leroy@csgroup.eu/T/#u Testing: ======== Old v4 has done below test. In v5, patch 1 is newly added to remove ARCH_HAS_IOREMAP_xx, and patch 13 ("parisc: mm: Convert to GENERIC_IOREMAP") is impacted, so I only built related x86_64, m68K, mips64, ppc64le, parisc and all passed. ------Old v4 testing - It's running well on arm64, s390x, ppc64le with this patchset applied on the latest upstream kernel 6.2-rc8+. - Cross compiling passed on arc, ia64, parisc, sh, xtensa. - cross compiling is not tried on hexagon, openrisc and powerpc 32bit because: - Didn't find cross compiling tools for hexagon, ppc 32bit; - there's error with openrisc compiling, while I have no idea how to fix it. Please see below pasted log: --------------------------------------------------------------------- [root@intel-knightslanding-lb-02 linux]# make ARCH=openrisc defconfig *** Default configuration is based on 'or1ksim_defconfig' # # configuration written to .config # [root@intel-knightslanding-lb-02 linux]# make ARCH=openrisc -j320 CROSS_COMPILE=/usr/bin/openrisc-linux-gnu- SYNC include/config/auto.conf.cmd CC scripts/mod/empty.o ./scripts/check-local-export: /usr/bin/openrisc-linux-gnu-nm failed make[1]: *** [scripts/Makefile.build:250: scripts/mod/empty.o] Error 1 make[1]: *** Deleting file 'scripts/mod/empty.o' make: *** [Makefile:1275: prepare0] Error 2 ---------------------------------------------------------------------- History: ======= v4->v5: - Ard and Christophe suggested adding a preparation patch to remove ARCH_HAS_IOREMAP_xx macros, this is done in newly added patch 1. - In the current patch 13 ("parisc: mm: Convert to GENERIC_IOREMAP"), so we don't need to add ARCH_HAS_IOREMAP_WC. v3->v4: - Change to contain arch specific handling in wrapper function ioremap(), ioremap_prot() or iounmap() to replace the old hook ioremap|iounmap_allowed() hook way for each arch. - Add two patches to convert powerpc to GENERIC_IOREMAP. They are picked from above Christophe's RFC patchset, I made some changes to make them formal. v2->v3: - Rewrite log of all patches to add more details as Christoph suggested. - Merge the old patch 1 and 2 which adjusts return values and parameters of arch_ioremap() into one patch, namely the current patch 3. Christoph suggested this. - Change the return value of arch_iounmap() to bool type since we only do arch specific address filtering or address checking, bool value can reflect the checking better. This is pointed out by Niklas when he reviewed the s390 patch. - Put hexagon patch at the beginning of patchset since hexagon has the same ioremap() and iounmap() as standard ones, no arch_ioremap() and arch_iounmap() hooks need be introduced. So the later arch_ioremap and arch_iounmap() adjustment are not related in hexagon. Christophe suggested this. - Remove the early ioremap code from openrisc ioremap() firstly since openrisc doesn't have early ioremap handling in openrisc arch code. This simplifies the later converting to GENERIC_IOREMAP method. Christoph and Stafford suggersted this. - Fix compiling erorrs reported by lkp in parisc and sh patches. Adding macro defintions for those port|mem io functions in to avoid repeated definition in . v1->v2: - Rename io[re|un]map_allowed() to arch_io[re|un]map() and made some minor changes in patch 1~2 as per Alexander and Kefeng's suggestions. Accordingly, adjust patches~4~11 because of the renaming arch_io[re|un]map(). Baoquan He (14): asm-generic/iomap.h: remove ARCH_HAS_IOREMAP_xx macros hexagon: mm: Convert to GENERIC_IOREMAP openrisc: mm: remove unneeded early ioremap code mm: ioremap: allow ARCH to have its own ioremap method definition mm/ioremap: add slab availability checking in ioremap_prot arc: mm: Convert to GENERIC_IOREMAP ia64: mm: Convert to GENERIC_IOREMAP openrisc: mm: Convert to GENERIC_IOREMAP s390: mm: Convert to GENERIC_IOREMAP sh: mm: Convert to GENERIC_IOREMAP xtensa: mm: Convert to GENERIC_IOREMAP parisc: mm: Convert to GENERIC_IOREMAP arm64 : mm: add wrapper function ioremap_prot() mm: ioremap: remove unneeded ioremap_allowed and iounmap_allowed Christophe Leroy (3): mm/ioremap: Define generic_ioremap_prot() and generic_iounmap() mm/ioremap: Consider IOREMAP space in generic ioremap powerpc: mm: Convert to GENERIC_IOREMAP arch/arc/Kconfig | 1 + arch/arc/include/asm/io.h | 7 ++-- arch/arc/mm/ioremap.c | 49 ++-------------------- arch/arm64/include/asm/io.h | 3 +- arch/arm64/mm/ioremap.c | 10 +++-- arch/hexagon/Kconfig | 1 + arch/hexagon/include/asm/io.h | 9 +++- arch/hexagon/mm/ioremap.c | 44 ------------------- arch/ia64/Kconfig | 1 + arch/ia64/include/asm/io.h | 13 +++--- arch/ia64/mm/ioremap.c | 41 +++--------------- arch/loongarch/include/asm/io.h | 2 - arch/m68k/include/asm/io_mm.h | 2 - arch/m68k/include/asm/kmap.h | 2 - arch/mips/include/asm/io.h | 5 +-- arch/openrisc/Kconfig | 1 + arch/openrisc/include/asm/io.h | 11 +++-- arch/openrisc/mm/ioremap.c | 58 +------------------------ arch/parisc/Kconfig | 1 + arch/parisc/include/asm/io.h | 15 ++++--- arch/parisc/mm/ioremap.c | 62 ++------------------------- arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/io.h | 17 ++------ arch/powerpc/mm/ioremap.c | 26 +----------- arch/powerpc/mm/ioremap_32.c | 19 ++++----- arch/powerpc/mm/ioremap_64.c | 12 +----- arch/s390/Kconfig | 1 + arch/s390/include/asm/io.h | 21 ++++++---- arch/s390/pci/pci.c | 57 +++++-------------------- arch/sh/Kconfig | 1 + arch/sh/include/asm/io.h | 65 +++++++++++++++-------------- arch/sh/include/asm/io_noioport.h | 7 ++++ arch/sh/mm/ioremap.c | 65 +++++------------------------ arch/x86/include/asm/io.h | 5 --- arch/xtensa/Kconfig | 1 + arch/xtensa/include/asm/io.h | 32 ++++++-------- arch/xtensa/mm/ioremap.c | 58 +++++++------------------ drivers/net/ethernet/sfc/io.h | 2 +- drivers/net/ethernet/sfc/siena/io.h | 2 +- include/asm-generic/io.h | 31 +++----------- include/asm-generic/iomap.h | 6 +-- mm/ioremap.c | 41 ++++++++++++------ 42 files changed, 220 insertions(+), 588 deletions(-) delete mode 100644 arch/hexagon/mm/ioremap.c