[PATCH] drm/amd/display: Increase frame warning limit for clang in dml2

Alex Deucher alexdeucher at gmail.com
Thu Nov 2 17:21:36 UTC 2023


On Thu, Nov 2, 2023 at 1:12 PM Nathan Chancellor <nathan at kernel.org> wrote:
>
> On Thu, Nov 02, 2023 at 12:59:00PM -0400, Hamza Mahfooz wrote:
> > On 11/2/23 12:24, Nathan Chancellor wrote:
> > > When building ARCH=x86_64 allmodconfig with clang, which have sanitizers
> > > enabled, there is a warning about a large stack frame.
> > >
> > >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml2/display_mode_core.c:6265:13: error: stack frame size (2520) exceeds limit (2048) in 'dml_prefetch_check' [-Werror,-Wframe-larger-than]
> > >     6265 | static void dml_prefetch_check(struct display_mode_lib_st *mode_lib)
> > >          |             ^
> > >    1 error generated.
> > >
> > > Notably, GCC 13.2.0 does not do too much of a better job, as it is right
> > > at the current limit of 2048:
> > >
> > >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml2/display_mode_core.c: In function 'dml_prefetch_check':
> > >    drivers/gpu/drm/amd/amdgpu/../display/dc/dml2/display_mode_core.c:6705:1: error: the frame size of 2048 bytes is larger than 1800 bytes [-Werror=frame-larger-than=]
> > >     6705 | }
> > >          | ^
> > >
> > > In the past, these warnings have been avoided by reducing the number of
> > > parameters to various functions so that not as many arguments need to be
> > > passed on the stack. However, these patches take a good amount of effort
> > > to write despite being mechanical due to code structure and complexity
> > > and they are never carried forward to new generations of the code so
> > > that effort has to be expended every new hardware generation, which
> > > becomes harder to justify as time goes on.
> > >
> > > There is some effort to improve clang's code generation but that may
> > > take some time between code review, shifting priorities, and release
> > > cycles. To avoid having a noticeable or lengthy breakage in
> > > all{mod,yes}config, which are easy testing targets that have -Werror
> > > enabled, increase the limit for clang by 50% so that cases of extremely
> > > poor code generation can still be caught while not breaking the majority
> > > of builds. When clang's code generation improves, the limit increase can
> > > be restricted to older clang versions.
> > >
> > > Signed-off-by: Nathan Chancellor <nathan at kernel.org>
> > > ---
> > > If there is another DRM pull before 6.7-rc1, it would be much
> > > appreciated if this could make that so that other trees are not
> > > potentially broken by this. If not, no worries, as it was my fault for
> > > not sending this sooner.
> > > ---
> > >   drivers/gpu/drm/amd/display/dc/dml2/Makefile | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/display/dc/dml2/Makefile b/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> > > index 70ae5eba624e..dff8237c0999 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> > > +++ b/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> > > @@ -60,7 +60,7 @@ endif
> > >   endif
> > >   ifneq ($(CONFIG_FRAME_WARN),0)
> > > -frame_warn_flag := -Wframe-larger-than=2048
> > > +frame_warn_flag := -Wframe-larger-than=$(if $(CONFIG_CC_IS_CLANG),3072,2048)
> >
> > I would prefer checking for `CONFIG_KASAN || CONFIG_KCSAN` instead
> > since the stack usage shouldn't change much if both of those are disabled.
>
> So something like this? Or were you talking about replacing the clang
> check entirely with the KASAN/KCSAN check?

I think replacing the clang check entirely.  A similar issue was just
reported on different GCC versions:
https://lists.freedesktop.org/archives/amd-gfx/2023-November/100725.html

Alex

>
> diff --git a/drivers/gpu/drm/amd/display/dc/dml2/Makefile b/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> index 70ae5eba624e..0fc1b13295eb 100644
> --- a/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> +++ b/drivers/gpu/drm/amd/display/dc/dml2/Makefile
> @@ -60,8 +60,12 @@ endif
>  endif
>
>  ifneq ($(CONFIG_FRAME_WARN),0)
> +ifeq ($(CONFIG_CC_IS_CLANG)$(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),yy)
> +frame_warn_flag := -Wframe-larger-than=3072
> +else
>  frame_warn_flag := -Wframe-larger-than=2048
>  endif
> +endif
>
>  CFLAGS_$(AMDDALPATH)/dc/dml2/display_mode_core.o := $(dml2_ccflags) $(frame_warn_flag)
>  CFLAGS_$(AMDDALPATH)/dc/dml2/display_mode_util.o := $(dml2_ccflags)
>
> > >   endif
> > >   CFLAGS_$(AMDDALPATH)/dc/dml2/display_mode_core.o := $(dml2_ccflags) $(frame_warn_flag)
> > >
> > > ---
> > > base-commit: 21e80f3841c01aeaf32d7aee7bbc87b3db1aa0c6
> > > change-id: 20231102-amdgpu-dml2-increase-frame-size-warning-for-clang-c93bd2d6a871
> > >
> > > Best regards,
> > --
> > Hamza
> >


More information about the dri-devel mailing list