diff options
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_common.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 16 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_type.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_common.c | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_type.h | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf_main.c | 33 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c | 2 |
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); | |||
272 | void i40evf_reset_interrupt_capability(struct i40evf_adapter *adapter); | 272 | void i40evf_reset_interrupt_capability(struct i40evf_adapter *adapter); |
273 | int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter); | 273 | int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter); |
274 | void i40evf_irq_enable_queues(struct i40evf_adapter *adapter, u32 mask); | 274 | void i40evf_irq_enable_queues(struct i40evf_adapter *adapter, u32 mask); |
275 | void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter); | ||
276 | void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter); | ||
275 | 277 | ||
276 | void i40e_napi_add_all(struct i40evf_adapter *adapter); | 278 | void i40e_napi_add_all(struct i40evf_adapter *adapter); |
277 | void i40e_napi_del_all(struct i40evf_adapter *adapter); | 279 | void 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" |
29 | static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter); | 29 | static int i40evf_setup_all_tx_resources(struct i40evf_adapter *adapter); |
30 | static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter); | 30 | static int i40evf_setup_all_rx_resources(struct i40evf_adapter *adapter); |
31 | static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter); | ||
32 | static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter); | ||
33 | static int i40evf_close(struct net_device *netdev); | 31 | static int i40evf_close(struct net_device *netdev); |
34 | 32 | ||
35 | char i40evf_driver_name[] = "i40evf"; | 33 | char 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 | **/ |
1727 | static void i40evf_free_all_tx_resources(struct i40evf_adapter *adapter) | 1721 | void 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 | **/ |
1797 | static void i40evf_free_all_rx_resources(struct i40evf_adapter *adapter) | 1791 | void 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); |