Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pmdomain: qcom: cpr: Simplify locking with guard()

Simplify error handling (less gotos) over locks with guard().

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: Konrad Dybcio <konradybcio@kernel.org>
Link: https://lore.kernel.org/r/20240823-cleanup-h-guard-pm-domain-v1-6-8320722eaf39@linaro.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Krzysztof Kozlowski and committed by
Ulf Hansson
ba3a65c6 584dc41b

+23 -34
+23 -34
drivers/pmdomain/qcom/cpr.c
··· 4 4 * Copyright (c) 2019, Linaro Limited 5 5 */ 6 6 7 + #include <linux/cleanup.h> 7 8 #include <linux/module.h> 8 9 #include <linux/err.h> 9 10 #include <linux/debugfs.h> ··· 748 747 struct cpr_drv *drv = container_of(domain, struct cpr_drv, pd); 749 748 struct corner *corner, *end; 750 749 enum voltage_change_dir dir; 751 - int ret = 0, new_uV; 750 + int ret, new_uV; 752 751 753 - mutex_lock(&drv->lock); 752 + guard(mutex)(&drv->lock); 754 753 755 754 dev_dbg(drv->dev, "%s: setting perf state: %u (prev state: %u)\n", 756 755 __func__, state, cpr_get_cur_perf_state(drv)); ··· 761 760 */ 762 761 corner = drv->corners + state - 1; 763 762 end = &drv->corners[drv->num_corners - 1]; 764 - if (corner > end || corner < drv->corners) { 765 - ret = -EINVAL; 766 - goto unlock; 767 - } 763 + if (corner > end || corner < drv->corners) 764 + return -EINVAL; 768 765 769 766 /* Determine direction */ 770 767 if (drv->corner > corner) ··· 782 783 783 784 ret = cpr_scale_voltage(drv, corner, new_uV, dir); 784 785 if (ret) 785 - goto unlock; 786 + return ret; 786 787 787 788 if (cpr_is_allowed(drv)) { 788 789 cpr_irq_clr(drv); ··· 793 794 794 795 drv->corner = corner; 795 796 796 - unlock: 797 - mutex_unlock(&drv->lock); 798 - 799 - return ret; 797 + return 0; 800 798 } 801 799 802 800 static int ··· 1433 1437 { 1434 1438 struct cpr_drv *drv = container_of(domain, struct cpr_drv, pd); 1435 1439 const struct acc_desc *acc_desc = drv->acc_desc; 1436 - int ret = 0; 1440 + int ret; 1437 1441 1438 - mutex_lock(&drv->lock); 1442 + guard(mutex)(&drv->lock); 1439 1443 1440 1444 dev_dbg(drv->dev, "attach callback for: %s\n", dev_name(dev)); 1441 1445 ··· 1447 1451 * additional initialization when further CPUs get attached. 1448 1452 */ 1449 1453 if (drv->attached_cpu_dev) 1450 - goto unlock; 1454 + return 0; 1451 1455 1452 1456 /* 1453 1457 * cpr_scale_voltage() requires the direction (if we are changing ··· 1459 1463 * the first time cpr_set_performance_state() is called. 1460 1464 */ 1461 1465 drv->cpu_clk = devm_clk_get(dev, NULL); 1462 - if (IS_ERR(drv->cpu_clk)) { 1463 - ret = dev_err_probe(drv->dev, PTR_ERR(drv->cpu_clk), 1464 - "could not get cpu clk\n"); 1465 - goto unlock; 1466 - } 1466 + if (IS_ERR(drv->cpu_clk)) 1467 + return dev_err_probe(drv->dev, PTR_ERR(drv->cpu_clk), 1468 + "could not get cpu clk\n"); 1469 + 1467 1470 drv->attached_cpu_dev = dev; 1468 1471 1469 1472 dev_dbg(drv->dev, "using cpu clk from: %s\n", ··· 1479 1484 ret = dev_pm_opp_get_opp_count(&drv->pd.dev); 1480 1485 if (ret < 0) { 1481 1486 dev_err(drv->dev, "could not get OPP count\n"); 1482 - goto unlock; 1487 + return ret; 1483 1488 } 1484 1489 drv->num_corners = ret; 1485 1490 1486 1491 if (drv->num_corners < 2) { 1487 1492 dev_err(drv->dev, "need at least 2 OPPs to use CPR\n"); 1488 - ret = -EINVAL; 1489 - goto unlock; 1493 + return -EINVAL; 1490 1494 } 1491 1495 1492 1496 drv->corners = devm_kcalloc(drv->dev, drv->num_corners, 1493 1497 sizeof(*drv->corners), 1494 1498 GFP_KERNEL); 1495 - if (!drv->corners) { 1496 - ret = -ENOMEM; 1497 - goto unlock; 1498 - } 1499 + if (!drv->corners) 1500 + return -ENOMEM; 1499 1501 1500 1502 ret = cpr_corner_init(drv); 1501 1503 if (ret) 1502 - goto unlock; 1504 + return ret; 1503 1505 1504 1506 cpr_set_loop_allowed(drv); 1505 1507 1506 1508 ret = cpr_init_parameters(drv); 1507 1509 if (ret) 1508 - goto unlock; 1510 + return ret; 1509 1511 1510 1512 /* Configure CPR HW but keep it disabled */ 1511 1513 ret = cpr_config(drv); 1512 1514 if (ret) 1513 - goto unlock; 1515 + return ret; 1514 1516 1515 1517 ret = cpr_find_initial_corner(drv); 1516 1518 if (ret) 1517 - goto unlock; 1519 + return ret; 1518 1520 1519 1521 if (acc_desc->config) 1520 1522 regmap_multi_reg_write(drv->tcsr, acc_desc->config, ··· 1526 1534 dev_info(drv->dev, "driver initialized with %u OPPs\n", 1527 1535 drv->num_corners); 1528 1536 1529 - unlock: 1530 - mutex_unlock(&drv->lock); 1531 - 1532 - return ret; 1537 + return 0; 1533 1538 } 1534 1539 1535 1540 static int cpr_debug_info_show(struct seq_file *s, void *unused)