From: Baoquan He <bhe@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, akpm@linux-foundation.org,
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, arnd@arndb.de, Baoquan He <bhe@redhat.com>
Subject: [PATCH v4 00/16] mm: ioremap: Convert architectures to take GENERIC_IOREMAP way
Date: Thu, 16 Feb 2023 20:34:03 +0800 [thread overview]
Message-ID: <20230216123419.461016-1-bhe@redhat.com> (raw)
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 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:
========
- 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:
=======
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
<asm/io.h> to avoid repeated definition in <asm-generic/io.h>.
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 (13):
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/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 | 17 +++++---
arch/parisc/mm/ioremap.c | 62 ++---------------------------
arch/powerpc/Kconfig | 1 +
arch/powerpc/include/asm/io.h | 8 ++--
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/xtensa/Kconfig | 1 +
arch/xtensa/include/asm/io.h | 32 ++++++---------
arch/xtensa/mm/ioremap.c | 58 +++++++--------------------
include/asm-generic/io.h | 31 +++------------
mm/ioremap.c | 41 +++++++++++++------
34 files changed, 214 insertions(+), 561 deletions(-)
delete mode 100644 arch/hexagon/mm/ioremap.c
--
2.34.1
next reply other threads:[~2023-02-16 12:34 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-16 12:34 Baoquan He [this message]
2023-02-16 12:34 ` [PATCH v4 01/16] hexagon: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-02-16 12:53 ` Arnd Bergmann
2023-02-16 14:47 ` Baoquan He
2023-02-16 14:51 ` Arnd Bergmann
2023-02-17 12:11 ` Baoquan He
2023-02-16 12:34 ` [PATCH v4 02/16] openrisc: mm: remove unneeded early ioremap code Baoquan He
2023-02-16 12:34 ` [PATCH v4 03/16] mm/ioremap: Define generic_ioremap_prot() and generic_iounmap() Baoquan He
2023-02-16 12:34 ` [PATCH v4 04/16] mm: ioremap: allow ARCH to have its own ioremap method definition Baoquan He
2023-02-16 12:41 ` Arnd Bergmann
2023-02-16 12:34 ` [PATCH v4 05/16] mm/ioremap: add slab availability checking in ioremap_prot Baoquan He
2023-02-16 12:34 ` [PATCH v4 06/16] arc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-02-16 12:34 ` [PATCH v4 07/16] ia64: " Baoquan He
2023-02-16 12:34 ` [PATCH v4 08/16] openrisc: " Baoquan He
2023-02-16 12:34 ` [PATCH v4 09/16] s390: " Baoquan He
2023-02-16 16:21 ` Niklas Schnelle
2023-02-21 11:48 ` Baoquan He
2023-02-21 12:26 ` Niklas Schnelle
2023-02-21 12:52 ` Baoquan He
2023-02-16 12:34 ` [PATCH v4 10/16] sh: " Baoquan He
2023-02-16 12:34 ` [PATCH v4 11/16] xtensa: " Baoquan He
2023-02-16 12:34 ` [PATCH v4 12/16] parisc: " Baoquan He
2023-02-16 13:50 ` Matthew Wilcox
2023-02-16 15:02 ` Baoquan He
2023-02-16 15:18 ` Arnd Bergmann
2023-02-17 13:31 ` Baoquan He
2023-02-17 13:46 ` Christophe Leroy
2023-02-17 14:21 ` Baoquan He
2023-02-17 14:33 ` Christophe Leroy
2023-02-17 14:35 ` Christophe Leroy
2023-02-21 11:43 ` Baoquan He
2023-02-22 8:35 ` Baoquan He
2023-02-16 12:34 ` [PATCH v4 13/16] mm/ioremap: Consider IOREMAP space in generic ioremap Baoquan He
2023-02-16 12:34 ` [PATCH v4 14/16] powerpc: mm: Convert to GENERIC_IOREMAP Baoquan He
2023-02-16 12:34 ` [PATCH v4 15/16] arm64 : mm: add wrapper function ioremap_prot() Baoquan He
2023-02-16 12:34 ` [PATCH v4 16/16] mm: ioremap: remove unneeded ioremap_allowed and iounmap_allowed Baoquan He
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230216123419.461016-1-bhe@redhat.com \
--to=bhe@redhat.com \
--cc=David.Laight@ACULAB.COM \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=christophe.leroy@csgroup.eu \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=schnelle@linux.ibm.com \
--cc=shorne@gmail.com \
--cc=wangkefeng.wang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).