[linux-next:master] BUILD REGRESSION 736ee37e2e8eed7fe48d0a37ee5a709514d478b3
Geert Uytterhoeven
geert at linux-m68k.org
Fri May 20 05:40:20 PDT 2022
Hi Günter
On Thu, May 19, 2022 at 8:48 AM Guenter Roeck <linux at roeck-us.net> 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@intel.com
> > https://lore.kernel.org/linux-mm/202205041248.WgCwPcEV-lkp@intel.com
> > https://lore.kernel.org/linux-mm/202205122113.uLKzd3SZ-lkp@intel.com
> > https://lore.kernel.org/linux-mm/202205172344.3GFeaum1-lkp@intel.com
> > https://lore.kernel.org/linux-mm/202205190527.o9wVEvHI-lkp@intel.com
> >
> > 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 at linux-m68k.org
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
More information about the Linux-nvme
mailing list