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
>

Reply via email to