diff mbox series

[next] iio: pressure: bmp280-core: Make read-only const array conversion_time_max static

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

Commit Message

Colin Ian King July 22, 2024, 3:17 p.m. UTC
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(-)

Comments

Jonathan Cameron July 22, 2024, 8:01 p.m. UTC | #1
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;
Dan Carpenter July 23, 2024, 5:04 p.m. UTC | #2
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
Colin Ian King July 23, 2024, 5:40 p.m. UTC | #3
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 mbox series

Patch

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;