> +u64 ioread64(void __iomem *addr) > +{ > + u64 low, high; > + > + low = ioread32(addr); > + high = ioread32(addr + sizeof(u32)); > + return low | (high << 32); > +} > +u64 ioread64be(void __iomem *addr) > +{ > + u64 low, high; > + > + low = ioread32be(addr + sizeof(u32)); > + high = ioread32be(addr); > + return low | (high << 32); > +} > +#endif This hardcodes the behavior of include/linux/io-64-nonatomic-hi-lo.h, which I find rather confusing, as only about one in five drivers wants this behavior. I'd suggest you don't add it in lib/iomap.c at all for 32-bit architectures, but rather use the same logic that we have for readq/writeq in io-64-nonatomic-hi-lo.h and io-64-nonatomic-lo-hi.h, adding {lo_hi,hi_lo}_{ioread,iowrite}{,be} to the same files, and provide the {ioread,iowrite}{,be} macros only if they have not been defined at that point. Arnd