From: Conor Dooley <conor@kernel.org>
To: linux-riscv@lists.infradead.org
Cc: conor@kernel.org, Conor Dooley <conor.dooley@microchip.com>,
Daire McNamara <daire.mcnamara@microchip.com>,
Cyril Jean <cyril.jean@microchip.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH v1 5/5] firmware: microchip: use scope-based cleanup where possible
Date: Wed, 10 Apr 2024 12:58:08 +0100 [thread overview]
Message-ID: <20240410-glory-patriot-2d7c7876dcfe@spud> (raw)
In-Reply-To: <20240410-opulently-epic-8654bdac3422@spud>
From: Conor Dooley <conor.dooley@microchip.com>
There's a bunch of structs created and freed every time the mailbox is
used. Move them to use the scope-based cleanup infrastructure to avoid
manually tearing them down. mpfs_auto_update_available() didn't free the
memory that it used (albeit it allocated exactly once during probe) so
that gets moved over too.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
drivers/firmware/microchip/mpfs-auto-update.c | 59 +++++--------------
1 file changed, 16 insertions(+), 43 deletions(-)
diff --git a/drivers/firmware/microchip/mpfs-auto-update.c b/drivers/firmware/microchip/mpfs-auto-update.c
index d7ce27f4ba1b..30de47895b1c 100644
--- a/drivers/firmware/microchip/mpfs-auto-update.c
+++ b/drivers/firmware/microchip/mpfs-auto-update.c
@@ -175,28 +175,17 @@ static enum fw_upload_err mpfs_auto_update_poll_complete(struct fw_upload *fw_up
static int mpfs_auto_update_verify_image(struct fw_upload *fw_uploader)
{
struct mpfs_auto_update_priv *priv = fw_uploader->dd_handle;
- struct mpfs_mss_response *response;
- struct mpfs_mss_msg *message;
- u32 *response_msg;
+ u32 *response_msg __free(kfree) =
+ kzalloc(AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(*response_msg), GFP_KERNEL);
+ struct mpfs_mss_response *response __free(kfree) =
+ kzalloc(sizeof(struct mpfs_mss_response), GFP_KERNEL);
+ struct mpfs_mss_msg *message __free(kfree) =
+ kzalloc(sizeof(struct mpfs_mss_msg), GFP_KERNEL);
int ret;
- response_msg = devm_kzalloc(priv->dev, AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(response_msg),
- GFP_KERNEL);
- if (!response_msg)
+ if (!response_msg || !response || !message)
return -ENOMEM;
- response = devm_kzalloc(priv->dev, sizeof(struct mpfs_mss_response), GFP_KERNEL);
- if (!response) {
- ret = -ENOMEM;
- goto free_response_msg;
- }
-
- message = devm_kzalloc(priv->dev, sizeof(struct mpfs_mss_msg), GFP_KERNEL);
- if (!message) {
- ret = -ENOMEM;
- goto free_response;
- }
-
/*
* The system controller can verify that an image in the flash is valid.
* Rather than duplicate the check in this driver, call the relevant
@@ -218,20 +207,12 @@ static int mpfs_auto_update_verify_image(struct fw_upload *fw_uploader)
ret = mpfs_blocking_transaction(priv->sys_controller, message);
if (ret | response->resp_status) {
dev_warn(priv->dev, "Verification of Upgrade Image failed!\n");
- ret = ret ? ret : -EBADMSG;
- goto free_message;
+ return ret ? ret : -EBADMSG;
}
dev_info(priv->dev, "Verification of Upgrade Image passed!\n");
-free_message:
- devm_kfree(priv->dev, message);
-free_response:
- devm_kfree(priv->dev, response);
-free_response_msg:
- devm_kfree(priv->dev, response_msg);
-
- return ret;
+ return 0;
}
static int mpfs_auto_update_set_image_address(struct mpfs_auto_update_priv *priv,
@@ -406,23 +387,15 @@ static const struct fw_upload_ops mpfs_auto_update_ops = {
static int mpfs_auto_update_available(struct mpfs_auto_update_priv *priv)
{
- struct mpfs_mss_response *response;
- struct mpfs_mss_msg *message;
- u32 *response_msg;
+ u32 *response_msg __free(kfree) =
+ kzalloc(AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(*response_msg), GFP_KERNEL);
+ struct mpfs_mss_response *response __free(kfree) =
+ kzalloc(sizeof(struct mpfs_mss_response), GFP_KERNEL);
+ struct mpfs_mss_msg *message __free(kfree) =
+ kzalloc(sizeof(struct mpfs_mss_msg), GFP_KERNEL);
int ret;
- response_msg = devm_kzalloc(priv->dev,
- AUTO_UPDATE_FEATURE_RESP_SIZE * sizeof(*response_msg),
- GFP_KERNEL);
- if (!response_msg)
- return -ENOMEM;
-
- response = devm_kzalloc(priv->dev, sizeof(struct mpfs_mss_response), GFP_KERNEL);
- if (!response)
- return -ENOMEM;
-
- message = devm_kzalloc(priv->dev, sizeof(struct mpfs_mss_msg), GFP_KERNEL);
- if (!message)
+ if (!response_msg || !response || !message)
return -ENOMEM;
/*
--
2.43.0
next prev parent reply other threads:[~2024-04-10 11:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-10 11:58 [PATCH v1 0/5] PolarFire SoC Auto Update design info support Conor Dooley
2024-04-10 11:58 ` [PATCH v1 1/5] firmware: microchip: support writing bitstream info to flash Conor Dooley
2024-04-10 11:58 ` [PATCH v1 2/5] firmware: microchip: don't unconditionally print validation success Conor Dooley
2024-04-24 20:26 ` Alexandre Ghiti
2024-04-24 20:59 ` Conor Dooley
2024-04-24 21:04 ` Conor Dooley
2024-04-10 11:58 ` [PATCH v1 3/5] firmware: microchip: clarify that sizes and addresses are in hex Conor Dooley
2024-04-10 11:58 ` [PATCH v1 4/5] firmware: microchip: move buffer allocation into mpfs_auto_update_set_image_address() Conor Dooley
2024-04-10 11:58 ` Conor Dooley [this message]
2024-06-05 18:42 ` (subset) [PATCH v1 0/5] PolarFire SoC Auto Update design info support Conor Dooley
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=20240410-glory-patriot-2d7c7876dcfe@spud \
--to=conor@kernel.org \
--cc=conor.dooley@microchip.com \
--cc=cyril.jean@microchip.com \
--cc=daire.mcnamara@microchip.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®