* [PATCH v5 0/3] asm-generic/io.h: Silence -Wnull-pointer-arithmetic warning on PCI_IOBASE @ 2021-05-10 8:53 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux Hi, This is version 5 of my attempt to get rid of a clang -Wnull-pointer-arithmetic warning for the use of PCI_IOBASE in asm-generic/io.h. This was originally found on s390 but should apply to all platforms leaving PCI_IOBASE undefined while making use of the inb() and friends helpers from asm-generic/io.h. This applies cleanly and was compile tested on top of v5.12 for the previously broken ARC, nds32, h8300 and risc-v architecture. It also applies cleanly on v5.13-rc1 for which I boot tested it on s390. I did boot test this only on x86_64 and s390x the former implements inb() itself while the latter would emit a WARN_ONCE() but no drivers use inb(). Thanks, Niklas Changes since v4: - Added Link to patch 4 (Arnd) - Improved comment on RISC-V patch mentioning current brokeness (Arnd) Changes since v3: - Changed the subject of the last patch to better reflect the actual change i.e. the addition of WARN_ONCE() to the helpers not the silencing of the clang warning - Added asm/bug.h to asm-generic/io.h so it doesn't have to be included previously by all arches to be available for the WARN_ONCE() - Added patch for risc-v which defines PCI_IOBASE except when compiled for nommu Changes since v2: - Improved comment for SPARC PCI_IOBASE definition as suggested by David Laight - Added a patch for ARC which is missing the asm/bug.h include for WARN_ONCE() (kernel test robot) - Added ifdefs to ioport_map() and __pci_ioport_map() since apparently at least test configs enable CONFIG_HAS_IOPORT_MAP even on architectures which leave PCI_IOBASE unset (kernel test robot for nds32 and ARC). Changes since v1: - Added patch to explicitly set PCI_IOBASE to 0 on sparc as suggested by Arnd Bergmann - Instead of working around the warning with a uintptr_t PCI_IOBASE make inb() and friends explicitly WARN_ONCE() and return 0xff... (Arnd Bergmann) Niklas Schnelle (3): sparc: explicitly set PCI_IOBASE to 0 risc-v: Use generic io.h helpers for nommu asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE arch/riscv/include/asm/io.h | 5 +-- arch/sparc/include/asm/io.h | 8 +++++ include/asm-generic/io.h | 65 ++++++++++++++++++++++++++++++++++--- 3 files changed, 72 insertions(+), 6 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v5 0/3] asm-generic/io.h: Silence -Wnull-pointer-arithmetic warning on PCI_IOBASE @ 2021-05-10 8:53 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux Hi, This is version 5 of my attempt to get rid of a clang -Wnull-pointer-arithmetic warning for the use of PCI_IOBASE in asm-generic/io.h. This was originally found on s390 but should apply to all platforms leaving PCI_IOBASE undefined while making use of the inb() and friends helpers from asm-generic/io.h. This applies cleanly and was compile tested on top of v5.12 for the previously broken ARC, nds32, h8300 and risc-v architecture. It also applies cleanly on v5.13-rc1 for which I boot tested it on s390. I did boot test this only on x86_64 and s390x the former implements inb() itself while the latter would emit a WARN_ONCE() but no drivers use inb(). Thanks, Niklas Changes since v4: - Added Link to patch 4 (Arnd) - Improved comment on RISC-V patch mentioning current brokeness (Arnd) Changes since v3: - Changed the subject of the last patch to better reflect the actual change i.e. the addition of WARN_ONCE() to the helpers not the silencing of the clang warning - Added asm/bug.h to asm-generic/io.h so it doesn't have to be included previously by all arches to be available for the WARN_ONCE() - Added patch for risc-v which defines PCI_IOBASE except when compiled for nommu Changes since v2: - Improved comment for SPARC PCI_IOBASE definition as suggested by David Laight - Added a patch for ARC which is missing the asm/bug.h include for WARN_ONCE() (kernel test robot) - Added ifdefs to ioport_map() and __pci_ioport_map() since apparently at least test configs enable CONFIG_HAS_IOPORT_MAP even on architectures which leave PCI_IOBASE unset (kernel test robot for nds32 and ARC). Changes since v1: - Added patch to explicitly set PCI_IOBASE to 0 on sparc as suggested by Arnd Bergmann - Instead of working around the warning with a uintptr_t PCI_IOBASE make inb() and friends explicitly WARN_ONCE() and return 0xff... (Arnd Bergmann) Niklas Schnelle (3): sparc: explicitly set PCI_IOBASE to 0 risc-v: Use generic io.h helpers for nommu asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE arch/riscv/include/asm/io.h | 5 +-- arch/sparc/include/asm/io.h | 8 +++++ include/asm-generic/io.h | 65 ++++++++++++++++++++++++++++++++++--- 3 files changed, 72 insertions(+), 6 deletions(-) -- 2.25.1 _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v5 1/3] sparc: explicitly set PCI_IOBASE to 0 2021-05-10 8:53 ` Niklas Schnelle @ 2021-05-10 8:53 ` Niklas Schnelle -1 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux Instead of relying on the fallback in asm-generic/io.h which sets PCI_IOBASE 0 if it is not defined set it explicitly. Link: https://lore.kernel.org/lkml/CAK8P3a3PK9zyeP4ymELtc2ZYnymECoACiigw9Za+pvSJpCk5=g@mail.gmail.com/ Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> --- arch/sparc/include/asm/io.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/sparc/include/asm/io.h b/arch/sparc/include/asm/io.h index 2eefa526b38f..c019e50702c1 100644 --- a/arch/sparc/include/asm/io.h +++ b/arch/sparc/include/asm/io.h @@ -1,6 +1,14 @@ /* SPDX-License-Identifier: GPL-2.0 */ #ifndef ___ASM_SPARC_IO_H #define ___ASM_SPARC_IO_H + +/* + * On LEON PCI addresses below 64k are converted to IO accesses. + * io_remap_xxx() returns a kernel virtual address in the PCI window so + * inb() doesn't need to add an offset. + */ +#define PCI_IOBASE ((void __iomem *)0) + #if defined(__sparc__) && defined(__arch64__) #include <asm/io_64.h> #else -- 2.25.1 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 1/3] sparc: explicitly set PCI_IOBASE to 0 @ 2021-05-10 8:53 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux Instead of relying on the fallback in asm-generic/io.h which sets PCI_IOBASE 0 if it is not defined set it explicitly. Link: https://lore.kernel.org/lkml/CAK8P3a3PK9zyeP4ymELtc2ZYnymECoACiigw9Za+pvSJpCk5=g@mail.gmail.com/ Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> --- arch/sparc/include/asm/io.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/sparc/include/asm/io.h b/arch/sparc/include/asm/io.h index 2eefa526b38f..c019e50702c1 100644 --- a/arch/sparc/include/asm/io.h +++ b/arch/sparc/include/asm/io.h @@ -1,6 +1,14 @@ /* SPDX-License-Identifier: GPL-2.0 */ #ifndef ___ASM_SPARC_IO_H #define ___ASM_SPARC_IO_H + +/* + * On LEON PCI addresses below 64k are converted to IO accesses. + * io_remap_xxx() returns a kernel virtual address in the PCI window so + * inb() doesn't need to add an offset. + */ +#define PCI_IOBASE ((void __iomem *)0) + #if defined(__sparc__) && defined(__arch64__) #include <asm/io_64.h> #else -- 2.25.1 _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 2/3] risc-v: Use generic io.h helpers for nommu 2021-05-10 8:53 ` Niklas Schnelle @ 2021-05-10 8:53 ` Niklas Schnelle -1 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux From: Niklas Schnelle <niklas@komani.de> Without MMU support PCI_IOBASE is left undefined because PCI_IO_END is VMEMMAP_START. Nevertheless the in*()/out*() helper macros are left defined with uses of PCI_IOBASE. At the moment this only compiles because asm-generic/io.h defines PCI_IOBASE as 0 if it is undefined and so at macro expansion PCI_IOBASE is defined. This leads to compilation errors when asm-generic/io.h is changed to leave PCI_IOBASE undefined. More importantly it is currently broken at runtime, as accessing a fixed I/O port number of an ISA device on NOMMU RISC-V would turn into a NULL pointer dereference. Instead only define the in*()/out*() helper macros with MMU support and fall back to the asm-generic/io.h helper stubs otherwise. Signed-off-by: Niklas Schnelle <niklas@komani.de> --- arch/riscv/include/asm/io.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/io.h b/arch/riscv/include/asm/io.h index c025a746a148..31a8b98c0f13 100644 --- a/arch/riscv/include/asm/io.h +++ b/arch/riscv/include/asm/io.h @@ -23,12 +23,12 @@ #include <asm/mmio.h> /* - * I/O port access constants. + * I/O port access constants. Without MMU support leave PCI_IOBASE undefined + * and fall back to generic stubs for I/O access routines. */ #ifdef CONFIG_MMU #define IO_SPACE_LIMIT (PCI_IO_SIZE - 1) #define PCI_IOBASE ((void __iomem *)PCI_IO_START) -#endif /* CONFIG_MMU */ /* * Emulation routines for the port-mapped IO space used by some PCI drivers. @@ -145,6 +145,7 @@ __io_writes_outs(writes, u64, q, __io_bw(), __io_aw()) __io_writes_outs(outs, u64, q, __io_pbr(), __io_paw()) #define outsq(addr, buffer, count) __outsq((void __iomem *)addr, buffer, count) #endif +#endif /* CONFIG_MMU */ #include <asm-generic/io.h> -- 2.25.1 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 2/3] risc-v: Use generic io.h helpers for nommu @ 2021-05-10 8:53 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux From: Niklas Schnelle <niklas@komani.de> Without MMU support PCI_IOBASE is left undefined because PCI_IO_END is VMEMMAP_START. Nevertheless the in*()/out*() helper macros are left defined with uses of PCI_IOBASE. At the moment this only compiles because asm-generic/io.h defines PCI_IOBASE as 0 if it is undefined and so at macro expansion PCI_IOBASE is defined. This leads to compilation errors when asm-generic/io.h is changed to leave PCI_IOBASE undefined. More importantly it is currently broken at runtime, as accessing a fixed I/O port number of an ISA device on NOMMU RISC-V would turn into a NULL pointer dereference. Instead only define the in*()/out*() helper macros with MMU support and fall back to the asm-generic/io.h helper stubs otherwise. Signed-off-by: Niklas Schnelle <niklas@komani.de> --- arch/riscv/include/asm/io.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/riscv/include/asm/io.h b/arch/riscv/include/asm/io.h index c025a746a148..31a8b98c0f13 100644 --- a/arch/riscv/include/asm/io.h +++ b/arch/riscv/include/asm/io.h @@ -23,12 +23,12 @@ #include <asm/mmio.h> /* - * I/O port access constants. + * I/O port access constants. Without MMU support leave PCI_IOBASE undefined + * and fall back to generic stubs for I/O access routines. */ #ifdef CONFIG_MMU #define IO_SPACE_LIMIT (PCI_IO_SIZE - 1) #define PCI_IOBASE ((void __iomem *)PCI_IO_START) -#endif /* CONFIG_MMU */ /* * Emulation routines for the port-mapped IO space used by some PCI drivers. @@ -145,6 +145,7 @@ __io_writes_outs(writes, u64, q, __io_bw(), __io_aw()) __io_writes_outs(outs, u64, q, __io_pbr(), __io_paw()) #define outsq(addr, buffer, count) __outsq((void __iomem *)addr, buffer, count) #endif +#endif /* CONFIG_MMU */ #include <asm-generic/io.h> -- 2.25.1 _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 8:53 ` Niklas Schnelle @ 2021-05-10 8:53 ` Niklas Schnelle -1 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux When PCI_IOBASE is not defined, it is set to 0 such that it is ignored in calls to the readX/writeX primitives. This triggers clang's -Wnull-pointer-arithmetic warning and will result in illegal accesses on platforms that do not support I/O ports. Make things explicit and silence the warning by letting inb() and friends fail with WARN_ONCE() and a 0xff... return in case PCI_IOBASE is not defined. Link: https://lore.kernel.org/lkml/20210421111759.2059976-1-schnelle@linux.ibm.com/ Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> --- include/asm-generic/io.h | 65 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index e93375c710b9..7b523683c241 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -8,6 +8,7 @@ #define __ASM_GENERIC_IO_H #include <asm/page.h> /* I/O is all done through memory accesses */ +#include <linux/bug.h> #include <linux/string.h> /* for memset() and memcpy() */ #include <linux/types.h> @@ -440,10 +441,6 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer, #endif #endif /* CONFIG_64BIT */ -#ifndef PCI_IOBASE -#define PCI_IOBASE ((void __iomem *)0) -#endif - #ifndef IO_SPACE_LIMIT #define IO_SPACE_LIMIT 0xffff #endif @@ -458,12 +455,17 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer, #define _inb _inb static inline u8 _inb(unsigned long addr) { +#ifdef PCI_IOBASE u8 val; __io_pbr(); val = __raw_readb(PCI_IOBASE + addr); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -471,12 +473,17 @@ static inline u8 _inb(unsigned long addr) #define _inw _inw static inline u16 _inw(unsigned long addr) { +#ifdef PCI_IOBASE u16 val; __io_pbr(); val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -484,12 +491,17 @@ static inline u16 _inw(unsigned long addr) #define _inl _inl static inline u32 _inl(unsigned long addr) { +#ifdef PCI_IOBASE u32 val; __io_pbr(); val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -497,9 +509,13 @@ static inline u32 _inl(unsigned long addr) #define _outb _outb static inline void _outb(u8 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writeb(value, PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -507,9 +523,13 @@ static inline void _outb(u8 value, unsigned long addr) #define _outw _outw static inline void _outw(u16 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -517,9 +537,13 @@ static inline void _outw(u16 value, unsigned long addr) #define _outl _outl static inline void _outl(u32 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -606,7 +630,11 @@ static inline void outl_p(u32 value, unsigned long addr) #define insb insb static inline void insb(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsb(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -614,7 +642,11 @@ static inline void insb(unsigned long addr, void *buffer, unsigned int count) #define insw insw static inline void insw(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsw(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -622,7 +654,11 @@ static inline void insw(unsigned long addr, void *buffer, unsigned int count) #define insl insl static inline void insl(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsl(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -631,7 +667,11 @@ static inline void insl(unsigned long addr, void *buffer, unsigned int count) static inline void outsb(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesb(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -640,7 +680,11 @@ static inline void outsb(unsigned long addr, const void *buffer, static inline void outsw(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesw(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -649,7 +693,11 @@ static inline void outsw(unsigned long addr, const void *buffer, static inline void outsl(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesl(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -1020,18 +1068,27 @@ static inline void __iomem *ioremap_np(phys_addr_t offset, size_t size) #define ioport_map ioport_map static inline void __iomem *ioport_map(unsigned long port, unsigned int nr) { +#ifdef PCI_IOBASE port &= IO_SPACE_LIMIT; return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port; +#else + WARN_ONCE(1, "No I/O port support\n"); + return NULL; +#endif } #define __pci_ioport_unmap __pci_ioport_unmap static inline void __pci_ioport_unmap(void __iomem *p) { +#ifdef PCI_IOBASE uintptr_t start = (uintptr_t) PCI_IOBASE; uintptr_t addr = (uintptr_t) p; if (addr >= start && addr < start + IO_SPACE_LIMIT) return; iounmap(p); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif -- 2.25.1 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 8:53 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 8:53 UTC (permalink / raw) To: Arnd Bergmann, Vineet Gupta, David S. Miller Cc: Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390, linux-snps-arc, sparclinux When PCI_IOBASE is not defined, it is set to 0 such that it is ignored in calls to the readX/writeX primitives. This triggers clang's -Wnull-pointer-arithmetic warning and will result in illegal accesses on platforms that do not support I/O ports. Make things explicit and silence the warning by letting inb() and friends fail with WARN_ONCE() and a 0xff... return in case PCI_IOBASE is not defined. Link: https://lore.kernel.org/lkml/20210421111759.2059976-1-schnelle@linux.ibm.com/ Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> --- include/asm-generic/io.h | 65 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index e93375c710b9..7b523683c241 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -8,6 +8,7 @@ #define __ASM_GENERIC_IO_H #include <asm/page.h> /* I/O is all done through memory accesses */ +#include <linux/bug.h> #include <linux/string.h> /* for memset() and memcpy() */ #include <linux/types.h> @@ -440,10 +441,6 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer, #endif #endif /* CONFIG_64BIT */ -#ifndef PCI_IOBASE -#define PCI_IOBASE ((void __iomem *)0) -#endif - #ifndef IO_SPACE_LIMIT #define IO_SPACE_LIMIT 0xffff #endif @@ -458,12 +455,17 @@ static inline void writesq(volatile void __iomem *addr, const void *buffer, #define _inb _inb static inline u8 _inb(unsigned long addr) { +#ifdef PCI_IOBASE u8 val; __io_pbr(); val = __raw_readb(PCI_IOBASE + addr); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -471,12 +473,17 @@ static inline u8 _inb(unsigned long addr) #define _inw _inw static inline u16 _inw(unsigned long addr) { +#ifdef PCI_IOBASE u16 val; __io_pbr(); val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -484,12 +491,17 @@ static inline u16 _inw(unsigned long addr) #define _inl _inl static inline u32 _inl(unsigned long addr) { +#ifdef PCI_IOBASE u32 val; __io_pbr(); val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); __io_par(val); return val; +#else + WARN_ONCE(1, "No I/O port support\n"); + return ~0; +#endif } #endif @@ -497,9 +509,13 @@ static inline u32 _inl(unsigned long addr) #define _outb _outb static inline void _outb(u8 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writeb(value, PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -507,9 +523,13 @@ static inline void _outb(u8 value, unsigned long addr) #define _outw _outw static inline void _outw(u16 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -517,9 +537,13 @@ static inline void _outw(u16 value, unsigned long addr) #define _outl _outl static inline void _outl(u32 value, unsigned long addr) { +#ifdef PCI_IOBASE __io_pbw(); __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); __io_paw(); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -606,7 +630,11 @@ static inline void outl_p(u32 value, unsigned long addr) #define insb insb static inline void insb(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsb(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -614,7 +642,11 @@ static inline void insb(unsigned long addr, void *buffer, unsigned int count) #define insw insw static inline void insw(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsw(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -622,7 +654,11 @@ static inline void insw(unsigned long addr, void *buffer, unsigned int count) #define insl insl static inline void insl(unsigned long addr, void *buffer, unsigned int count) { +#ifdef PCI_IOBASE readsl(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -631,7 +667,11 @@ static inline void insl(unsigned long addr, void *buffer, unsigned int count) static inline void outsb(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesb(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -640,7 +680,11 @@ static inline void outsb(unsigned long addr, const void *buffer, static inline void outsw(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesw(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -649,7 +693,11 @@ static inline void outsw(unsigned long addr, const void *buffer, static inline void outsl(unsigned long addr, const void *buffer, unsigned int count) { +#ifdef PCI_IOBASE writesl(PCI_IOBASE + addr, buffer, count); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif @@ -1020,18 +1068,27 @@ static inline void __iomem *ioremap_np(phys_addr_t offset, size_t size) #define ioport_map ioport_map static inline void __iomem *ioport_map(unsigned long port, unsigned int nr) { +#ifdef PCI_IOBASE port &= IO_SPACE_LIMIT; return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port; +#else + WARN_ONCE(1, "No I/O port support\n"); + return NULL; +#endif } #define __pci_ioport_unmap __pci_ioport_unmap static inline void __pci_ioport_unmap(void __iomem *p) { +#ifdef PCI_IOBASE uintptr_t start = (uintptr_t) PCI_IOBASE; uintptr_t addr = (uintptr_t) p; if (addr >= start && addr < start + IO_SPACE_LIMIT) return; iounmap(p); +#else + WARN_ONCE(1, "No I/O port support\n"); +#endif } #endif -- 2.25.1 _______________________________________________ linux-snps-arc mailing list linux-snps-arc@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-snps-arc ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 8:53 ` Niklas Schnelle @ 2021-05-10 13:03 ` kernel test robot -1 siblings, 0 replies; 18+ messages in thread From: kernel test robot @ 2021-05-10 13:03 UTC (permalink / raw) To: Niklas Schnelle, Arnd Bergmann, Vineet Gupta, David S. Miller Cc: kbuild-all, netdev, Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390 [-- Attachment #1: Type: text/plain, Size: 5347 bytes --] Hi Niklas, I love your patch! Perhaps something to improve: [auto build test WARNING on soc/for-next] [also build test WARNING on asm-generic/master v5.13-rc1 next-20210510] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next config: h8300-randconfig-r035-20210510 (attached as .config) compiler: h8300-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/fa75946a8988026bee808b5840438a3908f0a65b git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 git checkout fa75946a8988026bee808b5840438a3908f0a65b # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=h8300 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:10, from drivers/media/rc/nuvoton-cir.c:25: include/linux/scatterlist.h: In function 'sg_set_buf': include/asm-generic/page.h:89:50: warning: ordered comparison of pointer with null pointer [-Wextra] 89 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ | ^~ include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~ include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~~~~~~~~~~ drivers/media/rc/nuvoton-cir.c: In function 'nvt_get_rx_ir_data': >> drivers/media/rc/nuvoton-cir.c:761:15: warning: iteration 32 invokes undefined behavior [-Waggressive-loop-optimizations] 761 | nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); | ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/rc/nuvoton-cir.c:760:2: note: within this loop 760 | for (i = 0; i < fifocount; i++) | ^~~ vim +761 drivers/media/rc/nuvoton-cir.c fbdc781c6ba974 drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-08 747 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 748 /* copy data from hardware rx fifo into driver buffer */ 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 749 static void nvt_get_rx_ir_data(struct nvt_dev *nvt) 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 750 { 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 751 u8 fifocount; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 752 int i; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 753 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 754 /* Get count of how many bytes to read from RX FIFO */ 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 755 fifocount = nvt_cir_reg_read(nvt, CIR_RXFCONT); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 756 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 757 nvt_dbg("attempting to fetch %u bytes from hw rx fifo", fifocount); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 758 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 759 /* Read fifocount bytes from CIR Sample RX FIFO register */ 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 760 for (i = 0; i < fifocount; i++) 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 @761 nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 762 bacf8351f23cfd drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 763 nvt->pkts = fifocount; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 764 nvt_dbg("%s: pkts now %d", __func__, nvt->pkts); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 765 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 766 nvt_process_rx_ir_data(nvt); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 767 } 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 768 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 26536 bytes --] ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 13:03 ` kernel test robot 0 siblings, 0 replies; 18+ messages in thread From: kernel test robot @ 2021-05-10 13:03 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 5430 bytes --] Hi Niklas, I love your patch! Perhaps something to improve: [auto build test WARNING on soc/for-next] [also build test WARNING on asm-generic/master v5.13-rc1 next-20210510] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next config: h8300-randconfig-r035-20210510 (attached as .config) compiler: h8300-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/fa75946a8988026bee808b5840438a3908f0a65b git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 git checkout fa75946a8988026bee808b5840438a3908f0a65b # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=h8300 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:10, from drivers/media/rc/nuvoton-cir.c:25: include/linux/scatterlist.h: In function 'sg_set_buf': include/asm-generic/page.h:89:50: warning: ordered comparison of pointer with null pointer [-Wextra] 89 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ | ^~ include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~ include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~~~~~~~~~~ drivers/media/rc/nuvoton-cir.c: In function 'nvt_get_rx_ir_data': >> drivers/media/rc/nuvoton-cir.c:761:15: warning: iteration 32 invokes undefined behavior [-Waggressive-loop-optimizations] 761 | nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); | ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/rc/nuvoton-cir.c:760:2: note: within this loop 760 | for (i = 0; i < fifocount; i++) | ^~~ vim +761 drivers/media/rc/nuvoton-cir.c fbdc781c6ba974 drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-08 747 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 748 /* copy data from hardware rx fifo into driver buffer */ 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 749 static void nvt_get_rx_ir_data(struct nvt_dev *nvt) 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 750 { 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 751 u8 fifocount; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 752 int i; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 753 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 754 /* Get count of how many bytes to read from RX FIFO */ 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 755 fifocount = nvt_cir_reg_read(nvt, CIR_RXFCONT); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 756 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 757 nvt_dbg("attempting to fetch %u bytes from hw rx fifo", fifocount); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 758 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 759 /* Read fifocount bytes from CIR Sample RX FIFO register */ 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 760 for (i = 0; i < fifocount; i++) 6db0168821fa4e drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 @761 nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 762 bacf8351f23cfd drivers/media/rc/nuvoton-cir.c Heiner Kallweit 2016-08-02 763 nvt->pkts = fifocount; 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 764 nvt_dbg("%s: pkts now %d", __func__, nvt->pkts); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 765 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 766 nvt_process_rx_ir_data(nvt); 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 767 } 6d2f5c27880c2c drivers/media/IR/nuvoton-cir.c Jarod Wilson 2010-10-07 768 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 26536 bytes --] ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 13:03 ` kernel test robot @ 2021-05-10 13:47 ` Arnd Bergmann -1 siblings, 0 replies; 18+ messages in thread From: Arnd Bergmann @ 2021-05-10 13:47 UTC (permalink / raw) To: kernel test robot Cc: Niklas Schnelle, Vineet Gupta, David S. Miller, kbuild-all, Networking, Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, Linux Kernel Mailing List, linux-s390 On Mon, May 10, 2021 at 3:08 PM kernel test robot <lkp@intel.com> wrote: > > In file included from include/linux/kernel.h:10, > from drivers/media/rc/nuvoton-cir.c:25: > include/linux/scatterlist.h: In function 'sg_set_buf': > include/asm-generic/page.h:89:50: warning: ordered comparison of pointer with null pointer [-Wextra] > 89 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ > | ^~ > include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' > 78 | # define unlikely(x) __builtin_expect(!!(x), 0) > | ^ > include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' > 137 | BUG_ON(!virt_addr_valid(buf)); > | ^~~~~~ > include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' > 137 | BUG_ON(!virt_addr_valid(buf)); > | ^~~~~~~~~~~~~~~ > drivers/media/rc/nuvoton-cir.c: In function 'nvt_get_rx_ir_data': > >> drivers/media/rc/nuvoton-cir.c:761:15: warning: iteration 32 invokes undefined behavior [-Waggressive-loop-optimizations] > 761 | nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); I think you can ignore this one, it's a preexisting issue with this driver that gets uncovered by your patch: if "fifocount" is read from a broken device as 0xff, the loop causes a buffer overflow. The code is already unreachable because the interrupt handler will have aborted already, so the compiler's dead code elimination should have shut up that warning, but adding a range check before the loop would address this as well. As far as I can tell, this warning only shows up when building with "make W=1". Arnd ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 13:47 ` Arnd Bergmann 0 siblings, 0 replies; 18+ messages in thread From: Arnd Bergmann @ 2021-05-10 13:47 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 1841 bytes --] On Mon, May 10, 2021 at 3:08 PM kernel test robot <lkp@intel.com> wrote: > > In file included from include/linux/kernel.h:10, > from drivers/media/rc/nuvoton-cir.c:25: > include/linux/scatterlist.h: In function 'sg_set_buf': > include/asm-generic/page.h:89:50: warning: ordered comparison of pointer with null pointer [-Wextra] > 89 | #define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ > | ^~ > include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' > 78 | # define unlikely(x) __builtin_expect(!!(x), 0) > | ^ > include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' > 137 | BUG_ON(!virt_addr_valid(buf)); > | ^~~~~~ > include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' > 137 | BUG_ON(!virt_addr_valid(buf)); > | ^~~~~~~~~~~~~~~ > drivers/media/rc/nuvoton-cir.c: In function 'nvt_get_rx_ir_data': > >> drivers/media/rc/nuvoton-cir.c:761:15: warning: iteration 32 invokes undefined behavior [-Waggressive-loop-optimizations] > 761 | nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO); I think you can ignore this one, it's a preexisting issue with this driver that gets uncovered by your patch: if "fifocount" is read from a broken device as 0xff, the loop causes a buffer overflow. The code is already unreachable because the interrupt handler will have aborted already, so the compiler's dead code elimination should have shut up that warning, but adding a range check before the loop would address this as well. As far as I can tell, this warning only shows up when building with "make W=1". Arnd ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 8:53 ` Niklas Schnelle @ 2021-05-10 13:29 ` kernel test robot -1 siblings, 0 replies; 18+ messages in thread From: kernel test robot @ 2021-05-10 13:29 UTC (permalink / raw) To: Niklas Schnelle, Arnd Bergmann, Vineet Gupta, David S. Miller Cc: kbuild-all, netdev, Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, linux-kernel, linux-s390 [-- Attachment #1: Type: text/plain, Size: 3345 bytes --] Hi Niklas, I love your patch! Perhaps something to improve: [auto build test WARNING on soc/for-next] [also build test WARNING on asm-generic/master v5.13-rc1 next-20210510] [cannot apply to sparc-next/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next config: openrisc-randconfig-r025-20210510 (attached as .config) compiler: or1k-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/fa75946a8988026bee808b5840438a3908f0a65b git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 git checkout fa75946a8988026bee808b5840438a3908f0a65b # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=openrisc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:10, from include/linux/list.h:9, from include/linux/module.h:12, from drivers/net/arcnet/com20020.c:31: drivers/net/arcnet/com20020.c: In function 'com20020_reset': >> include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] 70 | (__if_trace.miss_hit[1]++,1) : \ | ^ drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here 286 | u_char inbyte; | ^~~~~~ vim +/inbyte +70 include/linux/compiler.h a15fd609ad53a6 Linus Torvalds 2019-03-20 59 a15fd609ad53a6 Linus Torvalds 2019-03-20 60 #define __trace_if_value(cond) ({ \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 61 static struct ftrace_branch_data \ e04462fb82f8dd Miguel Ojeda 2018-09-03 62 __aligned(4) \ 33def8498fdde1 Joe Perches 2020-10-21 63 __section("_ftrace_branch") \ a15fd609ad53a6 Linus Torvalds 2019-03-20 64 __if_trace = { \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 65 .func = __func__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 66 .file = __FILE__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 67 .line = __LINE__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 68 }; \ a15fd609ad53a6 Linus Torvalds 2019-03-20 69 (cond) ? \ a15fd609ad53a6 Linus Torvalds 2019-03-20 @70 (__if_trace.miss_hit[1]++,1) : \ a15fd609ad53a6 Linus Torvalds 2019-03-20 71 (__if_trace.miss_hit[0]++,0); \ a15fd609ad53a6 Linus Torvalds 2019-03-20 72 }) a15fd609ad53a6 Linus Torvalds 2019-03-20 73 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 25529 bytes --] ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 13:29 ` kernel test robot 0 siblings, 0 replies; 18+ messages in thread From: kernel test robot @ 2021-05-10 13:29 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 3411 bytes --] Hi Niklas, I love your patch! Perhaps something to improve: [auto build test WARNING on soc/for-next] [also build test WARNING on asm-generic/master v5.13-rc1 next-20210510] [cannot apply to sparc-next/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 base: https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next config: openrisc-randconfig-r025-20210510 (attached as .config) compiler: or1k-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/fa75946a8988026bee808b5840438a3908f0a65b git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Niklas-Schnelle/asm-generic-io-h-Silence-Wnull-pointer-arithmetic-warning-on-PCI_IOBASE/20210510-165435 git checkout fa75946a8988026bee808b5840438a3908f0a65b # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=openrisc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:10, from include/linux/list.h:9, from include/linux/module.h:12, from drivers/net/arcnet/com20020.c:31: drivers/net/arcnet/com20020.c: In function 'com20020_reset': >> include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] 70 | (__if_trace.miss_hit[1]++,1) : \ | ^ drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here 286 | u_char inbyte; | ^~~~~~ vim +/inbyte +70 include/linux/compiler.h a15fd609ad53a6 Linus Torvalds 2019-03-20 59 a15fd609ad53a6 Linus Torvalds 2019-03-20 60 #define __trace_if_value(cond) ({ \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 61 static struct ftrace_branch_data \ e04462fb82f8dd Miguel Ojeda 2018-09-03 62 __aligned(4) \ 33def8498fdde1 Joe Perches 2020-10-21 63 __section("_ftrace_branch") \ a15fd609ad53a6 Linus Torvalds 2019-03-20 64 __if_trace = { \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 65 .func = __func__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 66 .file = __FILE__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 67 .line = __LINE__, \ 2bcd521a684cc9 Steven Rostedt 2008-11-21 68 }; \ a15fd609ad53a6 Linus Torvalds 2019-03-20 69 (cond) ? \ a15fd609ad53a6 Linus Torvalds 2019-03-20 @70 (__if_trace.miss_hit[1]++,1) : \ a15fd609ad53a6 Linus Torvalds 2019-03-20 71 (__if_trace.miss_hit[0]++,0); \ a15fd609ad53a6 Linus Torvalds 2019-03-20 72 }) a15fd609ad53a6 Linus Torvalds 2019-03-20 73 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org [-- Attachment #2: config.gz --] [-- Type: application/gzip, Size: 25529 bytes --] ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 13:29 ` kernel test robot @ 2021-05-10 13:43 ` Arnd Bergmann -1 siblings, 0 replies; 18+ messages in thread From: Arnd Bergmann @ 2021-05-10 13:43 UTC (permalink / raw) To: kernel test robot Cc: Niklas Schnelle, Vineet Gupta, David S. Miller, kbuild-all, Networking, Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, Linux Kernel Mailing List, linux-s390 On Mon, May 10, 2021 at 3:30 PM kernel test robot <lkp@intel.com> wrote: > All warnings (new ones prefixed by >>): > > In file included from include/linux/kernel.h:10, > from include/linux/list.h:9, > from include/linux/module.h:12, > from drivers/net/arcnet/com20020.c:31: > drivers/net/arcnet/com20020.c: In function 'com20020_reset': > >> include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] > 70 | (__if_trace.miss_hit[1]++,1) : \ > | ^ > drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here > 286 | u_char inbyte; > | ^~~~~~ This looks like a real problem with the patch: the insb()/insw()/insl() helpers should memset(buffer, 0xff, size) to avoid using random stack data. Arnd ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 13:43 ` Arnd Bergmann 0 siblings, 0 replies; 18+ messages in thread From: Arnd Bergmann @ 2021-05-10 13:43 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 922 bytes --] On Mon, May 10, 2021 at 3:30 PM kernel test robot <lkp@intel.com> wrote: > All warnings (new ones prefixed by >>): > > In file included from include/linux/kernel.h:10, > from include/linux/list.h:9, > from include/linux/module.h:12, > from drivers/net/arcnet/com20020.c:31: > drivers/net/arcnet/com20020.c: In function 'com20020_reset': > >> include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] > 70 | (__if_trace.miss_hit[1]++,1) : \ > | ^ > drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here > 286 | u_char inbyte; > | ^~~~~~ This looks like a real problem with the patch: the insb()/insw()/insl() helpers should memset(buffer, 0xff, size) to avoid using random stack data. Arnd ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE 2021-05-10 13:43 ` Arnd Bergmann @ 2021-05-10 14:06 ` Niklas Schnelle -1 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 14:06 UTC (permalink / raw) To: Arnd Bergmann, kernel test robot Cc: Vineet Gupta, David S. Miller, kbuild-all, Networking, Nathan Chancellor, Nick Desaulniers, clang-built-linux, linux-arch, Linux Kernel Mailing List, linux-s390 On Mon, 2021-05-10 at 15:43 +0200, Arnd Bergmann wrote: > On Mon, May 10, 2021 at 3:30 PM kernel test robot <lkp@intel.com> wrote: > > All warnings (new ones prefixed by >>): > > > > In file included from include/linux/kernel.h:10, > > from include/linux/list.h:9, > > from include/linux/module.h:12, > > from drivers/net/arcnet/com20020.c:31: > > drivers/net/arcnet/com20020.c: In function 'com20020_reset': > > > > include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] > > 70 | (__if_trace.miss_hit[1]++,1) : \ > > | ^ > > drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here > > 286 | u_char inbyte; > > | ^~~~~~ > > This looks like a real problem with the patch: the insb()/insw()/insl() helpers > should memset(buffer, 0xff, size) to avoid using random stack data. > > Arnd Yes I agree, will send a v6 shortly. Thanks. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE @ 2021-05-10 14:06 ` Niklas Schnelle 0 siblings, 0 replies; 18+ messages in thread From: Niklas Schnelle @ 2021-05-10 14:06 UTC (permalink / raw) To: kbuild-all [-- Attachment #1: Type: text/plain, Size: 1071 bytes --] On Mon, 2021-05-10 at 15:43 +0200, Arnd Bergmann wrote: > On Mon, May 10, 2021 at 3:30 PM kernel test robot <lkp@intel.com> wrote: > > All warnings (new ones prefixed by >>): > > > > In file included from include/linux/kernel.h:10, > > from include/linux/list.h:9, > > from include/linux/module.h:12, > > from drivers/net/arcnet/com20020.c:31: > > drivers/net/arcnet/com20020.c: In function 'com20020_reset': > > > > include/linux/compiler.h:70:32: warning: 'inbyte' is used uninitialized in this function [-Wuninitialized] > > 70 | (__if_trace.miss_hit[1]++,1) : \ > > | ^ > > drivers/net/arcnet/com20020.c:286:9: note: 'inbyte' was declared here > > 286 | u_char inbyte; > > | ^~~~~~ > > This looks like a real problem with the patch: the insb()/insw()/insl() helpers > should memset(buffer, 0xff, size) to avoid using random stack data. > > Arnd Yes I agree, will send a v6 shortly. Thanks. ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2021-05-10 14:10 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-05-10 8:53 [PATCH v5 0/3] asm-generic/io.h: Silence -Wnull-pointer-arithmetic warning on PCI_IOBASE Niklas Schnelle 2021-05-10 8:53 ` Niklas Schnelle 2021-05-10 8:53 ` [PATCH v5 1/3] sparc: explicitly set PCI_IOBASE to 0 Niklas Schnelle 2021-05-10 8:53 ` Niklas Schnelle 2021-05-10 8:53 ` [PATCH v5 2/3] risc-v: Use generic io.h helpers for nommu Niklas Schnelle 2021-05-10 8:53 ` Niklas Schnelle 2021-05-10 8:53 ` [PATCH v5 3/3] asm-generic/io.h: warn in inb() and friends with undefined PCI_IOBASE Niklas Schnelle 2021-05-10 8:53 ` Niklas Schnelle 2021-05-10 13:03 ` kernel test robot 2021-05-10 13:03 ` kernel test robot 2021-05-10 13:47 ` Arnd Bergmann 2021-05-10 13:47 ` Arnd Bergmann 2021-05-10 13:29 ` kernel test robot 2021-05-10 13:29 ` kernel test robot 2021-05-10 13:43 ` Arnd Bergmann 2021-05-10 13:43 ` Arnd Bergmann 2021-05-10 14:06 ` Niklas Schnelle 2021-05-10 14:06 ` Niklas Schnelle
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.