# \[PATCH\] Input: iqs626a - prohibit inlining of channel parsing functions

- Subsystems: INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS, THE REST
- Maintainers: Dmitry Torokhov, Linus Torvalds
- Status: LANDED (e1f5e848209a · 2021-11-29 07:59)
- Landed in mainline as e1f5e848209a on 2021-11-29.
- List: linux-input
- 2 messages, 2 authors
- Page: https://ratatoskr.run/linux-input/2021/11/8933599/t

## \[PATCH\] Input: iqs626a - prohibit inlining of channel parsing functions

- From: Jeff LaBundy \<hidden\>
- Date: 2021-11-29 00:43:20 
- Message: https://ratatoskr.run/linux-input/2021/11/8933599.md

```text
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

```

## Re: \[PATCH\] Input: iqs626a - prohibit inlining of channel parsing functions

- From: Dmitry Torokhov \<dmitry.torokhov@gmail.com\>
- Date: 2021-11-29 07:45:39 
- Message: https://ratatoskr.run/linux-input/2021/11/8933600.md

```text
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
```
