On Tue, Oct 8, 2024, at 07:50, Julian Vetter wrote: > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > index 80de699bf6af..f14655ed4d9d 100644 > --- a/include/asm-generic/io.h > +++ b/include/asm-generic/io.h > @@ -102,6 +102,12 @@ static inline void log_post_read_mmio(u64 val, u8 > width, const volatile void __i > > #endif /* CONFIG_TRACE_MMIO_ACCESS */ > > +extern void memcpy_fromio(void *to, const volatile void __iomem *from, > + size_t count); > +extern void memcpy_toio(volatile void __iomem *to, const void *from, > + size_t count); > +extern void memset_io(volatile void __iomem *dst, int c, size_t count); > + I think having this globally visible is the reason you are running into the mismatched prototypes. The patches to change the architecture specific implementations are all good, but I would instead add #ifdef checks around the prototypes the same way you do for the implementation, to make the series bisectible and shorter. include/asm-generic/io.h | 58 ++---------------- lib/iomap_copy.c | 127 +++++++++++++++++++++++++++++++++++++++ Along the same lines, I would change lib/Makefile to build this file unconditionally even on architectures that don't set CONFIG_HAS_IOMEM. Again, strengthening the driver dependencies is good, but it feels like a distraction here when we just need the common implementation to be available. Arnd