]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: qcom: pbs: simplify locking with guard()
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Thu, 22 Aug 2024 16:48:52 +0000 (18:48 +0200)
committerBjorn Andersson <andersson@kernel.org>
Sun, 6 Oct 2024 03:12:48 +0000 (22:12 -0500)
Simplify error handling (less gotos) over locks with guard().

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20240822164853.231087-3-krzysztof.kozlowski@linaro.org
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
drivers/soc/qcom/qcom-pbs.c

index 77a70d3d0d0b5166ec98a93fc836d5eff9b37dae..1cc5d045f9ddfe1393b7cbde22e0cbba49223ef9 100644 (file)
@@ -84,16 +84,16 @@ int qcom_pbs_trigger_event(struct pbs_dev *pbs, u8 bitmap)
        if (IS_ERR_OR_NULL(pbs))
                return -EINVAL;
 
-       mutex_lock(&pbs->lock);
+       guard(mutex)(&pbs->lock);
        ret = regmap_read(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH2, &val);
        if (ret < 0)
-               goto out;
+               return ret;
 
        if (val == PBS_CLIENT_SCRATCH2_ERROR) {
                /* PBS error - clear SCRATCH2 register */
                ret = regmap_write(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH2, 0);
                if (ret < 0)
-                       goto out;
+                       return ret;
        }
 
        for (bit_pos = 0; bit_pos < 8; bit_pos++) {
@@ -104,37 +104,31 @@ int qcom_pbs_trigger_event(struct pbs_dev *pbs, u8 bitmap)
                ret = regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH2,
                                         BIT(bit_pos), 0);
                if (ret < 0)
-                       goto out_clear_scratch1;
+                       break;
 
                /* Set the PBS sequence bit position */
                ret = regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH1,
                                         BIT(bit_pos), BIT(bit_pos));
                if (ret < 0)
-                       goto out_clear_scratch1;
+                       break;
 
                /* Initiate the SW trigger */
                ret = regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_TRIG_CTL,
                                         PBS_CLIENT_SW_TRIG_BIT, PBS_CLIENT_SW_TRIG_BIT);
                if (ret < 0)
-                       goto out_clear_scratch1;
+                       break;
 
                ret = qcom_pbs_wait_for_ack(pbs, bit_pos);
                if (ret < 0)
-                       goto out_clear_scratch1;
+                       break;
 
                /* Clear the PBS sequence bit position */
                regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH1, BIT(bit_pos), 0);
                regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH2, BIT(bit_pos), 0);
        }
 
-out_clear_scratch1:
        /* Clear all the requested bitmap */
-       ret = regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH1, bitmap, 0);
-
-out:
-       mutex_unlock(&pbs->lock);
-
-       return ret;
+       return regmap_update_bits(pbs->regmap, pbs->base + PBS_CLIENT_SCRATCH1, bitmap, 0);
 }
 EXPORT_SYMBOL_GPL(qcom_pbs_trigger_event);