On Thu, Nov 2, 2023 at 1:41 PM Nathan Chancellor <nathan@xxxxxxxxxx> wrote: > > When building ARCH=x86_64 allmodconfig with clang, which will typically > 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 (and others have reported being over with > older GCC versions): > > 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. > > 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 configurations that have KASAN or KCSAN enabled by 50% so that > cases of extremely poor code generation can still be caught while not > breaking the majority of builds. CONFIG_KMSAN also causes high stack > usage but the frame limit is already set to zero when it is enabled, > which is accounted for by the check for CONFIG_FRAME_WARN=0 in the dml2 > Makefile. > > Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx> > --- > 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. Applied. Thanks! Will send out a PR this week. Alex > > Changes in v2: > - Adjust workaround to check for either CONFIG_KASAN=y or > CONFIG_KCSAN=y, as the same problem has been reported with older > versions of GCC (Hamza, Alex) > - Link to v1: https://lore.kernel.org/r/20231102-amdgpu-dml2-increase-frame-size-warning-for-clang-v1-1-6eb157352931@xxxxxxxxxx > --- > drivers/gpu/drm/amd/display/dc/dml2/Makefile | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/amd/display/dc/dml2/Makefile b/drivers/gpu/drm/amd/display/dc/dml2/Makefile > index 70ae5eba624e..acff3449b8d7 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 ($(filter y,$(CONFIG_KASAN)$(CONFIG_KCSAN)),y) > +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) > > --- > base-commit: 21e80f3841c01aeaf32d7aee7bbc87b3db1aa0c6 > change-id: 20231102-amdgpu-dml2-increase-frame-size-warning-for-clang-c93bd2d6a871 > > Best regards, > -- > Nathan Chancellor <nathan@xxxxxxxxxx> >