slimbus: qcom-ngd-ctrl: drop PM runtime counter on transfer error paths
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Fri, 18 Nov 2022 06:52:36 +0000 (06:52 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 23 Nov 2022 18:45:32 +0000 (19:45 +0100)
If transfer in qcom_slim_ngd_xfer_msg_sync() fails, we need to drop the
PM runtime usage counter to have it balanced.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20221118065246.6835-3-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/slimbus/qcom-ngd-ctrl.c

index 964adf7..d48e58c 100644 (file)
@@ -919,21 +919,29 @@ static int qcom_slim_ngd_xfer_msg_sync(struct slim_controller *ctrl,
        DECLARE_COMPLETION_ONSTACK(done);
        int ret, timeout;
 
-       pm_runtime_get_sync(ctrl->dev);
+       ret = pm_runtime_get_sync(ctrl->dev);
+       if (ret < 0)
+               goto pm_put;
 
        txn->comp = &done;
 
        ret = qcom_slim_ngd_xfer_msg(ctrl, txn);
        if (ret)
-               return ret;
+               goto pm_put;
 
        timeout = wait_for_completion_timeout(&done, HZ);
        if (!timeout) {
                dev_err(ctrl->dev, "TX timed out:MC:0x%x,mt:0x%x", txn->mc,
                                txn->mt);
-               return -ETIMEDOUT;
+               ret = -ETIMEDOUT;
+               goto pm_put;
        }
        return 0;
+
+pm_put:
+       pm_runtime_put(ctrl->dev);
+
+       return ret;
 }
 
 static int qcom_slim_ngd_enable_stream(struct slim_stream_runtime *rt)