powerpc: Cast away __iomem in low level IO routines
authorBenjamin Gray <bgray@linux.ibm.com>
Wed, 11 Oct 2023 05:37:09 +0000 (16:37 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 Oct 2023 06:16:20 +0000 (17:16 +1100)
Sparse reports dereferencing an __iomem pointer. These routines
are clearly low level handlers for IO memory, so force cast away
the __iomem annotation to tell sparse the dereferences are safe.

Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20231011053711.93427-11-bgray@linux.ibm.com
arch/powerpc/kernel/io.c

index 2f29b7d432de3d4e7cd450f4e6fd067531124455..6af535905984a62516bd790ce1a4f87d1d23b1c1 100644 (file)
@@ -33,7 +33,7 @@ void _insb(const volatile u8 __iomem *port, void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               tmp = *port;
+               tmp = *(const volatile u8 __force *)port;
                eieio();
                *tbuf++ = tmp;
        } while (--count != 0);
@@ -49,7 +49,7 @@ void _outsb(volatile u8 __iomem *port, const void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               *port = *tbuf++;
+               *(volatile u8 __force *)port = *tbuf++;
        } while (--count != 0);
        asm volatile("sync");
 }
@@ -64,7 +64,7 @@ void _insw_ns(const volatile u16 __iomem *port, void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               tmp = *port;
+               tmp = *(const volatile u16 __force *)port;
                eieio();
                *tbuf++ = tmp;
        } while (--count != 0);
@@ -80,7 +80,7 @@ void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               *port = *tbuf++;
+               *(volatile u16 __force *)port = *tbuf++;
        } while (--count != 0);
        asm volatile("sync");
 }
@@ -95,7 +95,7 @@ void _insl_ns(const volatile u32 __iomem *port, void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               tmp = *port;
+               tmp = *(const volatile u32 __force *)port;
                eieio();
                *tbuf++ = tmp;
        } while (--count != 0);
@@ -111,7 +111,7 @@ void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count)
                return;
        asm volatile("sync");
        do {
-               *port = *tbuf++;
+               *(volatile u32 __force *)port = *tbuf++;
        } while (--count != 0);
        asm volatile("sync");
 }