[PATCH 3/7] iio: st_sensors: simplify cleanup using __free
David Lechner
dlechner at baylibre.com
Tue Mar 10 17:04:24 PDT 2026
On 3/10/26 3:05 PM, Sanjay Chitroda wrote:
> From: Sanjay Chitroda <sanjayembeddedse at gmail.com>
>
> Replace manual cleanup logic with __free attribute from cleanup.h. This
> removes explicit kfree() calls and simplifies the error handling paths.
>
> No functional change intended for kmalloc().
>
> Signed-off-by: Sanjay Chitroda <sanjayembeddedse at gmail.com>
> ---
> drivers/iio/common/st_sensors/st_sensors_core.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c
> index dac593be5695..f641b62e692b 100644
> --- a/drivers/iio/common/st_sensors/st_sensors_core.c
> +++ b/drivers/iio/common/st_sensors/st_sensors_core.c
> @@ -501,14 +501,14 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
>
> byte_for_channel = DIV_ROUND_UP(ch->scan_type.realbits +
> ch->scan_type.shift, 8);
> - outdata = kmalloc(byte_for_channel, GFP_DMA | GFP_KERNEL);
> + u8 *outdata __free(kfree) = kmalloc(byte_for_channel, GFP_DMA | GFP_KERNEL);
Even better would be to not alloc new memory at all.
We could probably reuse buffer_data from struct st_sensor_data for this.
> if (!outdata)
> return -ENOMEM;
>
> err = regmap_bulk_read(sdata->regmap, ch->address,
> outdata, byte_for_channel);
> if (err < 0)
> - goto st_sensors_free_memory;
> + return err;
>
> if (byte_for_channel == 1)
> *data = (s8)*outdata;
> @@ -517,9 +517,6 @@ static int st_sensors_read_axis_data(struct iio_dev *indio_dev,
> else if (byte_for_channel == 3)
> *data = (s32)sign_extend32(get_unaligned_le24(outdata), 23);
>
> -st_sensors_free_memory:
> - kfree(outdata);
> -
> return err;
Should be able to change this to `return 0;` now.
> }
>
More information about the Linux-mediatek
mailing list