From: Sanjay Chitroda <sanjayembeddedse@gmail.com>
To: jic23@kernel.org, m.tretter@pengutronix.de, mchehab@kernel.org,
p.zabel@pengutronix.de, tiffany.lin@mediatek.com,
andrew-ct.chen@mediatek.com, yunfei.dong@mediatek.com,
matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com,
johan@kernel.org, elder@kernel.org, gregkh@linuxfoundation.org,
pure.logic@nexus-software.ie
Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org,
kernel@pengutronix.de, kees@kernel.org,
nabijaczleweli@nabijaczleweli.xyz, marcelo.schmitt1@gmail.com,
maudspierings@gocontroll.com, hverkuil+cisco@kernel.org,
ribalda@chromium.org, straube.linux@gmail.com,
dan.carpenter@linaro.org, lukagejak5@gmail.com,
ethantidmore06@gmail.com, samasth.norway.ananda@oracle.com,
karanja99erick@gmail.com, s9430939@naver.com, tglx@kernel.org,
mingo@kernel.org, sun.jian.kdev@gmail.com, weibu@redadmin.org,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-media@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org, greybus-dev@lists.linaro.org,
linux-staging@lists.linux.dev, sanjayembeddedse@gmail.com,
skhan@linuxfoundation.org
Subject: [PATCH 1/7] staging: greybus: simplify cleanup using __free
Date: Wed, 11 Mar 2026 01:35:07 +0530 [thread overview]
Message-ID: <20260310200513.2162018-2-sanjayembedded@gmail.com> (raw)
In-Reply-To: <20260310200513.2162018-1-sanjayembedded@gmail.com>
From: Sanjay Chitroda <sanjayembeddedse@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@gmail.com>
---
drivers/staging/greybus/camera.c | 27 +++++++----------------
drivers/staging/greybus/loopback.c | 35 ++++++++++--------------------
drivers/staging/greybus/raw.c | 6 ++---
3 files changed, 22 insertions(+), 46 deletions(-)
diff --git a/drivers/staging/greybus/camera.c b/drivers/staging/greybus/camera.c
index 62b55bb28408..14a603ca2400 100644
--- a/drivers/staging/greybus/camera.c
+++ b/drivers/staging/greybus/camera.c
@@ -519,8 +519,6 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
struct gb_camera_stream_config *streams,
struct gb_camera_csi_params *csi_params)
{
- struct gb_camera_configure_streams_request *req;
- struct gb_camera_configure_streams_response *resp;
unsigned int nstreams = *num_streams;
unsigned int i;
size_t req_size;
@@ -533,11 +531,11 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
req_size = sizeof(*req) + nstreams * sizeof(req->config[0]);
resp_size = sizeof(*resp) + nstreams * sizeof(resp->config[0]);
- req = kmalloc(req_size, GFP_KERNEL);
- resp = kmalloc(resp_size, GFP_KERNEL);
+ struct gb_camera_configure_streams_request *req __free(kfree) =
+ kmalloc(req_size, GFP_KERNEL);
+ struct gb_camera_configure_streams_response *resp __free(kfree) =
+ kmalloc(resp_size, GFP_KERNEL);
if (!req || !resp) {
- kfree(req);
- kfree(resp);
return -ENOMEM;
}
@@ -641,8 +639,6 @@ static int gb_camera_configure_streams(struct gb_camera *gcam,
done_skip_pm_put:
mutex_unlock(&gcam->mutex);
- kfree(req);
- kfree(resp);
return ret;
}
@@ -650,7 +646,6 @@ static int gb_camera_capture(struct gb_camera *gcam, u32 request_id,
unsigned int streams, unsigned int num_frames,
size_t settings_size, const void *settings)
{
- struct gb_camera_capture_request *req;
size_t req_size;
int ret;
@@ -658,7 +653,8 @@ static int gb_camera_capture(struct gb_camera *gcam, u32 request_id,
return -EINVAL;
req_size = sizeof(*req) + settings_size;
- req = kmalloc(req_size, GFP_KERNEL);
+ struct gb_camera_capture_request *req __free(kfree) =
+ kmalloc(req_size, GFP_KERNEL);
if (!req)
return -ENOMEM;
@@ -680,8 +676,6 @@ static int gb_camera_capture(struct gb_camera *gcam, u32 request_id,
done:
mutex_unlock(&gcam->mutex);
- kfree(req);
-
return ret;
}
@@ -870,16 +864,15 @@ static ssize_t gb_camera_debugfs_capabilities(struct gb_camera *gcam,
&gcam->debugfs.buffers[GB_CAMERA_DEBUGFS_BUFFER_CAPABILITIES];
size_t size = 1024;
unsigned int i;
- u8 *caps;
int ret;
- caps = kmalloc(size, GFP_KERNEL);
+ u8 *caps __free(kfree) = kmalloc(size, GFP_KERNEL);
if (!caps)
return -ENOMEM;
ret = gb_camera_capabilities(gcam, caps, &size);
if (ret < 0)
- goto done;
+ return ret;
/*
* hex_dump_to_buffer() doesn't return the number of bytes dumped prior
@@ -893,10 +886,6 @@ static ssize_t gb_camera_debugfs_capabilities(struct gb_camera *gcam,
buffer->length += sprintf(buffer->data + buffer->length,
"%*ph\n", nbytes, caps + i);
}
-
-done:
- kfree(caps);
- return ret;
}
static ssize_t gb_camera_debugfs_configure_streams(struct gb_camera *gcam,
diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c
index aa9c73cb0ae5..ae729f744ac5 100644
--- a/drivers/staging/greybus/loopback.c
+++ b/drivers/staging/greybus/loopback.c
@@ -508,10 +508,10 @@ static int gb_loopback_async_operation(struct gb_loopback *gb, int type,
static int gb_loopback_sync_sink(struct gb_loopback *gb, u32 len)
{
- struct gb_loopback_transfer_request *request;
int retval;
- request = kmalloc(len + sizeof(*request), GFP_KERNEL);
+ struct gb_loopback_transfer_request *request __free(kfree) =
+ kmalloc(len + sizeof(*request), GFP_KERNEL);
if (!request)
return -ENOMEM;
@@ -519,25 +519,24 @@ static int gb_loopback_sync_sink(struct gb_loopback *gb, u32 len)
retval = gb_loopback_operation_sync(gb, GB_LOOPBACK_TYPE_SINK,
request, len + sizeof(*request),
NULL, 0);
- kfree(request);
return retval;
}
static int gb_loopback_sync_transfer(struct gb_loopback *gb, u32 len)
{
- struct gb_loopback_transfer_request *request;
- struct gb_loopback_transfer_response *response;
int retval;
gb->apbridge_latency_ts = 0;
gb->gbphy_latency_ts = 0;
- request = kmalloc(len + sizeof(*request), GFP_KERNEL);
+ struct gb_loopback_transfer_request *request __free(kfree) =
+ kmalloc(len + sizeof(*request), GFP_KERNEL);
if (!request)
return -ENOMEM;
- response = kmalloc(len + sizeof(*response), GFP_KERNEL);
+
+ struct gb_loopback_transfer_response *response __free(kfree) =
+ kmalloc(len + sizeof(*response), GFP_KERNEL);
if (!response) {
- kfree(request);
return -ENOMEM;
}
@@ -548,7 +547,7 @@ static int gb_loopback_sync_transfer(struct gb_loopback *gb, u32 len)
request, len + sizeof(*request),
response, len + sizeof(*response));
if (retval)
- goto gb_error;
+ return retval;
if (memcmp(request->data, response->data, len)) {
dev_err(&gb->connection->bundle->dev,
@@ -558,10 +557,6 @@ static int gb_loopback_sync_transfer(struct gb_loopback *gb, u32 len)
gb->apbridge_latency_ts = (u32)__le32_to_cpu(response->reserved0);
gb->gbphy_latency_ts = (u32)__le32_to_cpu(response->reserved1);
-gb_error:
- kfree(request);
- kfree(response);
-
return retval;
}
@@ -573,10 +568,10 @@ static int gb_loopback_sync_ping(struct gb_loopback *gb)
static int gb_loopback_async_sink(struct gb_loopback *gb, u32 len)
{
- struct gb_loopback_transfer_request *request;
int retval;
- request = kmalloc(len + sizeof(*request), GFP_KERNEL);
+ struct gb_loopback_transfer_request *request __free(kfree) =
+ kmalloc(len + sizeof(*request), GFP_KERNEL);
if (!request)
return -ENOMEM;
@@ -584,7 +579,6 @@ static int gb_loopback_async_sink(struct gb_loopback *gb, u32 len)
retval = gb_loopback_async_operation(gb, GB_LOOPBACK_TYPE_SINK,
request, len + sizeof(*request),
0, NULL);
- kfree(request);
return retval;
}
@@ -621,10 +615,10 @@ static int gb_loopback_async_transfer_complete(
static int gb_loopback_async_transfer(struct gb_loopback *gb, u32 len)
{
- struct gb_loopback_transfer_request *request;
int retval, response_len;
- request = kmalloc(len + sizeof(*request), GFP_KERNEL);
+ struct gb_loopback_transfer_request *request __free(kfree) =
+ kmalloc(len + sizeof(*request), GFP_KERNEL);
if (!request)
return -ENOMEM;
@@ -636,11 +630,6 @@ static int gb_loopback_async_transfer(struct gb_loopback *gb, u32 len)
request, len + sizeof(*request),
len + response_len,
gb_loopback_async_transfer_complete);
- if (retval)
- goto gb_error;
-
-gb_error:
- kfree(request);
return retval;
}
diff --git a/drivers/staging/greybus/raw.c b/drivers/staging/greybus/raw.c
index 3027a2c25bcd..60a754b20432 100644
--- a/drivers/staging/greybus/raw.c
+++ b/drivers/staging/greybus/raw.c
@@ -126,15 +126,14 @@ static int gb_raw_request_handler(struct gb_operation *op)
static int gb_raw_send(struct gb_raw *raw, u32 len, const char __user *data)
{
struct gb_connection *connection = raw->connection;
- struct gb_raw_send_request *request;
int retval;
- request = kmalloc(len + sizeof(*request), GFP_KERNEL);
+ struct gb_raw_send_request *request __free(kfree) =
+ kmalloc(len + sizeof(*request), GFP_KERNEL);
if (!request)
return -ENOMEM;
if (copy_from_user(&request->data[0], data, len)) {
- kfree(request);
return -EFAULT;
}
@@ -144,7 +143,6 @@ static int gb_raw_send(struct gb_raw *raw, u32 len, const char __user *data)
request, len + sizeof(*request),
NULL, 0);
- kfree(request);
return retval;
}
--
2.34.1
next prev parent reply other threads:[~2026-03-10 20:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 20:05 [PATCH 0/7] drivers: Simplify cleanup paths using __free Sanjay Chitroda
2026-03-10 20:05 ` Sanjay Chitroda [this message]
2026-03-10 21:07 ` [PATCH 1/7] staging: greybus: simplify cleanup " Andy Shevchenko
2026-03-11 6:51 ` Dan Carpenter
2026-03-11 7:06 ` Greg KH
2026-03-10 20:05 ` [PATCH 2/7] iio: ssp_sensors: " Sanjay Chitroda
2026-03-10 21:11 ` Andy Shevchenko
2026-03-10 20:05 ` [PATCH 3/7] iio: st_sensors: " Sanjay Chitroda
2026-03-11 0:04 ` David Lechner
2026-03-12 20:52 ` kernel test robot
2026-03-13 0:23 ` kernel test robot
2026-03-10 20:05 ` [PATCH 4/7] media: mediatek: vcodec: " Sanjay Chitroda
2026-03-19 21:08 ` Nicolas Dufresne
2026-03-10 20:05 ` [PATCH 5/7] media: chips-media: coda: " Sanjay Chitroda
2026-03-10 20:05 ` [PATCH 6/7] media: allegro: " Sanjay Chitroda
2026-03-10 20:05 ` [PATCH 7/7] staging: rtl8723bs: " Sanjay Chitroda
2026-03-10 21:42 ` Andrew Lunn
2026-03-11 6:45 ` Greg KH
2026-03-10 21:04 ` [PATCH 0/7] drivers: Simplify cleanup paths " Andy Shevchenko
2026-03-10 21:52 ` David Lechner
2026-03-11 1:57 ` Sanjay Chitroda
2026-03-11 5:42 ` Luka Gejak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260310200513.2162018-2-sanjayembedded@gmail.com \
--to=sanjayembeddedse@gmail.com \
--cc=andrew-ct.chen@mediatek.com \
--cc=andy@kernel.org \
--cc=angelogioacchino.delregno@collabora.com \
--cc=dan.carpenter@linaro.org \
--cc=dlechner@baylibre.com \
--cc=elder@kernel.org \
--cc=ethantidmore06@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=greybus-dev@lists.linaro.org \
--cc=hverkuil+cisco@kernel.org \
--cc=jic23@kernel.org \
--cc=johan@kernel.org \
--cc=karanja99erick@gmail.com \
--cc=kees@kernel.org \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-staging@lists.linux.dev \
--cc=lukagejak5@gmail.com \
--cc=m.tretter@pengutronix.de \
--cc=marcelo.schmitt1@gmail.com \
--cc=matthias.bgg@gmail.com \
--cc=maudspierings@gocontroll.com \
--cc=mchehab@kernel.org \
--cc=mingo@kernel.org \
--cc=nabijaczleweli@nabijaczleweli.xyz \
--cc=nuno.sa@analog.com \
--cc=p.zabel@pengutronix.de \
--cc=pure.logic@nexus-software.ie \
--cc=ribalda@chromium.org \
--cc=s9430939@naver.com \
--cc=samasth.norway.ananda@oracle.com \
--cc=skhan@linuxfoundation.org \
--cc=straube.linux@gmail.com \
--cc=sun.jian.kdev@gmail.com \
--cc=tglx@kernel.org \
--cc=tiffany.lin@mediatek.com \
--cc=weibu@redadmin.org \
--cc=yunfei.dong@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.