On 09.08.25 11:36, Brahmajit Das wrote:
> On 09.08.2025 04:45, Brahmajit Das wrote:
>> Hello Developers,
>>
>> Building linux-next with GCC 16 results in this following build error
>>
>> $ make
>> CALL scripts/checksyscalls.sh
>> DESCEND objtool
>> INSTALL libsubcmd_headers
>> CC drivers/gpu/drm/radeon/r600_cs.o
>> drivers/gpu/drm/radeon/r600_cs.c: In function ‘r600_texture_size’:
>> drivers/gpu/drm/radeon/r600_cs.c:1411:29: error: variable ‘level’ set but
>> not used [-Werror=unused-but-set-variable=]
>> 1411 | unsigned offset, i, level;
>> | ^~~~~
>> cc1: all warnings being treated as errors
>> make[6]: *** [scripts/Makefile.build:287: drivers/gpu/drm/radeon/r600_cs.o]
>> Error 1
>> make[5]: *** [scripts/Makefile.build:556: drivers/gpu/drm/radeon] Error 2
>> make[4]: *** [scripts/Makefile.build:556: drivers/gpu/drm] Error 2
>> make[3]: *** [scripts/Makefile.build:556: drivers/gpu] Error 2
>> make[2]: *** [scripts/Makefile.build:556: drivers] Error 2
>> make[1]: *** [/home/listout/linux/Makefile:2011: .] Error 2
>> make: *** [Makefile:248: __sub-make] Error 2
>>
>> I'm not sure whether this is kernel bug or GCC bug at the moment. But
>> building with GCC 15 does not give this error, hence I'm more inclined
>> towards the latter.
>> Planning to also report this on GCC side, wanted to get some
>> opinion/feedback from kernel devs as well.
>> I'm on GCC 16.0.0_p2025080.
>>
>> --
>> Regards,
>> listout
>
> After giving a more thorough look, the level usage seems like dead code?
> It's just set (level = blevel) and incremented in the loop (level++). I
> don't see any other usage of the level variable. So if we do something
> like
>
> diff --git a/drivers/gpu/drm/radeon/r600_cs.c
> b/drivers/gpu/drm/radeon/r600_cs.c
> index ac77d1246b94..953ce0c57dfb 100644
> --- a/drivers/gpu/drm/radeon/r600_cs.c
> +++ b/drivers/gpu/drm/radeon/r600_cs.c
> @@ -1408,7 +1408,7 @@ static void r600_texture_size(unsigned nfaces, unsigned
> blevel, unsigned llevel,
> unsigned block_align, unsigned height_align,
> unsigned base_align,
> unsigned *l0_size, unsigned *mipmap_size)
> {
> - unsigned offset, i, level;
> + unsigned offset, i;
> unsigned width, height, depth, size;
> unsigned blocksize;
> unsigned nbx, nby;
> @@ -1420,7 +1420,7 @@ static void r600_texture_size(unsigned nfaces, unsigned
> blevel, unsigned llevel,
> w0 = r600_mip_minify(w0, 0);
> h0 = r600_mip_minify(h0, 0);
> d0 = r600_mip_minify(d0, 0);
> - for(i = 0, offset = 0, level = blevel; i < nlevels; i++, level++) {
> + for(i = 0, offset = 0; i < nlevels; i++) {
> width = r600_mip_minify(w0, i);
> nbx = r600_fmt_get_nblocksx(format, width);
>
> I think it should be fine.
Looks valid to me. Potentially just copy&pasted from some older HW generation
and not correctly adjusted for r600.
But the HW handled here is >15 years and the code easily >10 years old. I'm
really wondering why gcc only complains now?
Regards,
Christian.
>
> Would really appreciate some feedback.
> (CC-ed Dave)
>