diff options
author | David S. Miller <davem@davemloft.net> | 2015-03-03 21:16:48 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-03 21:16:48 -0500 |
commit | 71a83a6db6138b9d41d8a0b6b91cb59f6dc4742c (patch) | |
tree | f74b6e4e48257ec6ce40b95645ecb8533b9cc1f8 /drivers/net/ethernet/intel/i40e/i40e_main.c | |
parent | b97526f3ff95f92b107f0fb52cbb8627e395429b (diff) | |
parent | a6c5170d1edea97c538c81e377e56c7b5c5b7e63 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/rocker/rocker.c
The rocker commit was two overlapping changes, one to rename
the ->vport member to ->pport, and another making the bitmask
expression use '1ULL' instead of plain '1'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_main.c')
-rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_main.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index c3858e7f0e66..56bdaff9f27e 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c | |||
@@ -1507,7 +1507,12 @@ static void i40e_vsi_setup_queue_map(struct i40e_vsi *vsi, | |||
1507 | vsi->tc_config.numtc = numtc; | 1507 | vsi->tc_config.numtc = numtc; |
1508 | vsi->tc_config.enabled_tc = enabled_tc ? enabled_tc : 1; | 1508 | vsi->tc_config.enabled_tc = enabled_tc ? enabled_tc : 1; |
1509 | /* Number of queues per enabled TC */ | 1509 | /* Number of queues per enabled TC */ |
1510 | num_tc_qps = vsi->alloc_queue_pairs/numtc; | 1510 | /* In MFP case we can have a much lower count of MSIx |
1511 | * vectors available and so we need to lower the used | ||
1512 | * q count. | ||
1513 | */ | ||
1514 | qcount = min_t(int, vsi->alloc_queue_pairs, pf->num_lan_msix); | ||
1515 | num_tc_qps = qcount / numtc; | ||
1511 | num_tc_qps = min_t(int, num_tc_qps, I40E_MAX_QUEUES_PER_TC); | 1516 | num_tc_qps = min_t(int, num_tc_qps, I40E_MAX_QUEUES_PER_TC); |
1512 | 1517 | ||
1513 | /* Setup queue offset/count for all TCs for given VSI */ | 1518 | /* Setup queue offset/count for all TCs for given VSI */ |
@@ -2690,8 +2695,15 @@ static void i40e_vsi_config_dcb_rings(struct i40e_vsi *vsi) | |||
2690 | u16 qoffset, qcount; | 2695 | u16 qoffset, qcount; |
2691 | int i, n; | 2696 | int i, n; |
2692 | 2697 | ||
2693 | if (!(vsi->back->flags & I40E_FLAG_DCB_ENABLED)) | 2698 | if (!(vsi->back->flags & I40E_FLAG_DCB_ENABLED)) { |
2694 | return; | 2699 | /* Reset the TC information */ |
2700 | for (i = 0; i < vsi->num_queue_pairs; i++) { | ||
2701 | rx_ring = vsi->rx_rings[i]; | ||
2702 | tx_ring = vsi->tx_rings[i]; | ||
2703 | rx_ring->dcb_tc = 0; | ||
2704 | tx_ring->dcb_tc = 0; | ||
2705 | } | ||
2706 | } | ||
2695 | 2707 | ||
2696 | for (n = 0; n < I40E_MAX_TRAFFIC_CLASS; n++) { | 2708 | for (n = 0; n < I40E_MAX_TRAFFIC_CLASS; n++) { |
2697 | if (!(vsi->tc_config.enabled_tc & (1 << n))) | 2709 | if (!(vsi->tc_config.enabled_tc & (1 << n))) |
@@ -3836,6 +3848,12 @@ static void i40e_clear_interrupt_scheme(struct i40e_pf *pf) | |||
3836 | { | 3848 | { |
3837 | int i; | 3849 | int i; |
3838 | 3850 | ||
3851 | i40e_stop_misc_vector(pf); | ||
3852 | if (pf->flags & I40E_FLAG_MSIX_ENABLED) { | ||
3853 | synchronize_irq(pf->msix_entries[0].vector); | ||
3854 | free_irq(pf->msix_entries[0].vector, pf); | ||
3855 | } | ||
3856 | |||
3839 | i40e_put_lump(pf->irq_pile, 0, I40E_PILE_VALID_BIT-1); | 3857 | i40e_put_lump(pf->irq_pile, 0, I40E_PILE_VALID_BIT-1); |
3840 | for (i = 0; i < pf->num_alloc_vsi; i++) | 3858 | for (i = 0; i < pf->num_alloc_vsi; i++) |
3841 | if (pf->vsi[i]) | 3859 | if (pf->vsi[i]) |
@@ -5246,8 +5264,14 @@ static int i40e_handle_lldp_event(struct i40e_pf *pf, | |||
5246 | 5264 | ||
5247 | /* Wait for the PF's Tx queues to be disabled */ | 5265 | /* Wait for the PF's Tx queues to be disabled */ |
5248 | ret = i40e_pf_wait_txq_disabled(pf); | 5266 | ret = i40e_pf_wait_txq_disabled(pf); |
5249 | if (!ret) | 5267 | if (ret) { |
5268 | /* Schedule PF reset to recover */ | ||
5269 | set_bit(__I40E_PF_RESET_REQUESTED, &pf->state); | ||
5270 | i40e_service_event_schedule(pf); | ||
5271 | } else { | ||
5250 | i40e_pf_unquiesce_all_vsi(pf); | 5272 | i40e_pf_unquiesce_all_vsi(pf); |
5273 | } | ||
5274 | |||
5251 | exit: | 5275 | exit: |
5252 | return ret; | 5276 | return ret; |
5253 | } | 5277 | } |
@@ -5579,7 +5603,8 @@ static void i40e_check_hang_subtask(struct i40e_pf *pf) | |||
5579 | int i, v; | 5603 | int i, v; |
5580 | 5604 | ||
5581 | /* If we're down or resetting, just bail */ | 5605 | /* If we're down or resetting, just bail */ |
5582 | if (test_bit(__I40E_CONFIG_BUSY, &pf->state)) | 5606 | if (test_bit(__I40E_DOWN, &pf->state) || |
5607 | test_bit(__I40E_CONFIG_BUSY, &pf->state)) | ||
5583 | return; | 5608 | return; |
5584 | 5609 | ||
5585 | /* for each VSI/netdev | 5610 | /* for each VSI/netdev |
@@ -9849,6 +9874,7 @@ static void i40e_remove(struct pci_dev *pdev) | |||
9849 | set_bit(__I40E_DOWN, &pf->state); | 9874 | set_bit(__I40E_DOWN, &pf->state); |
9850 | del_timer_sync(&pf->service_timer); | 9875 | del_timer_sync(&pf->service_timer); |
9851 | cancel_work_sync(&pf->service_task); | 9876 | cancel_work_sync(&pf->service_task); |
9877 | i40e_fdir_teardown(pf); | ||
9852 | 9878 | ||
9853 | if (pf->flags & I40E_FLAG_SRIOV_ENABLED) { | 9879 | if (pf->flags & I40E_FLAG_SRIOV_ENABLED) { |
9854 | i40e_free_vfs(pf); | 9880 | i40e_free_vfs(pf); |
@@ -9875,12 +9901,6 @@ static void i40e_remove(struct pci_dev *pdev) | |||
9875 | if (pf->vsi[pf->lan_vsi]) | 9901 | if (pf->vsi[pf->lan_vsi]) |
9876 | i40e_vsi_release(pf->vsi[pf->lan_vsi]); | 9902 | i40e_vsi_release(pf->vsi[pf->lan_vsi]); |
9877 | 9903 | ||
9878 | i40e_stop_misc_vector(pf); | ||
9879 | if (pf->flags & I40E_FLAG_MSIX_ENABLED) { | ||
9880 | synchronize_irq(pf->msix_entries[0].vector); | ||
9881 | free_irq(pf->msix_entries[0].vector, pf); | ||
9882 | } | ||
9883 | |||
9884 | /* shutdown and destroy the HMC */ | 9904 | /* shutdown and destroy the HMC */ |
9885 | if (pf->hw.hmc.hmc_obj) { | 9905 | if (pf->hw.hmc.hmc_obj) { |
9886 | ret_code = i40e_shutdown_lan_hmc(&pf->hw); | 9906 | ret_code = i40e_shutdown_lan_hmc(&pf->hw); |
@@ -10034,6 +10054,8 @@ static void i40e_shutdown(struct pci_dev *pdev) | |||
10034 | wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0)); | 10054 | wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0)); |
10035 | wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); | 10055 | wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); |
10036 | 10056 | ||
10057 | i40e_clear_interrupt_scheme(pf); | ||
10058 | |||
10037 | if (system_state == SYSTEM_POWER_OFF) { | 10059 | if (system_state == SYSTEM_POWER_OFF) { |
10038 | pci_wake_from_d3(pdev, pf->wol_en); | 10060 | pci_wake_from_d3(pdev, pf->wol_en); |
10039 | pci_set_power_state(pdev, PCI_D3hot); | 10061 | pci_set_power_state(pdev, PCI_D3hot); |