On Fri, Dec 5, 2025 at 11:29 AM Srinivasan Shanmugam <[email protected]> wrote: > > amdgpu_acpi_detect() calls some helper functions it calls have large > local structures. When the compiler inlines these helpers, their local > data adds to the amdgpu_acpi_detect() stack frame. > > Mark the helpers with noinline_for_stack: > - amdgpu_atif_verify_interface() > - amdgpu_atif_get_notification_params() > - amdgpu_atif_query_backlight_caps() > - amdgpu_atcs_verify_interface() > - amdgpu_acpi_enumerate_xcc() > > This keeps the large temporary objects inside the helper’s own stack > frame instead of being inlined into the caller, preventing the caller > from growing beyond the stack limit. > > Fixes the below with gcc W=1: > drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:1403:6: warning: stack frame size > (1688) exceeds limit (1024) in 'amdgpu_acpi_detect' [-Wframe-larger-than] > > Cc: Alex Deucher <[email protected]> > Cc: Christian König <[email protected]> > Signed-off-by: Srinivasan Shanmugam <[email protected]>
Acked-by: Alex Deucher <[email protected]> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c > index d8a4e918846c..61aa0ebec63e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c > @@ -241,7 +241,8 @@ static void amdgpu_atif_parse_functions(struct > amdgpu_atif_functions *f, u32 mas > * (all asics). > * returns 0 on success, error on failure. > */ > -static int amdgpu_atif_verify_interface(struct amdgpu_atif *atif) > +static noinline_for_stack > +int amdgpu_atif_verify_interface(struct amdgpu_atif *atif) > { > union acpi_object *info; > struct atif_verify_interface output; > @@ -286,7 +287,8 @@ static int amdgpu_atif_verify_interface(struct > amdgpu_atif *atif) > * where n is specified in the result if a notifier is used. > * Returns 0 on success, error on failure. > */ > -static int amdgpu_atif_get_notification_params(struct amdgpu_atif *atif) > +static noinline_for_stack > +int amdgpu_atif_get_notification_params(struct amdgpu_atif *atif) > { > union acpi_object *info; > struct amdgpu_atif_notification_cfg *n = &atif->notification_cfg; > @@ -354,7 +356,8 @@ static int amdgpu_atif_get_notification_params(struct > amdgpu_atif *atif) > * > * Returns 0 on success, error on failure. > */ > -static int amdgpu_atif_query_backlight_caps(struct amdgpu_atif *atif) > +static noinline_for_stack > +int amdgpu_atif_query_backlight_caps(struct amdgpu_atif *atif) > { > union acpi_object *info; > struct atif_qbtc_output characteristics; > @@ -601,7 +604,8 @@ static void amdgpu_atcs_parse_functions(struct > amdgpu_atcs_functions *f, u32 mas > * (all asics). > * returns 0 on success, error on failure. > */ > -static int amdgpu_atcs_verify_interface(struct amdgpu_atcs *atcs) > +static noinline_for_stack > +int amdgpu_atcs_verify_interface(struct amdgpu_atcs *atcs) > { > union acpi_object *info; > struct atcs_verify_interface output; > @@ -1090,7 +1094,8 @@ static int amdgpu_acpi_get_xcc_info(struct > amdgpu_acpi_xcc_info *xcc_info, > return ret; > } > > -static int amdgpu_acpi_enumerate_xcc(void) > +static noinline_for_stack > +int amdgpu_acpi_enumerate_xcc(void) > { > struct amdgpu_acpi_dev_info *dev_info = NULL; > struct amdgpu_acpi_xcc_info *xcc_info; > -- > 2.34.1 >
