net/mlx4_core: clean up cq_res_start_move_to()
authorPaul Bolle <pebolle@tiscali.nl>
Tue, 14 Jan 2014 19:45:36 +0000 (20:45 +0100)
committerDavid S. Miller <davem@davemloft.net>
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 <pebolle@tiscali.nl>
Signed-off-by: David S. Miller <davem@davemloft.net>
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));