IB/hfi1: Fix incorrect available receive user context count
The addition of the VNIC contexts to num_rcv_contexts changes the
meaning of the sysfs value nctxts from available user contexts, to
user contexts + reserved VNIC contexts.
User applications that use nctxts are now broken.
Update the calculation so that VNIC contexts are used only if there are
hardware contexts available, and do not silently affect nctxts.
Update code to use the calculated VNIC context number.
Update the sysfs value nctxts to be available user contexts only.
Fixes: 2280740f01
("IB/hfi1: Virtual Network Interface Controller (VNIC) HW support")
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Niranjana Vishwanathapura <Niranjana.Vishwanathapura@intel.com>
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Cc: <Stable@vger.kernel.org> #v4.12+
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
e08aa59476
commit
d7d626179f
@@ -840,6 +840,9 @@ struct net_device *hfi1_vnic_alloc_rn(struct ib_device *device,
|
||||
struct rdma_netdev *rn;
|
||||
int i, size, rc;
|
||||
|
||||
if (!dd->num_vnic_contexts)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (!port_num || (port_num > dd->num_pports))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
@@ -848,7 +851,7 @@ struct net_device *hfi1_vnic_alloc_rn(struct ib_device *device,
|
||||
|
||||
size = sizeof(struct opa_vnic_rdma_netdev) + sizeof(*vinfo);
|
||||
netdev = alloc_netdev_mqs(size, name, name_assign_type, setup,
|
||||
dd->chip_sdma_engines, HFI1_NUM_VNIC_CTXT);
|
||||
dd->chip_sdma_engines, dd->num_vnic_contexts);
|
||||
if (!netdev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
@@ -856,7 +859,7 @@ struct net_device *hfi1_vnic_alloc_rn(struct ib_device *device,
|
||||
vinfo = opa_vnic_dev_priv(netdev);
|
||||
vinfo->dd = dd;
|
||||
vinfo->num_tx_q = dd->chip_sdma_engines;
|
||||
vinfo->num_rx_q = HFI1_NUM_VNIC_CTXT;
|
||||
vinfo->num_rx_q = dd->num_vnic_contexts;
|
||||
vinfo->netdev = netdev;
|
||||
rn->free_rdma_netdev = hfi1_vnic_free_rn;
|
||||
rn->set_id = hfi1_vnic_set_vesw_id;
|
||||
|
Reference in New Issue
Block a user