[PATCH v8 00/14] Consolidate IO memcpy functions
From: Julian Vetter
Date: Tue Oct 08 2024 - 04:31:07 EST
New patch set with all remarks taken into account.
Thank you Richard and David. I have masked the int with 0xff for alpha
and parisc, and I have replaced the shift operation by the
multiplication as you proposed.
Thank you Johannes for your remarks on the UM arch. Finally, I have
created an UM allyesconfig. I have manually disabled HAS_IOMEM and
INDIRECT_IOMEM. This way I was able to identify the drivers which don't
guard with 'depends on HAS_IOMEM || INDIRECT_IOMEM'. It was only a small
number. I changed them and added the patches to this series (see patch
12 to 14).
Thank you Niklas for your feedback. Unfortunately I was not able to
simply change the prototypes of the zpci_memcpy functions because they
return an int to indicate whether the pci transaction was successful. At
the same time they are used as generic memcpy IO functions in the driver
code. To resolve this, I implemented three wrapper functions and added
defines to overwrite the default. So, on s390 we always use the fast
zpci operations and don't fall back to the generic ones.
Signed-off-by: Julian Vetter <jvetter@xxxxxxxxxxxxx>
---
Changes for v8:
- Dropped the arch/um patch that adds dummy implementations for IO
memcpy functions
- Added 3 new patches that fix the dependency problem for UM (added
dependencies on HAS_IOMEM || INDIRECT_IOMEM)
- Added new patch for s390 to internally call the zpci_memcpy functions
and not the generic ones from libs/iomap_copy.c
- Addressed reviewer comments and replaced 2 or 3 shifts by
'qc *= ~0UL / 0xff;'
- Addressed reviewer comments on pasrisc (masking the int value)
- Addressed reviewer comments on alpha (masking the int value)
Changes for v7:
- Added dummy implementations for memcpy_{to,from}io and memset_io on um
architecture so drivers that use these functions build for um
- Replaced all accesses and checks by long type
- Added function prototypes as extern to asm-generic/io.h
- Removed '__' from the 3 new function names
- Some archs implement their own version of these IO functions with
slightly different prototypes. So, I added 3 new patches to align
prototypes with new ones in iomap_copy.c + io.h
Changes for v6:
- Added include of linux/align.h to fix build on arm arch
- Replaced compile-time check by ifdef for the CONFIG_64BIT otherwise we
get a warning for the 'qc << 32' for archs with 32bit int types
- Suffixed arch commits by arch name
Changes for v5:
- Added functions to iomap_copy.c as proposed by Arndt
- Removed again the new io_copy.c and related objects
- Removed GENERIC_IO_COPY symbol and instead rely on the existing
HAS_IOMEM symbol
- Added prototypes of __memcpy_{to,from}io and __memset_io functions to
asm-generic/io.h
Changes for v4:
- Replaced memcpy/memset in asm-generic/io.h by the new
__memcpy_{to,from}io and __memset_io, so individual architectures can
use it instead of using their own implementation.
Changes for v3:
- Replaced again 'if(IS_ENABLED(CONFIG_64BIT))' by '#ifdef CONFIG_64BIT'
because on 32bit architectures (e.g., csky), __raw_{read,write}q are
not defined. So, it leads to compilation errors
Changes for v2:
- Renamed io.c -> io_copy.c
- Updated flag to 'GENERIC_IO_COPY'
- Replaced pointer dereferences by 'put_unaligned()'/'get_unaligned()'
- Replaced '#ifdef CONFIG_64BIT' by 'if(IS_ENABLED(CONFIG_64BIT))'
- Removed '__raw_{read,write}_native' and replaced by
'if(IS_ENABLED(CONFIG_64BIT))' -> '__raw_write{l,q}'
---
Julian Vetter (14):
Consolidate IO memcpy/memset into iomap_copy.c
arm64: Use generic IO memcpy/memset
csky: Use generic IO memcpy/memset
loongarch: Use generic IO memcpy/memset
m68k: Align prototypes of IO memcpy/memset
alpha: Align prototypes of IO memcpy/memset
parisc: Align prototypes of IO memcpy/memset
sh: Align prototypes of IO memcpy/memset
arm: Align prototype of IO memset
powerpc: Align prototypes of IO memcpy and memset
s390: Add wrappers around zpci_memcpy/zpci_memset
bus: mhi: ep: Add HAS_IOMEM || INDIRECT_IOMEM dependency
mtd: Add HAS_IOMEM || INDIRECT_IOMEM dependency
sound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML
arch/alpha/include/asm/io.h | 6 +-
arch/alpha/kernel/io.c | 4 +-
arch/arm/include/asm/io.h | 2 +-
arch/arm64/include/asm/io.h | 11 ---
arch/arm64/kernel/io.c | 87 --------------------
arch/csky/include/asm/io.h | 11 ---
arch/csky/kernel/Makefile | 2 +-
arch/csky/kernel/io.c | 91 ---------------------
arch/loongarch/include/asm/io.h | 10 ---
arch/loongarch/kernel/Makefile | 2 +-
arch/loongarch/kernel/io.c | 94 ---------------------
arch/m68k/include/asm/kmap.h | 8 +-
arch/parisc/include/asm/io.h | 3 -
arch/parisc/lib/io.c | 12 ++-
arch/powerpc/include/asm/io-defs.h | 6 +-
arch/powerpc/include/asm/io.h | 6 +-
arch/powerpc/kernel/io.c | 6 +-
arch/s390/include/asm/io.h | 27 +++++-
arch/s390/include/asm/pci_io.h | 6 +-
arch/sh/include/asm/io.h | 3 -
arch/sh/kernel/io.c | 6 +-
drivers/bus/mhi/ep/Kconfig | 1 +
drivers/mtd/chips/Kconfig | 4 +
drivers/mtd/lpddr/Kconfig | 1 +
include/asm-generic/io.h | 58 ++-----------
lib/iomap_copy.c | 127 +++++++++++++++++++++++++++++
sound/Kconfig | 2 +-
27 files changed, 197 insertions(+), 399 deletions(-)
delete mode 100644 arch/csky/kernel/io.c
delete mode 100644 arch/loongarch/kernel/io.c
--
2.34.1