Skip to contentSkip to conversation

perf: arm-cmn: Fix unsigned comparison to less than zero

PATCH In review Gustavo A. R. Silva 2 participants 2 messages Sep 29, 2020

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 perf: arm-cmn: Fix unsigned comparison to less than zero

Fix unsigned comparison to less than zero by assigning the returned value of function platform_get_irq() to a new integer variable _ret_ and then make the comparison. In case the returned value is greater than or equal to zero, assign it to dtc->irq.

Addresses-Coverity-ID: 1497488 ("Unsigned compared against 0")

Fixes 0ba64770a2f2 ("perf: Add Arm CMN-600 PMU driver")
---
 drivers/perf/arm-cmn.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/perf/arm-cmn.c +5 -3
index e824b5b83ea2..383b67042677 100644
@@ -1246,11 +1246,13 @@ static int arm_cmn_init_dtc(struct arm_cmn *cmn, struct arm_cmn_node *dn, int id
 {
 	struct arm_cmn_dtc *dtc = cmn->dtc + idx;
 	struct arm_cmn_node *xp;
+	int ret;
 
 	dtc->base = dn->pmu_base - CMN_PMU_OFFSET;
-	dtc->irq = platform_get_irq(to_platform_device(cmn->dev), idx);
-	if (dtc->irq < 0)
-		return dtc->irq;
+	ret = platform_get_irq(to_platform_device(cmn->dev), idx);
+	if (ret < 0)
+		return ret;
+	dtc->irq = ret;
 
 	writel_relaxed(0, dtc->base + CMN_DT_PMCR);
 	writel_relaxed(0x1ff, dtc->base + CMN_DT_PMOVSR_CLR);
Signature · 1 line
2.27.0
maintainer
#1 lore raw
Quoted 20 lines · Gustavo A. R. Silva

Fix unsigned comparison to less than zero by assigning the returned value of function platform_get_irq() to a new integer variable _ret_ and then make the comparison. In case the returned value is greater than or equal to zero, assign it to dtc->irq.

Addresses-Coverity-ID: 1497488 ("Unsigned compared against 0")

Fixes 0ba64770a2f2 ("perf: Add Arm CMN-600 PMU driver")
---
 drivers/perf/arm-cmn.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/perf/arm-cmn.c +0 -0
index e824b5b83ea2..383b67042677 100644
@@ -1246,11 +1246,13 @@ static int arm_cmn_init_dtc(struct arm_cmn *cmn, struct arm_cmn_node *dn, int id
 {
 	struct arm_cmn_dtc *dtc = cmn->dtc + idx;
 	struct arm_cmn_node *xp;

drivers/perf/arm-cmn.c static int arm_cmn_init_dtc(struct arm_cmn *cmn, struct arm_cmn_node *dn, int id · line 1255

Quoted 10 lines
drivers/perf/arm-cmn.c +5 -3
+	int ret;
 
 	dtc->base = dn->pmu_base - CMN_PMU_OFFSET;
-	dtc->irq = platform_get_irq(to_platform_device(cmn->dev), idx);
-	if (dtc->irq < 0)
-		return dtc->irq;
+	ret = platform_get_irq(to_platform_device(cmn->dev), idx);
+	if (ret < 0)
+		return ret;
+	dtc->irq = ret;

Why don't we just change the type of the 'irq' field in 'struct arm_cmn_dtc' to be 'int' instead of 'unsigned int'?

Robin?

Will