net/mlx4_core: clean up cq_res_start_move_to()
authorPaul Bolle <[email protected]>
Tue, 14 Jan 2014 19:45:36 +0000 (20:45 +0100)
committerDavid S. Miller <[email protected]>
Fri, 17 Jan 2014 00:04:47 +0000 (16:04 -0800)
Building resource_tracker.o triggers a GCC warning:
    drivers/net/ethernet/mellanox/mlx4/resource_tracker.c: In function 'mlx4_HW2SW_CQ_wrapper':
    drivers/net/ethernet/mellanox/mlx4/resource_tracker.c:3019:16: warning: 'cq' may be used uninitialized in this function [-Wmaybe-uninitialized]
      atomic_dec(&cq->mtt->ref_count);
                    ^

This is a false positive. But a cleanup of cq_res_start_move_to() can
help GCC here. The code currently uses a switch statement where an
if/else construct would do too, since only two of the switch's four
cases can ever occur. Dropping that switch makes the warning go away.

While we're at it, add some missing braces.

Signed-off-by: Paul Bolle <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c

index 2e3232cad0ae27573d7679936933492206939c49..7abd20c19544cf3a76575d5a37a34d845a3a3f42 100644 (file)
@@ -1340,43 +1340,29 @@ static int cq_res_start_move_to(struct mlx4_dev *dev, int slave, int cqn,
 
        spin_lock_irq(mlx4_tlock(dev));
        r = res_tracker_lookup(&tracker->res_tree[RES_CQ], cqn);
-       if (!r)
+       if (!r) {
                err = -ENOENT;
-       else if (r->com.owner != slave)
+       } else if (r->com.owner != slave) {
                err = -EPERM;
-       else {
-               switch (state) {
-               case RES_CQ_BUSY:
-                       err = -EBUSY;
-                       break;
-
-               case RES_CQ_ALLOCATED:
-                       if (r->com.state != RES_CQ_HW)
-                               err = -EINVAL;
-                       else if (atomic_read(&r->ref_count))
-                               err = -EBUSY;
-                       else
-                               err = 0;
-                       break;
-
-               case RES_CQ_HW:
-                       if (r->com.state != RES_CQ_ALLOCATED)
-                               err = -EINVAL;
-                       else
-                               err = 0;
-                       break;
-
-               default:
+       } else if (state == RES_CQ_ALLOCATED) {
+               if (r->com.state != RES_CQ_HW)
                        err = -EINVAL;
-               }
+               else if (atomic_read(&r->ref_count))
+                       err = -EBUSY;
+               else
+                       err = 0;
+       } else if (state != RES_CQ_HW || r->com.state != RES_CQ_ALLOCATED) {
+               err = -EINVAL;
+       } else {
+               err = 0;
+       }
 
-               if (!err) {
-                       r->com.from_state = r->com.state;
-                       r->com.to_state = state;
-                       r->com.state = RES_CQ_BUSY;
-                       if (cq)
-                               *cq = r;
-               }
+       if (!err) {
+               r->com.from_state = r->com.state;
+               r->com.to_state = state;
+               r->com.state = RES_CQ_BUSY;
+               if (cq)
+                       *cq = r;
        }
 
        spin_unlock_irq(mlx4_tlock(dev));