• Jack Morgenstein's avatar
    IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports · 5b6e7675
    Jack Morgenstein authored
    commit 852f6927 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: 4196670b ("IB/mlx4: Don't allocate range of steerable UD QPs for Ethernet-only device")
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5b6e7675
qp.c 25.9 KB