net/mlx4_core: Fix checking order in MR table init
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Sun, 3 Nov 2013 08:03:22 +0000 (10:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Nov 2013 21:19:07 +0000 (16:19 -0500)
In procedure mlx4_init_mr_table(), slaves should do no processing,
but should return success. This initialization is hypervisor-only.

However, the check for num_mpts being a power-of-2 was performed
before the check to return immediately if the driver is for a slave.
This resulted in spurious failures.

The order of performing the checks is reversed, so that if the
driver is for a slave, no processing is done and success is returned.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/mr.c

index f91719a..63391a1 100644 (file)
@@ -755,14 +755,14 @@ int mlx4_init_mr_table(struct mlx4_dev *dev)
        struct mlx4_mr_table *mr_table = &priv->mr_table;
        int err;
 
-       if (!is_power_of_2(dev->caps.num_mpts))
-               return -EINVAL;
-
        /* Nothing to do for slaves - all MR handling is forwarded
        * to the master */
        if (mlx4_is_slave(dev))
                return 0;
 
+       if (!is_power_of_2(dev->caps.num_mpts))
+               return -EINVAL;
+
        err = mlx4_bitmap_init(&mr_table->mpt_bitmap, dev->caps.num_mpts,
                               ~0, dev->caps.reserved_mrws, 0);
        if (err)