IB/mlx5: Avoid system crash when enabling many VFs
authorEli Cohen <eli@mellanox.com>
Sun, 27 Nov 2016 13:18:21 +0000 (15:18 +0200)
committerDoug Ledford <dledford@redhat.com>
Tue, 13 Dec 2016 18:39:47 +0000 (13:39 -0500)
When enabling many VFs, the total amount of DMA mappings increase
significantly. This causes DMA allocations to take a lot of time
since they are serialized in the kernel.

As a result the driver enters into fatal condition due to
timeout and the system hangs. To recover from this we disable
MR cache for VFs.

PFs will still have a full cache and VFs cache can be manipulated
as usual after driver load.

Fixes: e126ba97dba9 ('mlx5: Add driver for Mellanox Connect-IB adapters')
Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx5/mr.c

index 6cbda901f259ac2cdc9ee9e695557bf540fbb682..5258ac870e6aab3880c460ebe8e1ce49b7368be1 100644 (file)
@@ -627,7 +627,8 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev)
                ent->order = i + 2;
                ent->dev = dev;
 
-               if (dev->mdev->profile->mask & MLX5_PROF_MASK_MR_CACHE)
+               if ((dev->mdev->profile->mask & MLX5_PROF_MASK_MR_CACHE) &&
+                   (mlx5_core_is_pf(dev->mdev)))
                        limit = dev->mdev->profile->mr_cache[i].limit;
                else
                        limit = 0;