mailbox: Use guard/scoped_guard for con_mutex
authorPeng Fan <peng.fan@nxp.com>
Fri, 11 Apr 2025 13:14:13 +0000 (21:14 +0800)
committerJassi Brar <jassisinghbrar@gmail.com>
Mon, 26 May 2025 21:23:39 +0000 (16:23 -0500)
Use guard and scoped_guard for con_mutex to simplify code.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
drivers/mailbox/mailbox.c

index 3c3bdf278b8e729f494b0e61c008b63dbc4f9344..0d2f3ab79189731974a58bf7b90a60c972f7261f 100644 (file)
@@ -6,6 +6,7 @@
  * Author: Jassi Brar <jassisinghbrar@gmail.com>
  */
 
+#include <linux/cleanup.h>
 #include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/err.h>
@@ -370,13 +371,9 @@ static int __mbox_bind_client(struct mbox_chan *chan, struct mbox_client *cl)
  */
 int mbox_bind_client(struct mbox_chan *chan, struct mbox_client *cl)
 {
-       int ret;
-
-       mutex_lock(&con_mutex);
-       ret = __mbox_bind_client(chan, cl);
-       mutex_unlock(&con_mutex);
+       guard(mutex)(&con_mutex);
 
-       return ret;
+       return __mbox_bind_client(chan, cl);
 }
 EXPORT_SYMBOL_GPL(mbox_bind_client);
 
@@ -417,28 +414,25 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index)
                return ERR_PTR(ret);
        }
 
-       mutex_lock(&con_mutex);
+       scoped_guard(mutex, &con_mutex) {
+               chan = ERR_PTR(-EPROBE_DEFER);
+               list_for_each_entry(mbox, &mbox_cons, node)
+                       if (mbox->dev->of_node == spec.np) {
+                               chan = mbox->of_xlate(mbox, &spec);
+                               if (!IS_ERR(chan))
+                                       break;
+                       }
 
-       chan = ERR_PTR(-EPROBE_DEFER);
-       list_for_each_entry(mbox, &mbox_cons, node)
-               if (mbox->dev->of_node == spec.np) {
-                       chan = mbox->of_xlate(mbox, &spec);
-                       if (!IS_ERR(chan))
-                               break;
-               }
+               of_node_put(spec.np);
 
-       of_node_put(spec.np);
+               if (IS_ERR(chan))
+                       return chan;
 
-       if (IS_ERR(chan)) {
-               mutex_unlock(&con_mutex);
-               return chan;
+               ret = __mbox_bind_client(chan, cl);
+               if (ret)
+                       chan = ERR_PTR(ret);
        }
 
-       ret = __mbox_bind_client(chan, cl);
-       if (ret)
-               chan = ERR_PTR(ret);
-
-       mutex_unlock(&con_mutex);
        return chan;
 }
 EXPORT_SYMBOL_GPL(mbox_request_channel);
@@ -547,9 +541,8 @@ int mbox_controller_register(struct mbox_controller *mbox)
        if (!mbox->of_xlate)
                mbox->of_xlate = of_mbox_index_xlate;
 
-       mutex_lock(&con_mutex);
-       list_add_tail(&mbox->node, &mbox_cons);
-       mutex_unlock(&con_mutex);
+       scoped_guard(mutex, &con_mutex)
+               list_add_tail(&mbox->node, &mbox_cons);
 
        return 0;
 }
@@ -566,17 +559,15 @@ void mbox_controller_unregister(struct mbox_controller *mbox)
        if (!mbox)
                return;
 
-       mutex_lock(&con_mutex);
-
-       list_del(&mbox->node);
+       scoped_guard(mutex, &con_mutex) {
+               list_del(&mbox->node);
 
-       for (i = 0; i < mbox->num_chans; i++)
-               mbox_free_channel(&mbox->chans[i]);
+               for (i = 0; i < mbox->num_chans; i++)
+                       mbox_free_channel(&mbox->chans[i]);
 
-       if (mbox->txdone_poll)
-               hrtimer_cancel(&mbox->poll_hrt);
-
-       mutex_unlock(&con_mutex);
+               if (mbox->txdone_poll)
+                       hrtimer_cancel(&mbox->poll_hrt);
+       }
 }
 EXPORT_SYMBOL_GPL(mbox_controller_unregister);