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:
|
||
---|---|---|
.. | ||
alloc.c | ||
catas.c | ||
cmd.c | ||
cq.c | ||
en_clock.c | ||
en_cq.c | ||
en_dcb_nl.c | ||
en_ethtool.c | ||
en_main.c | ||
en_netdev.c | ||
en_port.c | ||
en_port.h | ||
en_resources.c | ||
en_rx.c | ||
en_selftest.c | ||
en_tx.c | ||
eq.c | ||
fw.c | ||
fw.h | ||
fw_qos.c | ||
fw_qos.h | ||
icm.c | ||
icm.h | ||
intf.c | ||
Kconfig | ||
main.c | ||
Makefile | ||
mcg.c | ||
mlx4.h | ||
mlx4_en.h | ||
mlx4_stats.h | ||
mr.c | ||
pd.c | ||
port.c | ||
profile.c | ||
qp.c | ||
reset.c | ||
resource_tracker.c | ||
sense.c | ||
srq.c |