aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2012-07-12 01:52:53 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-07-17 21:55:13 -0400
commitac802f5dfe56139a288df50c89c820412863cd8a (patch)
tree5d626b4d6719161ab774b36587facd0ffa94c804
parentde3d5b94bc891c405b8d91d3c112681a0654613f (diff)
ixgbe: Move configuration of set_real_num_rx/tx_queues into open
It makes much more sense for us to configure the real number of Tx and Rx queues in the ixgbe_open call than it does in ixgbe_set_num_queues. By setting the number in ixgbe_open we can avoid a number of unecessary updates and only have to make the calls once. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c58
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c36
2 files changed, 38 insertions, 56 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index d308e7140171..c03d771c5eb9 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -349,7 +349,7 @@ static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter)
349 * fallthrough conditions. 349 * fallthrough conditions.
350 * 350 *
351 **/ 351 **/
352static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter) 352static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
353{ 353{
354 /* Start with base case */ 354 /* Start with base case */
355 adapter->num_rx_queues = 1; 355 adapter->num_rx_queues = 1;
@@ -358,29 +358,14 @@ static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
358 adapter->num_rx_queues_per_pool = 1; 358 adapter->num_rx_queues_per_pool = 1;
359 359
360 if (ixgbe_set_sriov_queues(adapter)) 360 if (ixgbe_set_sriov_queues(adapter))
361 goto done; 361 return;
362 362
363#ifdef CONFIG_IXGBE_DCB 363#ifdef CONFIG_IXGBE_DCB
364 if (ixgbe_set_dcb_queues(adapter)) 364 if (ixgbe_set_dcb_queues(adapter))
365 goto done; 365 return;
366 366
367#endif 367#endif
368 if (ixgbe_set_rss_queues(adapter)) 368 ixgbe_set_rss_queues(adapter);
369 goto done;
370
371 /* fallback to base case */
372 adapter->num_rx_queues = 1;
373 adapter->num_tx_queues = 1;
374
375done:
376 if ((adapter->netdev->reg_state == NETREG_UNREGISTERED) ||
377 (adapter->netdev->reg_state == NETREG_UNREGISTERING))
378 return 0;
379
380 /* Notify the stack of the (possibly) reduced queue counts. */
381 netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues);
382 return netif_set_real_num_rx_queues(adapter->netdev,
383 adapter->num_rx_queues);
384} 369}
385 370
386static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter, 371static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
@@ -710,11 +695,10 @@ static void ixgbe_reset_interrupt_capability(struct ixgbe_adapter *adapter)
710 * Attempt to configure the interrupts using the best available 695 * Attempt to configure the interrupts using the best available
711 * capabilities of the hardware and the kernel. 696 * capabilities of the hardware and the kernel.
712 **/ 697 **/
713static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter) 698static void ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
714{ 699{
715 struct ixgbe_hw *hw = &adapter->hw; 700 struct ixgbe_hw *hw = &adapter->hw;
716 int err = 0; 701 int vector, v_budget, err;
717 int vector, v_budget;
718 702
719 /* 703 /*
720 * It's easy to be greedy for MSI-X vectors, but it really 704 * It's easy to be greedy for MSI-X vectors, but it really
@@ -747,7 +731,7 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
747 ixgbe_acquire_msix_vectors(adapter, v_budget); 731 ixgbe_acquire_msix_vectors(adapter, v_budget);
748 732
749 if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) 733 if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED)
750 goto out; 734 return;
751 } 735 }
752 736
753 adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED; 737 adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
@@ -762,25 +746,17 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
762 if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) 746 if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
763 ixgbe_disable_sriov(adapter); 747 ixgbe_disable_sriov(adapter);
764 748
765 err = ixgbe_set_num_queues(adapter); 749 ixgbe_set_num_queues(adapter);
766 if (err)
767 return err;
768
769 adapter->num_q_vectors = 1; 750 adapter->num_q_vectors = 1;
770 751
771 err = pci_enable_msi(adapter->pdev); 752 err = pci_enable_msi(adapter->pdev);
772 if (!err) { 753 if (err) {
773 adapter->flags |= IXGBE_FLAG_MSI_ENABLED;
774 } else {
775 netif_printk(adapter, hw, KERN_DEBUG, adapter->netdev, 754 netif_printk(adapter, hw, KERN_DEBUG, adapter->netdev,
776 "Unable to allocate MSI interrupt, " 755 "Unable to allocate MSI interrupt, "
777 "falling back to legacy. Error: %d\n", err); 756 "falling back to legacy. Error: %d\n", err);
778 /* reset err */ 757 return;
779 err = 0;
780 } 758 }
781 759 adapter->flags |= IXGBE_FLAG_MSI_ENABLED;
782out:
783 return err;
784} 760}
785 761
786/** 762/**
@@ -798,15 +774,10 @@ int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter)
798 int err; 774 int err;
799 775
800 /* Number of supported queues */ 776 /* Number of supported queues */
801 err = ixgbe_set_num_queues(adapter); 777 ixgbe_set_num_queues(adapter);
802 if (err)
803 return err;
804 778
805 err = ixgbe_set_interrupt_capability(adapter); 779 /* Set interrupt mode */
806 if (err) { 780 ixgbe_set_interrupt_capability(adapter);
807 e_dev_err("Unable to setup interrupt capabilities\n");
808 goto err_set_interrupt;
809 }
810 781
811 err = ixgbe_alloc_q_vectors(adapter); 782 err = ixgbe_alloc_q_vectors(adapter);
812 if (err) { 783 if (err) {
@@ -826,7 +797,6 @@ int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter)
826 797
827err_alloc_q_vectors: 798err_alloc_q_vectors:
828 ixgbe_reset_interrupt_capability(adapter); 799 ixgbe_reset_interrupt_capability(adapter);
829err_set_interrupt:
830 return err; 800 return err;
831} 801}
832 802
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 373342f0b807..7f2aa220501e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4798,10 +4798,26 @@ static int ixgbe_open(struct net_device *netdev)
4798 if (err) 4798 if (err)
4799 goto err_req_irq; 4799 goto err_req_irq;
4800 4800
4801 /* Notify the stack of the actual queue counts. */
4802 err = netif_set_real_num_tx_queues(netdev,
4803 adapter->num_rx_pools > 1 ? 1 :
4804 adapter->num_tx_queues);
4805 if (err)
4806 goto err_set_queues;
4807
4808
4809 err = netif_set_real_num_rx_queues(netdev,
4810 adapter->num_rx_pools > 1 ? 1 :
4811 adapter->num_rx_queues);
4812 if (err)
4813 goto err_set_queues;
4814
4801 ixgbe_up_complete(adapter); 4815 ixgbe_up_complete(adapter);
4802 4816
4803 return 0; 4817 return 0;
4804 4818
4819err_set_queues:
4820 ixgbe_free_irq(adapter);
4805err_req_irq: 4821err_req_irq:
4806 ixgbe_free_all_rx_resources(adapter); 4822 ixgbe_free_all_rx_resources(adapter);
4807err_setup_rx: 4823err_setup_rx:
@@ -4864,23 +4880,19 @@ static int ixgbe_resume(struct pci_dev *pdev)
4864 4880
4865 pci_wake_from_d3(pdev, false); 4881 pci_wake_from_d3(pdev, false);
4866 4882
4867 rtnl_lock();
4868 err = ixgbe_init_interrupt_scheme(adapter);
4869 rtnl_unlock();
4870 if (err) {
4871 e_dev_err("Cannot initialize interrupts for device\n");
4872 return err;
4873 }
4874
4875 ixgbe_reset(adapter); 4883 ixgbe_reset(adapter);
4876 4884
4877 IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0); 4885 IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0);
4878 4886
4879 if (netif_running(netdev)) { 4887 rtnl_lock();
4888 err = ixgbe_init_interrupt_scheme(adapter);
4889 if (!err && netif_running(netdev))
4880 err = ixgbe_open(netdev); 4890 err = ixgbe_open(netdev);
4881 if (err) 4891
4882 return err; 4892 rtnl_unlock();
4883 } 4893
4894 if (err)
4895 return err;
4884 4896
4885 netif_device_attach(netdev); 4897 netif_device_attach(netdev);
4886 4898