[AMD Official Use Only - AMD Internal Distribution Only] > -----Original Message----- > From: Hung, Alex <alex.h...@amd.com> > Sent: Thursday, July 24, 2025 7:18 AM > To: SHANMUGAM, SRINIVASAN <srinivasan.shanmu...@amd.com>; > Pillai, Aurabindo <aurabindo.pil...@amd.com> > Cc: amd-gfx@lists.freedesktop.org; Lin, Wayne <wayne....@amd.com>; Shen, > George <george.s...@amd.com>; Strauss, Michael > <michael.stra...@amd.com>; Mike Katsnelson <mike.katsnel...@amd.com>; > Lee, Alvin <alvin.l...@amd.com>; Wu, Ray <ray...@amd.com>; Liu, Wenjing > <wenjing....@amd.com>; Wentland, Harry <harry.wentl...@amd.com>; Chung, > ChiaHsuan (Tom) <chiahsuan.ch...@amd.com>; Li, Roman > <roman...@amd.com> > Subject: Re: [PATCH] drm/amd/display: Reduce Stack Usage in > 'dp_retrain_link_dp_test' by heap-allocating 'audio_output' > > > > On 7/21/25 07:06, Srinivasan Shanmugam wrote: > > The function dp_retrain_link_dp_test currently allocates a large > > audio_output array on the stack, causing the stack frame size to > > exceed the compiler limit (1080 bytes > 1024 bytes). > > > > This change prevents stack overflow issues: > > amdgpu/../display/dc/link/accessories/link_dp_cts.c:65:13: warning: > > stack frame size (1080) exceeds limit (1024) in > > 'dp_retrain_link_dp_test' [-Wframe-larger-than] static void > > dp_retrain_link_dp_test(struct dc_link *link, > > > > This commit refactors the function to dynamically allocate the > > audio_output array using kmalloc/kfree, significantly reducing stack > > usage. > > > > - Allocates audio_output on the heap instead of stack > > - Adds error handling for allocation failure > > - Frees allocated memory before function return > > > > Fixes: 9437059b4bfb ("drm/amd/display: Fix Link Override Sequencing > > When Switching Between DIO/HPO") Switching Between DIO/HPO") > > Cc: Wayne Lin <wayne....@amd.com> > > Cc: George Shen <george.s...@amd.com> > > Cc: Michael Strauss <michael.stra...@amd.com> > > Cc: Mike Katsnelson <mike.katsnel...@amd.com> > > Cc: Alvin Lee <alvin.l...@amd.com> > > Cc: Ray Wu <ray...@amd.com> > > Cc: Wenjing Liu <wenjing....@amd.com> > > Cc: Harry Wentland <harry.wentl...@amd.com> > > Cc: Tom Chung <chiahsuan.ch...@amd.com> > > Cc: Roman Li <roman...@amd.com> > > Cc: Alex Hung <alex.h...@amd.com> > > Cc: Aurabindo Pillai <aurabindo.pil...@amd.com> > > Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmu...@amd.com> > > --- > > .../amd/display/dc/link/accessories/link_dp_cts.c | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git > > a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c > > b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c > > index 2956c2b3ad1a..c4db61cb5079 100644 > > --- a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c > > +++ b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c > > @@ -75,7 +75,16 @@ static void dp_retrain_link_dp_test(struct dc_link *link, > > bool is_hpo_acquired; > > uint8_t count; > > int i; > > - struct audio_output audio_output[MAX_PIPES]; > > + > > + /* Dynamically allocate audio_output to reduce stack usage */ > > + struct audio_output *audio_output; > > + > > + audio_output = kmalloc(sizeof(*audio_output) * MAX_PIPES, > > +GFP_KERNEL); > > This file is shared with another OS which has no kmalloc call, and > unfortunately this > change does not pass CI. >
Thanks Alex!, will propose v2 for this. Srini > > > + if (!audio_output) { > > + /* Allocation failed, handle error gracefully */ > > + DC_LOG_ERROR("%s: Failed to allocate audio_output", __func__); > > + return; > > + } > > > > needs_divider_update = (link->dc->link_srv- > >dp_get_encoding_format(link_setting) != > > link->dc->link_srv->dp_get_encoding_format((const struct > > dc_link_settings > *) &link->cur_link_settings)); > > @@ -144,6 +153,8 @@ static void dp_retrain_link_dp_test(struct dc_link > > *link, > > stream_update.dpms_off = &dpms_off; > > dc_update_planes_and_stream(state->clk_mgr->ctx->dc, > NULL, 0, state->streams[i], &stream_update); > > } > > + > > + kfree(audio_output); > > } > > > > static void dp_test_send_link_training(struct dc_link *link)