From: Jonas Svennebring <jonas.svennebr...@gmail.com>

commit 3e528cb7bae00ba0d73def6645d0f2fa906ee3e8 upstream

The bitfield allocation function returns error condition
as a negative value, but in two cases its result
was assigned to an unsigned member of the hw_perf_event
structure, thus the error would not be ever detected.

Fixed by using an intermediate, signed variable.

Reported-by: Dan Carpenter <dan.carpen...@oracle.com>
Signed-off-by: Pawel Moll <pawel.m...@arm.com>
Signed-off-by: Olof Johansson <o...@lixom.net>
Signed-off-by: Jonas Svennebring <jonas.svennebr...@gmail.com>
---
 drivers/bus/arm-ccn.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/arm-ccn.c b/drivers/bus/arm-ccn.c
index a08a39b..c38e9d1 100644
--- a/drivers/bus/arm-ccn.c
+++ b/drivers/bus/arm-ccn.c
@@ -591,7 +591,7 @@ static int arm_ccn_pmu_event_init(struct perf_event *event)
        struct arm_ccn *ccn;
        struct hw_perf_event *hw = &event->hw;
        u32 node_xp, type, event_id;
-       int valid;
+       int valid, bit;
        struct arm_ccn_component *source;
        int i;
 
@@ -713,17 +713,18 @@ static int arm_ccn_pmu_event_init(struct perf_event 
*event)
 
        /* Allocate an event source or a watchpoint */
        if (type == CCN_TYPE_XP && event_id == CCN_EVENT_WATCHPOINT)
-               hw->config_base = arm_ccn_pmu_alloc_bit(source->xp.dt_cmp_mask,
+               bit = arm_ccn_pmu_alloc_bit(source->xp.dt_cmp_mask,
                                CCN_NUM_XP_WATCHPOINTS);
        else
-               hw->config_base = arm_ccn_pmu_alloc_bit(source->pmu_events_mask,
+               bit = arm_ccn_pmu_alloc_bit(source->pmu_events_mask,
                                CCN_NUM_PMU_EVENTS);
-       if (hw->config_base < 0) {
+       if (bit < 0) {
                dev_warn(ccn->dev, "No more event sources/watchpoints on 
node/XP %d!\n",
                                node_xp);
                clear_bit(hw->idx, ccn->dt.pmu_counters_mask);
                return -EAGAIN;
        }
+       hw->config_base = bit;
 
        ccn->dt.pmu_counters[hw->idx].event = event;
 
-- 
1.8.1.4

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to