Input: iqs626a - prohibit inlining of channel parsing functions

Started by Jeff LaBundy on Nov 29, 2021 · 2 messages from 2 authors · Last reply Nov 29, 2021

Subsystems (2)

Maintainers (2)

STALE1811d LANDED

Status: Landed in mainline as e1f5e848209a on 2021-11-29.

open the first message on its own page

Message details and related content
Some automated builds report a stack frame size in excess
of 2 kB for iqs626_probe(); the culprit appears to be the
call to iqs626_parse_prop().

To solve this problem, specify noinline_for_stack for all
of the iqs626_parse_*() helper functions which are called
inside a for loop within iqs626_parse_prop().

As a result, a build with '-Wframe-larger-than' as low as
512 is free of any such warnings.

Reported-by: kernel test robot <redacted>
Signed-off-by: Jeff LaBundy <redacted>
---
 drivers/input/misc/iqs626a.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/input/misc/iqs626a.c b/drivers/input/misc/iqs626a.c
index d57e996732cf..23b5dd9552dc 100644
--- a/drivers/input/misc/iqs626a.c
+++ b/drivers/input/misc/iqs626a.c
@@ -456,9 +456,10 @@ struct iqs626_private {
 	unsigned int suspend_mode;
 };
 
-static int iqs626_parse_events(struct iqs626_private *iqs626,
-			       const struct fwnode_handle *ch_node,
-			       enum iqs626_ch_id ch_id)
+static noinline_for_stack int
+iqs626_parse_events(struct iqs626_private *iqs626,
+		    const struct fwnode_handle *ch_node,
+		    enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
@@ -604,9 +605,10 @@ static int iqs626_parse_events(struct iqs626_private *iqs626,
 	return 0;
 }
 
-static int iqs626_parse_ati_target(struct iqs626_private *iqs626,
-				   const struct fwnode_handle *ch_node,
-				   enum iqs626_ch_id ch_id)
+static noinline_for_stack int
+iqs626_parse_ati_target(struct iqs626_private *iqs626,
+			const struct fwnode_handle *ch_node,
+			enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
@@ -885,9 +887,10 @@ static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
 	return 0;
 }
 
-static int iqs626_parse_channel(struct iqs626_private *iqs626,
-				const struct fwnode_handle *ch_node,
-				enum iqs626_ch_id ch_id)
+static noinline_for_stack int
+iqs626_parse_channel(struct iqs626_private *iqs626,
+		     const struct fwnode_handle *ch_node,
+		     enum iqs626_ch_id ch_id)
 {
 	struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
 	struct i2c_client *client = iqs626->client;
-- 
2.25.1
Message details and related content
On Sun, Nov 28, 2021 at 06:41:04PM -0600, Jeff LaBundy wrote:
Some automated builds report a stack frame size in excess
of 2 kB for iqs626_probe(); the culprit appears to be the
call to iqs626_parse_prop().

To solve this problem, specify noinline_for_stack for all
of the iqs626_parse_*() helper functions which are called
inside a for loop within iqs626_parse_prop().

As a result, a build with '-Wframe-larger-than' as low as
512 is free of any such warnings.

Reported-by: kernel test robot <redacted>
Signed-off-by: Jeff LaBundy <redacted>
Applied, thank you.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help