]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
firmware: microchip: use scope-based cleanup where possible
authorConor Dooley <conor.dooley@microchip.com>
Wed, 10 Apr 2024 11:58:08 +0000 (12:58 +0100)
committerConor Dooley <conor.dooley@microchip.com>
Wed, 5 Jun 2024 18:36:17 +0000 (19:36 +0100)
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

index 5103cac93324c9559626523a659fb33b8d2c081f..30de47895b1ce746e1d8871c5c805b821435fb1a 100644 (file)
@@ -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;
 
        /*