On Wed, Jan 08, 2020 at 09:10:06AM +0100, Geert Uytterhoeven wrote:
Hi Krzysztof,
On Tue, Jan 7, 2020 at 5:53 PM Krzysztof Kozlowski krzk@kernel.org wrote:
The ioreadX() helpers have inconsistent interface. On some architectures void *__iomem address argument is a pointer to const, on some not.
Implementations of ioreadX() do not modify the memory under the address so they can be converted to a "const" version for const-safety and consistency among architectures.
Signed-off-by: Krzysztof Kozlowski krzk@kernel.org
--- a/arch/alpha/include/asm/io.h +++ b/arch/alpha/include/asm/io.h @@ -151,9 +151,9 @@ static inline void generic_##NAME(TYPE b, QUAL void __iomem *addr) \ alpha_mv.mv_##NAME(b, addr); \ }
-REMAP1(unsigned int, ioread8, /**/) -REMAP1(unsigned int, ioread16, /**/) -REMAP1(unsigned int, ioread32, /**/) +REMAP1(unsigned int, ioread8, const) +REMAP1(unsigned int, ioread16, const) +REMAP1(unsigned int, ioread32, const)
If these would become "const volatile", there would no longer be a need for the last parameter of the REMAP1() macro.
REMAP1(u8, readb, const volatile) REMAP1(u16, readw, const volatile) REMAP1(u32, readl, const volatile)
Same for REMAP2() macro below, for iowrite*().
Good point, thanks!
Best regards, Krzysztof