aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/i40e/i40e_main.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-03-03 21:16:48 -0500
committerDavid S. Miller <davem@davemloft.net>2015-03-03 21:16:48 -0500
commit71a83a6db6138b9d41d8a0b6b91cb59f6dc4742c (patch)
treef74b6e4e48257ec6ce40b95645ecb8533b9cc1f8 /drivers/net/ethernet/intel/i40e/i40e_main.c
parentb97526f3ff95f92b107f0fb52cbb8627e395429b (diff)
parenta6c5170d1edea97c538c81e377e56c7b5c5b7e63 (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.c44
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
5251exit: 5275exit:
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);