]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Fri, 12 Jan 2018 05:58:40 +0000 (07:58 +0200)
committerSeth Forshee <seth.forshee@canonical.com>
Fri, 23 Feb 2018 14:26:27 +0000 (08:26 -0600)
commit27065f026f4079c2625a8000667ab307963d4aef
tree38b62e34cc9273e8cabc199392aa6ffa1dcc3d05
parentc2f9f7ed693d3b3c0cce04e3bef6bbc53f216b81
IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports

BugLink: http://bugs.launchpad.net/bugs/1751131
commit 852f6927594d0d3e8632c889b2ab38cbc46476ad upstream.

Allocating steerable UD QPs depends on having at least one IB port,
while releasing those QPs does not.

As a result, when there are only ETH ports, the IB (RoCE) driver
requests releasing a qp range whose base qp is zero, with
qp count zero.

When SR-IOV is enabled, and the VF driver is running on a VM over
a hypervisor which treats such qp release calls as errors
(rather than NOPs), we see lines in the VM message log like:

 mlx4_core 0002:00:02.0: Failed to release qp range base:0 cnt:0

Fix this by adding a check for a zero count in mlx4_release_qp_range()
(which thus treats releasing 0 qps as a nop), and eliminating the
check for device managed flow steering when releasing steerable UD QPs.
(Freeing ib_uc_qpns_bitmap unconditionally is also OK, since it
remains NULL when steerable UD QPs are not allocated).

Fixes: 4196670be786 ("IB/mlx4: Don't allocate range of steerable UD QPs for Ethernet-only device")
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
drivers/infiniband/hw/mlx4/main.c
drivers/net/ethernet/mellanox/mlx4/qp.c