[PATCH] media: mxl5005s: reduce stack usage in MXL5005_ControlInit

From: Arnd Bergmann
Date: Fri Jun 20 2025 - 07:14:45 EST


From: Arnd Bergmann <arnd@xxxxxxxx>

This function initializes two large structures with arrays. On at least parisc,
the specific code sequence here leads to a badly misoptimized output from
the compiler along with a warning about the resulting excessive stack usage
from many spilled variables:

drivers/media/tuners/mxl5005s.c: In function 'MXL5005_ControlInit.isra':
drivers/media/tuners/mxl5005s.c:1660:1: warning: the frame size of 1400 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Splitting this one function into two functions avoids this because there
are few temporaries that can be spilled to the stack in each of the smaller
structures, so this avoids the warning and also improves readability.

Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
---
drivers/media/tuners/mxl5005s.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/drivers/media/tuners/mxl5005s.c b/drivers/media/tuners/mxl5005s.c
index 0e811c5eae6c..8f262c7f62f5 100644
--- a/drivers/media/tuners/mxl5005s.c
+++ b/drivers/media/tuners/mxl5005s.c
@@ -1174,7 +1174,12 @@ static u16 MXL5005_ControlInit(struct dvb_frontend *fe)
state->Init_Ctrl[39].bit[0] = 3;
state->Init_Ctrl[39].val[0] = 1;

+ return 0;
+}

+static u16 MXL5005_ControlInitCH(struct dvb_frontend *fe)
+{
+ struct mxl5005s_state *state = fe->tuner_priv;
state->CH_Ctrl_Num = CHCTRL_NUM ;

state->CH_Ctrl[0].Ctrl_Num = DN_POLY ;
@@ -1663,6 +1668,7 @@ static void InitTunerControls(struct dvb_frontend *fe)
{
MXL5005_RegisterInit(fe);
MXL5005_ControlInit(fe);
+ MXL5005_ControlInitCH(fe);
#ifdef _MXL_INTERNAL
MXL5005_MXLControlInit(fe);
#endif
--
2.39.5