aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-03-29 16:38:08 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-29 16:38:08 -0400
commit4d92a3e9b90e23eaf7d893d1841cd0391403b99a (patch)
tree1dcbb57df6f5cd8cab926e10a29824d451c92faf
parentafb0bc972b5269a2046a1194c475d929c62fc1a3 (diff)
parent3182b25e1764142600a231050ae0182ba627da72 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue
Jeff Kirsher says: ==================== Intel Wired LAN Driver Updates 2015-03-27 This series contains updates to i40e and i40evf. Jesse adds new device IDs to handle the new 20G speed for KR2. Mitch provides a fix for an issue that shows up as a panic or memory corruption when the device is brought down while under heavy stress. This is resolved by delaying the releasing of resources until we receive acknowledgment from the PF driver that the rings have indeed been stopped. Also adds firmware version information to ethtool reporting to align with ixgbevf behavior. Akeem increases the polling loop limiter, sine we found that in certain circumstances the firmware can take longer to be ready after a reset. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_common.c4
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_ethtool.c16
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c6
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_type.h1
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_common.c1
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_type.h3
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf.h2
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c2
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf_main.c33
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c2
10 files changed, 46 insertions, 24 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index d9f1fcb9c2be..d596f6624025 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -51,6 +51,7 @@ static i40e_status i40e_set_mac_type(struct i40e_hw *hw)
51 case I40E_DEV_ID_QSFP_B: 51 case I40E_DEV_ID_QSFP_B:
52 case I40E_DEV_ID_QSFP_C: 52 case I40E_DEV_ID_QSFP_C:
53 case I40E_DEV_ID_10G_BASE_T: 53 case I40E_DEV_ID_10G_BASE_T:
54 case I40E_DEV_ID_20G_KR2:
54 hw->mac.type = I40E_MAC_XL710; 55 hw->mac.type = I40E_MAC_XL710;
55 break; 56 break;
56 case I40E_DEV_ID_VF: 57 case I40E_DEV_ID_VF:
@@ -841,6 +842,7 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
841 case I40E_PHY_TYPE_10GBASE_KX4: 842 case I40E_PHY_TYPE_10GBASE_KX4:
842 case I40E_PHY_TYPE_10GBASE_KR: 843 case I40E_PHY_TYPE_10GBASE_KR:
843 case I40E_PHY_TYPE_40GBASE_KR4: 844 case I40E_PHY_TYPE_40GBASE_KR4:
845 case I40E_PHY_TYPE_20GBASE_KR2:
844 media = I40E_MEDIA_TYPE_BACKPLANE; 846 media = I40E_MEDIA_TYPE_BACKPLANE;
845 break; 847 break;
846 case I40E_PHY_TYPE_SGMII: 848 case I40E_PHY_TYPE_SGMII:
@@ -857,7 +859,7 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
857} 859}
858 860
859#define I40E_PF_RESET_WAIT_COUNT_A0 200 861#define I40E_PF_RESET_WAIT_COUNT_A0 200
860#define I40E_PF_RESET_WAIT_COUNT 110 862#define I40E_PF_RESET_WAIT_COUNT 200
861/** 863/**
862 * i40e_pf_reset - Reset the PF 864 * i40e_pf_reset - Reset the PF
863 * @hw: pointer to the hardware structure 865 * @hw: pointer to the hardware structure
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
index b7d0aaac5480..c848b1862512 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
@@ -274,6 +274,12 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
274 case I40E_PHY_TYPE_40GBASE_LR4: 274 case I40E_PHY_TYPE_40GBASE_LR4:
275 ecmd->supported = SUPPORTED_40000baseLR4_Full; 275 ecmd->supported = SUPPORTED_40000baseLR4_Full;
276 break; 276 break;
277 case I40E_PHY_TYPE_20GBASE_KR2:
278 ecmd->supported = SUPPORTED_Autoneg |
279 SUPPORTED_20000baseKR2_Full;
280 ecmd->advertising = ADVERTISED_Autoneg |
281 ADVERTISED_20000baseKR2_Full;
282 break;
277 case I40E_PHY_TYPE_10GBASE_KX4: 283 case I40E_PHY_TYPE_10GBASE_KX4:
278 ecmd->supported = SUPPORTED_Autoneg | 284 ecmd->supported = SUPPORTED_Autoneg |
279 SUPPORTED_10000baseKX4_Full; 285 SUPPORTED_10000baseKX4_Full;
@@ -353,6 +359,9 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
353 /* need a SPEED_40000 in ethtool.h */ 359 /* need a SPEED_40000 in ethtool.h */
354 ethtool_cmd_speed_set(ecmd, 40000); 360 ethtool_cmd_speed_set(ecmd, 40000);
355 break; 361 break;
362 case I40E_LINK_SPEED_20GB:
363 ethtool_cmd_speed_set(ecmd, SPEED_20000);
364 break;
356 case I40E_LINK_SPEED_10GB: 365 case I40E_LINK_SPEED_10GB:
357 ethtool_cmd_speed_set(ecmd, SPEED_10000); 366 ethtool_cmd_speed_set(ecmd, SPEED_10000);
358 break; 367 break;
@@ -418,6 +427,11 @@ static void i40e_get_settings_link_down(struct i40e_hw *hw,
418 if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB) 427 if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB)
419 ecmd->advertising |= ADVERTISED_100baseT_Full; 428 ecmd->advertising |= ADVERTISED_100baseT_Full;
420 break; 429 break;
430 case I40E_DEV_ID_20G_KR2:
431 /* backplane 20G */
432 ecmd->supported = SUPPORTED_20000baseKR2_Full;
433 ecmd->advertising = ADVERTISED_20000baseKR2_Full;
434 break;
421 default: 435 default:
422 /* all the rest are 10G/1G */ 436 /* all the rest are 10G/1G */
423 ecmd->supported = SUPPORTED_10000baseT_Full | 437 ecmd->supported = SUPPORTED_10000baseT_Full |
@@ -633,6 +647,8 @@ static int i40e_set_settings(struct net_device *netdev,
633 advertise & ADVERTISED_10000baseKX4_Full || 647 advertise & ADVERTISED_10000baseKX4_Full ||
634 advertise & ADVERTISED_10000baseKR_Full) 648 advertise & ADVERTISED_10000baseKR_Full)
635 config.link_speed |= I40E_LINK_SPEED_10GB; 649 config.link_speed |= I40E_LINK_SPEED_10GB;
650 if (advertise & ADVERTISED_20000baseKR2_Full)
651 config.link_speed |= I40E_LINK_SPEED_20GB;
636 if (advertise & ADVERTISED_40000baseKR4_Full || 652 if (advertise & ADVERTISED_40000baseKR4_Full ||
637 advertise & ADVERTISED_40000baseCR4_Full || 653 advertise & ADVERTISED_40000baseCR4_Full ||
638 advertise & ADVERTISED_40000baseSR4_Full || 654 advertise & ADVERTISED_40000baseSR4_Full ||
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index bc87968098d9..845bceeda645 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -39,7 +39,7 @@ static const char i40e_driver_string[] =
39 39
40#define DRV_VERSION_MAJOR 1 40#define DRV_VERSION_MAJOR 1
41#define DRV_VERSION_MINOR 2 41#define DRV_VERSION_MINOR 2
42#define DRV_VERSION_BUILD 37 42#define DRV_VERSION_BUILD 43
43#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \ 43#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
44 __stringify(DRV_VERSION_MINOR) "." \ 44 __stringify(DRV_VERSION_MINOR) "." \
45 __stringify(DRV_VERSION_BUILD) DRV_KERN 45 __stringify(DRV_VERSION_BUILD) DRV_KERN
@@ -75,6 +75,7 @@ static const struct pci_device_id i40e_pci_tbl[] = {
75 {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0}, 75 {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_B), 0},
76 {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0}, 76 {PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_C), 0},
77 {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T), 0}, 77 {PCI_VDEVICE(INTEL, I40E_DEV_ID_10G_BASE_T), 0},
78 {PCI_VDEVICE(INTEL, I40E_DEV_ID_20G_KR2), 0},
78 /* required last entry */ 79 /* required last entry */
79 {0, } 80 {0, }
80}; 81};
@@ -4639,6 +4640,9 @@ static void i40e_print_link_message(struct i40e_vsi *vsi, bool isup)
4639 case I40E_LINK_SPEED_40GB: 4640 case I40E_LINK_SPEED_40GB:
4640 strlcpy(speed, "40 Gbps", SPEED_SIZE); 4641 strlcpy(speed, "40 Gbps", SPEED_SIZE);
4641 break; 4642 break;
4643 case I40E_LINK_SPEED_20GB:
4644 strncpy(speed, "20 Gbps", SPEED_SIZE);
4645 break;
4642 case I40E_LINK_SPEED_10GB: 4646 case I40E_LINK_SPEED_10GB:
4643 strlcpy(speed, "10 Gbps", SPEED_SIZE); 4647 strlcpy(speed, "10 Gbps", SPEED_SIZE);
4644 break; 4648 break;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_type.h b/drivers/net/ethernet/intel/i40e/i40e_type.h
index 83032d2c2275..67c7bc9e9c21 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_type.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_type.h
@@ -44,6 +44,7 @@
44#define I40E_DEV_ID_QSFP_B 0x1584 44#define I40E_DEV_ID_QSFP_B 0x1584
45#define I40E_DEV_ID_QSFP_C 0x1585 45#define I40E_DEV_ID_QSFP_C 0x1585
46#define I40E_DEV_ID_10G_BASE_T 0x1586 46#define I40E_DEV_ID_10G_BASE_T 0x1586
47#define I40E_DEV_ID_20G_KR2 0x1587
47#define I40E_DEV_ID_VF 0x154C 48#define I40E_DEV_ID_VF 0x154C
48#define I40E_DEV_ID_VF_HV 0x1571 49#define I40E_DEV_ID_VF_HV 0x1571
49 50
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_common.c b/drivers/net/ethernet/intel/i40evf/i40e_common.c
index f07b9ff2b823..39fcb1dc4ea6 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40evf/i40e_common.c
@@ -51,6 +51,7 @@ i40e_status i40e_set_mac_type(struct i40e_hw *hw)
51 case I40E_DEV_ID_QSFP_B: 51 case I40E_DEV_ID_QSFP_B:
52 case I40E_DEV_ID_QSFP_C: 52 case I40E_DEV_ID_QSFP_C:
53 case I40E_DEV_ID_10G_BASE_T: 53 case I40E_DEV_ID_10G_BASE_T:
54 case I40E_DEV_ID_20G_KR2:
54 hw->mac.type = I40E_MAC_XL710; 55 hw->mac.type = I40E_MAC_XL710;
55 break; 56 break;
56 case I40E_DEV_ID_VF: 57 case I40E_DEV_ID_VF:
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_type.h b/drivers/net/ethernet/intel/i40evf/i40e_type.h
index eba6e4b34f70..9c79cb6abb2b 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_type.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_type.h
@@ -44,7 +44,8 @@
44#define I40E_DEV_ID_QSFP_B 0x1584 44#define I40E_DEV_ID_QSFP_B 0x1584
45#define I40E_DEV_ID_QSFP_C 0x1585 45#define I40E_DEV_ID_QSFP_C 0x1585
46#define I40E_DEV_ID_10G_BASE_T 0x1586 46#define I40E_DEV_ID_10G_BASE_T 0x1586
47#define I40E_DEV_ID_VF 0x154C 47#define I40E_DEV_ID_20G_KR2 0x1587
48#define I40E_DEV_ID_VF 0x154C
48#define I40E_DEV_ID_VF_HV 0x1571 49#define I40E_DEV_ID_VF_HV 0x1571
49 50
50#define i40e_is_40G_device(d) ((d) == I40E_DEV_ID_QSFP_A || \ 51#define i40e_is_40G_device(d) ((d) == I40E_DEV_ID_QSFP_A || \
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf.h b/drivers/net/ethernet/intel/i40evf/i40evf.h
index 981224743c73..34c8565031f6 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf.h
+++ b/drivers/net/ethernet/intel/i40evf/i40evf.h
@@ -272,6 +272,8 @@ void i40evf_update_stats(struct i40evf_adapter *adapter);
272void i40evf_reset_interrupt_capability(struct i40evf_adapter *adapter); 272void i40evf_reset_interrupt_capability(struct i40evf_adapter *adapter);
273int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter); 273int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter);
274void i40evf_irq_enable_queues(struct i40evf_adapter *adapter, u32 mask); 274void i40evf_irq_enable_queues(struct i40evf_adapter *adapter, u32 mask);
275void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter);
276void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter);
275 277
276void i40e_napi_add_all(struct i40evf_adapter *adapter); 278void i40e_napi_add_all(struct i40evf_adapter *adapter);
277void i40e_napi_del_all(struct i40evf_adapter *adapter); 279void i40e_napi_del_all(struct i40evf_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c b/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c
index b68b73163311..f4e77665bc54 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c
@@ -209,7 +209,7 @@ static void i40evf_get_drvinfo(struct net_device *netdev,
209 209
210 strlcpy(drvinfo->driver, i40evf_driver_name, 32); 210 strlcpy(drvinfo->driver, i40evf_driver_name, 32);
211 strlcpy(drvinfo->version, i40evf_driver_version, 32); 211 strlcpy(drvinfo->version, i40evf_driver_version, 32);
212 212 strlcpy(drvinfo->fw_version, "N/A", 4);
213 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); 213 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), 32);
214} 214}
215 215
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index 812b1200f35c..b08efafee1ae 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -28,8 +28,6 @@
28#include "i40e_prototype.h" 28#include "i40e_prototype.h"
29static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter); 29static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter);
30static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter); 30static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter);
31static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter);
32static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter);
33static int i40evf_close(struct net_device *netdev); 31static int i40evf_close(struct net_device *netdev);
34 32
35char i40evf_driver_name[] = "i40evf"; 33char i40evf_driver_name[] = "i40evf";
@@ -973,8 +971,10 @@ void i40evf_down(struct i40evf_adapter *adapter)
973 &adapter->crit_section)) 971 &adapter->crit_section))
974 usleep_range(500, 1000); 972 usleep_range(500, 1000);
975 973
976 i40evf_irq_disable(adapter); 974 netif_carrier_off(netdev);
975 netif_tx_disable(netdev);
977 i40evf_napi_disable_all(adapter); 976 i40evf_napi_disable_all(adapter);
977 i40evf_irq_disable(adapter);
978 978
979 /* remove all MAC filters */ 979 /* remove all MAC filters */
980 list_for_each_entry(f, &adapter->mac_filter_list, list) { 980 list_for_each_entry(f, &adapter->mac_filter_list, list) {
@@ -997,13 +997,7 @@ void i40evf_down(struct i40evf_adapter *adapter)
997 adapter->aq_required |= I40EVF_FLAG_AQ_DEL_VLAN_FILTER; 997 adapter->aq_required |= I40EVF_FLAG_AQ_DEL_VLAN_FILTER;
998 adapter->aq_required |= I40EVF_FLAG_AQ_DISABLE_QUEUES; 998 adapter->aq_required |= I40EVF_FLAG_AQ_DISABLE_QUEUES;
999 } 999 }
1000 netif_tx_disable(netdev);
1001
1002 netif_tx_stop_all_queues(netdev);
1003 1000
1004 msleep(20);
1005
1006 netif_carrier_off(netdev);
1007 clear_bit(__I40EVF_IN_CRITICAL_TASK, &adapter->crit_section); 1001 clear_bit(__I40EVF_IN_CRITICAL_TASK, &adapter->crit_section);
1008} 1002}
1009 1003
@@ -1358,6 +1352,11 @@ static void i40evf_watchdog_task(struct work_struct *work)
1358 goto watchdog_done; 1352 goto watchdog_done;
1359 } 1353 }
1360 1354
1355 if (adapter->aq_required & I40EVF_FLAG_AQ_DISABLE_QUEUES) {
1356 i40evf_disable_queues(adapter);
1357 goto watchdog_done;
1358 }
1359
1361 if (adapter->aq_required & I40EVF_FLAG_AQ_MAP_VECTORS) { 1360 if (adapter->aq_required & I40EVF_FLAG_AQ_MAP_VECTORS) {
1362 i40evf_map_queues(adapter); 1361 i40evf_map_queues(adapter);
1363 goto watchdog_done; 1362 goto watchdog_done;
@@ -1383,11 +1382,6 @@ static void i40evf_watchdog_task(struct work_struct *work)
1383 goto watchdog_done; 1382 goto watchdog_done;
1384 } 1383 }
1385 1384
1386 if (adapter->aq_required & I40EVF_FLAG_AQ_DISABLE_QUEUES) {
1387 i40evf_disable_queues(adapter);
1388 goto watchdog_done;
1389 }
1390
1391 if (adapter->aq_required & I40EVF_FLAG_AQ_CONFIGURE_QUEUES) { 1385 if (adapter->aq_required & I40EVF_FLAG_AQ_CONFIGURE_QUEUES) {
1392 i40evf_configure_queues(adapter); 1386 i40evf_configure_queues(adapter);
1393 goto watchdog_done; 1387 goto watchdog_done;
@@ -1724,7 +1718,7 @@ out:
1724 * 1718 *
1725 * Free all transmit software resources 1719 * Free all transmit software resources
1726 **/ 1720 **/
1727static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter) 1721void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter)
1728{ 1722{
1729 int i; 1723 int i;
1730 1724
@@ -1794,7 +1788,7 @@ static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter)
1794 * 1788 *
1795 * Free all receive software resources 1789 * Free all receive software resources
1796 **/ 1790 **/
1797static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter) 1791void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter)
1798{ 1792{
1799 int i; 1793 int i;
1800 1794
@@ -1824,7 +1818,7 @@ static int i40evf_open(struct net_device *netdev)
1824 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n"); 1818 dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n");
1825 return -EIO; 1819 return -EIO;
1826 } 1820 }
1827 if (adapter->state != __I40EVF_DOWN) 1821 if (adapter->state != __I40EVF_DOWN || adapter->aq_required)
1828 return -EBUSY; 1822 return -EBUSY;
1829 1823
1830 /* allocate transmit descriptors */ 1824 /* allocate transmit descriptors */
@@ -1888,9 +1882,6 @@ static int i40evf_close(struct net_device *netdev)
1888 adapter->state = __I40EVF_DOWN; 1882 adapter->state = __I40EVF_DOWN;
1889 i40evf_free_traffic_irqs(adapter); 1883 i40evf_free_traffic_irqs(adapter);
1890 1884
1891 i40evf_free_all_tx_resources(adapter);
1892 i40evf_free_all_rx_resources(adapter);
1893
1894 return 0; 1885 return 0;
1895} 1886}
1896 1887
@@ -2504,6 +2495,8 @@ static void i40evf_remove(struct pci_dev *pdev)
2504 iounmap(hw->hw_addr); 2495 iounmap(hw->hw_addr);
2505 pci_release_regions(pdev); 2496 pci_release_regions(pdev);
2506 2497
2498 i40evf_free_all_tx_resources(adapter);
2499 i40evf_free_all_rx_resources(adapter);
2507 i40evf_free_queues(adapter); 2500 i40evf_free_queues(adapter);
2508 kfree(adapter->vf_res); 2501 kfree(adapter->vf_res);
2509 /* If we got removed before an up/down sequence, we've got a filter 2502 /* If we got removed before an up/down sequence, we've got a filter
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
index 3f0c85ecbca6..4240a496dc50 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
@@ -761,6 +761,8 @@ void i40evf_virtchnl_completion(struct i40evf_adapter *adapter,
761 break; 761 break;
762 case I40E_VIRTCHNL_OP_DISABLE_QUEUES: 762 case I40E_VIRTCHNL_OP_DISABLE_QUEUES:
763 adapter->aq_pending &= ~(I40EVF_FLAG_AQ_DISABLE_QUEUES); 763 adapter->aq_pending &= ~(I40EVF_FLAG_AQ_DISABLE_QUEUES);
764 i40evf_free_all_tx_resources(adapter);
765 i40evf_free_all_rx_resources(adapter);
764 break; 766 break;
765 case I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES: 767 case I40E_VIRTCHNL_OP_CONFIG_VSI_QUEUES:
766 adapter->aq_pending &= ~(I40EVF_FLAG_AQ_CONFIGURE_QUEUES); 768 adapter->aq_pending &= ~(I40EVF_FLAG_AQ_CONFIGURE_QUEUES);