Messages in this thread | | | From | Arnd Bergmann <> | Date | Mon, 26 Jun 2017 22:43:40 +0200 | Subject | Re: [PATCH 2/7] iomap: implement ioread64 and iowrite64 |
| |
> +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
| |