Hi Günter On Thu, May 19, 2022 at 8:48 AM Guenter Roeck <linux@xxxxxxxxxxxx> wrote: > On 5/18/22 17:55, kernel test robot wrote: > > tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master > > branch HEAD: 736ee37e2e8eed7fe48d0a37ee5a709514d478b3 Add linux-next specific files for 20220518 > > > > Error/Warning reports: > > > > https://lore.kernel.org/linux-mm/202204291924.vTGZmerI-lkp@xxxxxxxxx > > https://lore.kernel.org/linux-mm/202205041248.WgCwPcEV-lkp@xxxxxxxxx > > https://lore.kernel.org/linux-mm/202205122113.uLKzd3SZ-lkp@xxxxxxxxx > > https://lore.kernel.org/linux-mm/202205172344.3GFeaum1-lkp@xxxxxxxxx > > https://lore.kernel.org/linux-mm/202205190527.o9wVEvHI-lkp@xxxxxxxxx > > > > Error/Warning: (recently discovered and may have been fixed) > > > [ .. ] > > drivers/hwmon/nct6775-platform.c:199:9: sparse: unsigned char > > drivers/hwmon/nct6775-platform.c:199:9: sparse: void > > This is getting tiresome. Every driver using outb() on m68k will > experience that "problem". As far as I can see, it is caused by > > #define out_8(addr,b) (void)((*(__force volatile u8 *) (unsigned long)(addr)) = (b)) > > in arch/m68k/include/asm/raw_io.h. I have no idea what the > "(void)" is for, The "(void)" makes sure there is no return value. Which matters if the result of a function returning void is propagated to another function returning void. > but removing it "fixes" the problem. This introduces new problems (m68k all{mod,yes}config): In file included from arch/m68k/include/asm/io_mm.h:25, from arch/m68k/include/asm/io.h:8, from include/linux/io.h:13, from include/linux/of_address.h:7, from drivers/gpu/drm/msm/adreno/adreno_gpu.c:13: drivers/gpu/drm/msm/adreno/a6xx_gmu.h: In function ‘gmu_write_rscc’: arch/m68k/include/asm/raw_io.h:34:80: error: ‘return’ with a value, in function returning void [-Werror=return-type] 34 | #define out_le32(addr,l) ((*(__force volatile __le32 *) (unsigned long)(addr)) = cpu_to_le32(l)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ arch/m68k/include/asm/io_mm.h:397:26: note: in expansion of macro ‘out_le32’ 397 | #define writel(val,addr) out_le32((addr),(val)) | ^~~~~~~~ drivers/gpu/drm/msm/msm_drv.h:468:32: note: in expansion of macro ‘writel’ 468 | #define msm_writel(data, addr) writel((data), (addr)) | ^~~~~~ /drivers/gpu/drm/msm/adreno/a6xx_gmu.h:141:9: note: in expansion of macro ‘msm_writel’ 141 | return msm_writel(value, gmu->rscc + (offset << 2)); | ^~~~~~~~~~ In file included from drivers/gpu/drm/msm/adreno/a6xx_gpu.h:11, from drivers/gpu/drm/msm/adreno/adreno_gpu.c:20: drivers/gpu/drm/msm/adreno/a6xx_gmu.h:139:20: note: declared here 139 | static inline void gmu_write_rscc(struct a6xx_gmu *gmu, u32 offset, u32 value) | ^~~~~~~~~~~~~~ These can be fixed using e.g. (there are more in the Adreno driver): static inline void gmu_write(struct a6xx_gmu *gmu, u32 offset, u32 value) { - return msm_writel(value, gmu->mmio + (offset << 2)); + msm_writel(value, gmu->mmio + (offset << 2)); } > Either case, this is not a problem with the nct6775 driver, > nor is it a new problem. Indeed. For the sparse people: The full error is: drivers/net/appletalk/cops.c:382:17: error: incompatible types in conditional expression (different base types): drivers/net/appletalk/cops.c:382:17: unsigned char drivers/net/appletalk/cops.c:382:17: void Basically, sparse doesn't like "a ? b : c", if the return types of b and c don't match, even if the resulting value is not used. E.g. outb() on m68k: #define outb(val, port) (((port) < 1024 && ISA_TYPE == ISA_TYPE_ENEC) ? isa_rom_outb((val), (port)) : isa_outb((val), (port))) where isa_rom_outb() leads to rom_out_8() returning u8, while isa_outb() leads to the out_8() that includes the cast to void. So the best solution seems to be to add more "(void)" casts, to e.g. rom_out_8() and friends? Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds