|
@@ -2390,7 +2390,7 @@ static uint be_num_rss_want(struct be_adapter *adapter)
|
|
|
return num;
|
|
|
}
|
|
|
|
|
|
-static void be_msix_enable(struct be_adapter *adapter)
|
|
|
+static int be_msix_enable(struct be_adapter *adapter)
|
|
|
{
|
|
|
#define BE_MIN_MSIX_VECTORS 1
|
|
|
int i, status, num_vec, num_roce_vec = 0;
|
|
@@ -2415,13 +2415,17 @@ static void be_msix_enable(struct be_adapter *adapter)
|
|
|
goto done;
|
|
|
} else if (status >= BE_MIN_MSIX_VECTORS) {
|
|
|
num_vec = status;
|
|
|
- if (pci_enable_msix(adapter->pdev, adapter->msix_entries,
|
|
|
- num_vec) == 0)
|
|
|
+ status = pci_enable_msix(adapter->pdev, adapter->msix_entries,
|
|
|
+ num_vec);
|
|
|
+ if (!status)
|
|
|
goto done;
|
|
|
}
|
|
|
|
|
|
dev_warn(dev, "MSIx enable failed\n");
|
|
|
- return;
|
|
|
+ /* INTx is not supported in VFs, so fail probe if enable_msix fails */
|
|
|
+ if (!be_physfn(adapter))
|
|
|
+ return status;
|
|
|
+ return 0;
|
|
|
done:
|
|
|
if (be_roce_supported(adapter)) {
|
|
|
if (num_vec > num_roce_vec) {
|
|
@@ -2435,7 +2439,7 @@ done:
|
|
|
} else
|
|
|
adapter->num_msix_vec = num_vec;
|
|
|
dev_info(dev, "enabled %d MSI-x vector(s)\n", adapter->num_msix_vec);
|
|
|
- return;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static inline int be_msix_vec_get(struct be_adapter *adapter,
|
|
@@ -2646,7 +2650,9 @@ static int be_open(struct net_device *netdev)
|
|
|
if (status)
|
|
|
goto err;
|
|
|
|
|
|
- be_irq_register(adapter);
|
|
|
+ status = be_irq_register(adapter);
|
|
|
+ if (status)
|
|
|
+ goto err;
|
|
|
|
|
|
for_all_rx_queues(adapter, rxo, i)
|
|
|
be_cq_notify(adapter, rxo->cq.id, true, 0);
|
|
@@ -3116,7 +3122,9 @@ static int be_setup(struct be_adapter *adapter)
|
|
|
if (status)
|
|
|
goto err;
|
|
|
|
|
|
- be_msix_enable(adapter);
|
|
|
+ status = be_msix_enable(adapter);
|
|
|
+ if (status)
|
|
|
+ goto err;
|
|
|
|
|
|
status = be_evt_queues_create(adapter);
|
|
|
if (status)
|