[01/12] ARM: ixp4xx: fix ioport_unmap definition

Message ID 20170720154616.3250481-2-arnd@arndb.de
State Accepted
Commit c4caa8db4c90a6d0e2258e34a203961e07903c05
Headers show
Series
  • [01/12] ARM: ixp4xx: fix ioport_unmap definition
Related show

Commit Message

Arnd Bergmann July 20, 2017, 3:45 p.m.
An empty macro definition can cause unexpected behavior, in
case of the ixp4xx ioport_unmap, we get two warnings:

drivers/net/wireless/marvell/libertas/if_cs.c: In function 'if_cs_release':
drivers/net/wireless/marvell/libertas/if_cs.c:826:3: error: suggest braces around empty body in an 'if' statement [-Werror=empty-body]
   ioport_unmap(card->iobase);
drivers/vfio/pci/vfio_pci_rdwr.c: In function 'vfio_pci_vga_rw':
drivers/vfio/pci/vfio_pci_rdwr.c:230:15: error: the omitted middle operand in ?: will always be 'true', suggest explicit middle operand [-Werror=parentheses]
   is_ioport ? ioport_unmap(iomem) : iounmap(iomem);

This uses an inline function to define the macro in a safer way.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 arch/arm/mach-ixp4xx/include/mach/io.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

-- 
2.9.0

Comments

Krzysztof =?utf-8?Q?Ha=C5=82asa?= July 21, 2017, 12:21 p.m. | #1
Arnd Bergmann <arnd@arndb.de> writes:

> An empty macro definition can cause unexpected behavior, in

> case of the ixp4xx ioport_unmap, we get two warnings:

>

> drivers/net/wireless/marvell/libertas/if_cs.c: In function 'if_cs_release':

> drivers/net/wireless/marvell/libertas/if_cs.c:826:3: error: suggest braces around empty body in an 'if' statement [-Werror=empty-body]

>    ioport_unmap(card->iobase);

> drivers/vfio/pci/vfio_pci_rdwr.c: In function 'vfio_pci_vga_rw':

> drivers/vfio/pci/vfio_pci_rdwr.c:230:15: error: the omitted middle operand in ?: will always be 'true', suggest explicit middle operand [-Werror=parentheses]

>    is_ioport ? ioport_unmap(iomem) : iounmap(iomem);

>

> This uses an inline function to define the macro in a safer way.

>

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  arch/arm/mach-ixp4xx/include/mach/io.h | 11 +++++++++--


Acked-by: Krzysztof Halasa <khalasa@piap.pl>


In fact, the old code contained another bug (missing parentheses):

> --- a/arch/arm/mach-ixp4xx/include/mach/io.h

>  

> -#define	ioport_map(port, nr)		((void __iomem*)(port + PIO_OFFSET))

                                                                 ^^^^
-- 
Krzysztof Halasa

Industrial Research Institute for Automation and Measurements PIAP
Al. Jerozolimskie 202, 02-486 Warsaw, Poland

Patch

diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h
index 7a0c13bf4269..2f84c26a6758 100644
--- a/arch/arm/mach-ixp4xx/include/mach/io.h
+++ b/arch/arm/mach-ixp4xx/include/mach/io.h
@@ -523,8 +523,15 @@  static inline void iowrite32_rep(void __iomem *addr, const void *vaddr,
 #endif
 }
 
-#define	ioport_map(port, nr)		((void __iomem*)(port + PIO_OFFSET))
-#define	ioport_unmap(addr)
+#define ioport_map(port, nr) ioport_map(port, nr)
+static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
+{
+	return ((void __iomem*)((port) + PIO_OFFSET));
+}
+#define	ioport_unmap(addr) ioport_unmap(addr)
+static inline void ioport_unmap(void __iomem *addr)
+{
+}
 #endif /* CONFIG_PCI */
 
 #endif /* __ASM_ARM_ARCH_IO_H */