From: Arnd Bergmann > Sent: 13 April 2021 13:27 > > On Tue, Apr 13, 2021 at 1:54 PM Niklas Schnelle <schnelle@xxxxxxxxxxxxx> wrote: > > > > When PCI_IOBASE is not defined, it is set to 0 such that it is ignored > > in calls to the readX/writeX primitives. While mathematically obvious > > this triggers clang's -Wnull-pointer-arithmetic warning. > > Indeed, this is an annoying warning. > > > An additional complication is that PCI_IOBASE is explicitly typed as > > "void __iomem *" which causes the type conversion that converts the > > "unsigned long" port/addr parameters to the appropriate pointer type. > > As non pointer types are used by drivers at the callsite since these are > > dealing with I/O port numbers, changing the parameter type would cause > > further warnings in drivers. Instead use "uintptr_t" for PCI_IOBASE > > 0 and explicitly cast to "void __iomem *" when calling readX/writeX. Since the definitions make no sense when PCI_IOBASE in undefined maybe the functions should either not be defined, be stubs that do nothing or stubs that are BUG(). David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)