|
@@ -28,8 +28,6 @@
|
|
#include "i40e_prototype.h"
|
|
#include "i40e_prototype.h"
|
|
static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter);
|
|
static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter);
|
|
static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter);
|
|
static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter);
|
|
-static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter);
|
|
|
|
-static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter);
|
|
|
|
static int i40evf_close(struct net_device *netdev);
|
|
static int i40evf_close(struct net_device *netdev);
|
|
|
|
|
|
char i40evf_driver_name[] = "i40evf";
|
|
char i40evf_driver_name[] = "i40evf";
|
|
@@ -1358,6 +1356,11 @@ static void i40evf_watchdog_task(struct work_struct *work)
|
|
goto watchdog_done;
|
|
goto watchdog_done;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (adapter->aq_required & I40EVF_FLAG_AQ_DISABLE_QUEUES) {
|
|
|
|
+ i40evf_disable_queues(adapter);
|
|
|
|
+ goto watchdog_done;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (adapter->aq_required & I40EVF_FLAG_AQ_MAP_VECTORS) {
|
|
if (adapter->aq_required & I40EVF_FLAG_AQ_MAP_VECTORS) {
|
|
i40evf_map_queues(adapter);
|
|
i40evf_map_queues(adapter);
|
|
goto watchdog_done;
|
|
goto watchdog_done;
|
|
@@ -1383,11 +1386,6 @@ static void i40evf_watchdog_task(struct work_struct *work)
|
|
goto watchdog_done;
|
|
goto watchdog_done;
|
|
}
|
|
}
|
|
|
|
|
|
- if (adapter->aq_required & I40EVF_FLAG_AQ_DISABLE_QUEUES) {
|
|
|
|
- i40evf_disable_queues(adapter);
|
|
|
|
- goto watchdog_done;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (adapter->aq_required & I40EVF_FLAG_AQ_CONFIGURE_QUEUES) {
|
|
if (adapter->aq_required & I40EVF_FLAG_AQ_CONFIGURE_QUEUES) {
|
|
i40evf_configure_queues(adapter);
|
|
i40evf_configure_queues(adapter);
|
|
goto watchdog_done;
|
|
goto watchdog_done;
|
|
@@ -1724,7 +1722,7 @@ out:
|
|
*
|
|
*
|
|
* Free all transmit software resources
|
|
* Free all transmit software resources
|
|
**/
|
|
**/
|
|
-static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter)
|
|
|
|
|
|
+void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
|
|
|
|
@@ -1794,7 +1792,7 @@ static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter)
|
|
*
|
|
*
|
|
* Free all receive software resources
|
|
* Free all receive software resources
|
|
**/
|
|
**/
|
|
-static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter)
|
|
|
|
|
|
+void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
|
|
|
|
@@ -1824,7 +1822,7 @@ static int i40evf_open(struct net_device *netdev)
|
|
dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n");
|
|
dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n");
|
|
return -EIO;
|
|
return -EIO;
|
|
}
|
|
}
|
|
- if (adapter->state != __I40EVF_DOWN)
|
|
|
|
|
|
+ if (adapter->state != __I40EVF_DOWN || adapter->aq_required)
|
|
return -EBUSY;
|
|
return -EBUSY;
|
|
|
|
|
|
/* allocate transmit descriptors */
|
|
/* allocate transmit descriptors */
|
|
@@ -1888,9 +1886,6 @@ static int i40evf_close(struct net_device *netdev)
|
|
adapter->state = __I40EVF_DOWN;
|
|
adapter->state = __I40EVF_DOWN;
|
|
i40evf_free_traffic_irqs(adapter);
|
|
i40evf_free_traffic_irqs(adapter);
|
|
|
|
|
|
- i40evf_free_all_tx_resources(adapter);
|
|
|
|
- i40evf_free_all_rx_resources(adapter);
|
|
|
|
-
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2504,6 +2499,8 @@ static void i40evf_remove(struct pci_dev *pdev)
|
|
iounmap(hw->hw_addr);
|
|
iounmap(hw->hw_addr);
|
|
pci_release_regions(pdev);
|
|
pci_release_regions(pdev);
|
|
|
|
|
|
|
|
+ i40evf_free_all_tx_resources(adapter);
|
|
|
|
+ i40evf_free_all_rx_resources(adapter);
|
|
i40evf_free_queues(adapter);
|
|
i40evf_free_queues(adapter);
|
|
kfree(adapter->vf_res);
|
|
kfree(adapter->vf_res);
|
|
/* If we got removed before an up/down sequence, we've got a filter
|
|
/* If we got removed before an up/down sequence, we've got a filter
|