Message ID | 20240722151738.572913-1-colin.i.king@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [next] iio: pressure: bmp280-core: Make read-only const array conversion_time_max static | expand |
On Mon, 22 Jul 2024 16:17:38 +0100 Colin Ian King <colin.i.king@gmail.com> wrote: > Don't populate the read-only array conversion_time_max on the stack at > run time, instead make it static. > > Signed-off-by: Colin Ian King <colin.i.king@gmail.com> I'm almost 100% the compiler can hoist this off the stack if it feels like it but sure, it might not and adding the static keyword probably obliges it to do so. Is that better or worse? Probably better. Ah well, I don't feel strongly and it's probably a good thing. Applied to the testing branch of iio.git for now. I'll rebase on rc1 once available. Thanks, Jonathan > --- > drivers/iio/pressure/bmp280-core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c > index 49081b729618..9ead52954de3 100644 > --- a/drivers/iio/pressure/bmp280-core.c > +++ b/drivers/iio/pressure/bmp280-core.c > @@ -1865,7 +1865,7 @@ EXPORT_SYMBOL_NS(bmp580_chip_info, IIO_BMP280); > > static int bmp180_wait_for_eoc(struct bmp280_data *data, u8 ctrl_meas) > { > - const int conversion_time_max[] = { 4500, 7500, 13500, 25500 }; > + static const int conversion_time_max[] = { 4500, 7500, 13500, 25500 }; > unsigned int delay_us; > unsigned int ctrl; > int ret;
On Mon, Jul 22, 2024 at 09:01:11PM +0100, Jonathan Cameron wrote: > On Mon, 22 Jul 2024 16:17:38 +0100 > Colin Ian King <colin.i.king@gmail.com> wrote: > > > Don't populate the read-only array conversion_time_max on the stack at > > run time, instead make it static. > > > > Signed-off-by: Colin Ian King <colin.i.king@gmail.com> > > I'm almost 100% the compiler can hoist this off the stack if it feels like > it but sure, it might not and adding the static keyword probably obliges > it to do so. You would wish the compiler would do this correctly, but it doesn't. (Or it didn't the last time anyone checked). regards, dan carpenter
On 23/07/2024 18:04, Dan Carpenter wrote: > On Mon, Jul 22, 2024 at 09:01:11PM +0100, Jonathan Cameron wrote: >> On Mon, 22 Jul 2024 16:17:38 +0100 >> Colin Ian King <colin.i.king@gmail.com> wrote: >> >>> Don't populate the read-only array conversion_time_max on the stack at >>> run time, instead make it static. >>> >>> Signed-off-by: Colin Ian King <colin.i.king@gmail.com> >> >> I'm almost 100% the compiler can hoist this off the stack if it feels like >> it but sure, it might not and adding the static keyword probably obliges >> it to do so. > > You would wish the compiler would do this correctly, but it doesn't. > (Or it didn't the last time anyone checked). From what I understand, a const variable that's not static is either put in register or on the stack since it's implicitly an auto variable, hence it's populated with the initialization data at run time. Making it static will populate it at compile time. Assuming anything else is problematic. Colin > > regards, > dan carpenter >
diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c index 49081b729618..9ead52954de3 100644 --- a/drivers/iio/pressure/bmp280-core.c +++ b/drivers/iio/pressure/bmp280-core.c @@ -1865,7 +1865,7 @@ EXPORT_SYMBOL_NS(bmp580_chip_info, IIO_BMP280); static int bmp180_wait_for_eoc(struct bmp280_data *data, u8 ctrl_meas) { - const int conversion_time_max[] = { 4500, 7500, 13500, 25500 }; + static const int conversion_time_max[] = { 4500, 7500, 13500, 25500 }; unsigned int delay_us; unsigned int ctrl; int ret;
Don't populate the read-only array conversion_time_max on the stack at run time, instead make it static. Signed-off-by: Colin Ian King <colin.i.king@gmail.com> --- drivers/iio/pressure/bmp280-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)