net/mlx4: Add a check if there are too many reserved QPs
authorDotan Barak <dotanb@dev.mellanox.co.il>
Thu, 11 Dec 2014 08:57:55 +0000 (10:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Dec 2014 19:47:35 +0000 (14:47 -0500)
The number of reserved QPs is affected both from the firmware and
from the driver's requirements. This patch adds a check that
validates that this number is indeed feasable.

Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il>
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/qp.c

index 40e82edac99d37d8788a0678161a9d8b05b4c53f..8720428c9807b832fd8c45854ee7b8b5d1475929 100644 (file)
@@ -478,6 +478,7 @@ int mlx4_init_qp_table(struct mlx4_dev *dev)
        struct mlx4_qp_table *qp_table = &mlx4_priv(dev)->qp_table;
        int err;
        int reserved_from_top = 0;
+       int reserved_from_bot;
        int k;
 
        spin_lock_init(&qp_table->lock);
@@ -534,9 +535,14 @@ int mlx4_init_qp_table(struct mlx4_dev *dev)
        * b. All the proxy SQPs (8 per function)
        * c. All the tunnel QPs (8 per function)
        */
+       reserved_from_bot = mlx4_num_reserved_sqps(dev);
+       if (reserved_from_bot + reserved_from_top > dev->caps.num_qps) {
+               mlx4_err(dev, "Number of reserved QPs is higher than number of QPs\n");
+               return -EINVAL;
+       }
 
        err = mlx4_bitmap_init(&qp_table->bitmap, dev->caps.num_qps,
-                              (1 << 23) - 1, mlx4_num_reserved_sqps(dev),
+                              (1 << 23) - 1, reserved_from_bot,
                               reserved_from_top);
        if (err)
                return err;
This page took 0.039407 seconds and 5 git commands to generate.