diff options
author | Arnd Bergmann <arnd@arndb.de> | 2017-01-25 23:20:59 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-01-26 11:21:43 +0000 |
commit | 33f0698a52d9ebc089eccff7d2fc376974d7e7bf (patch) | |
tree | 41350dbbba32ff9a05dd1adcd284096f608cd292 /drivers/regulator/s2mpa01.c | |
parent | d00b74613fb18dfd0a5aa99270ee2e72d5c808d7 (diff) | |
download | linux-33f0698a52d9ebc089eccff7d2fc376974d7e7bf.tar.bz2 |
regulator: s2mpa01: reduce stack size for probe function
In some rare configurations we can run into rather high kernel stack
consumption:
drivers/regulator/s2mpa01.c:397:1: error: the frame size of 1536 bytes is larger than 1152 bytes [-Werror=frame-larger-than=]
This is probably harmless since it happens only in the probe function,
but there is also a relatively simple workaround, moving the regulator
match data into the device specific structure.
As a small downside, we waste a little memory at runtime. An alternative
approach would free the array at the end of the probe function, which in
turn is a little more complicated.
Fixes: f18792714608 ("regulator: Add support for S2MPA01 regulator")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/s2mpa01.c')
-rw-r--r-- | drivers/regulator/s2mpa01.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/regulator/s2mpa01.c b/drivers/regulator/s2mpa01.c index 92f88753bfed..38ee97a085f9 100644 --- a/drivers/regulator/s2mpa01.c +++ b/drivers/regulator/s2mpa01.c @@ -26,6 +26,7 @@ #define S2MPA01_REGULATOR_CNT ARRAY_SIZE(regulators) struct s2mpa01_info { + struct of_regulator_match rdata[S2MPA01_REGULATOR_MAX]; int ramp_delay24; int ramp_delay3; int ramp_delay5; @@ -341,9 +342,9 @@ static int s2mpa01_pmic_probe(struct platform_device *pdev) { struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct sec_platform_data *pdata = dev_get_platdata(iodev->dev); - struct of_regulator_match rdata[S2MPA01_REGULATOR_MAX] = { }; struct device_node *reg_np = NULL; struct regulator_config config = { }; + struct of_regulator_match *rdata; struct s2mpa01_info *s2mpa01; int i; @@ -351,6 +352,7 @@ static int s2mpa01_pmic_probe(struct platform_device *pdev) if (!s2mpa01) return -ENOMEM; + rdata = s2mpa01->rdata; for (i = 0; i < S2MPA01_REGULATOR_CNT; i++) rdata[i].name = regulators[i].name; |