diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2012-07-12 01:52:53 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2012-07-17 21:55:13 -0400 |
commit | ac802f5dfe56139a288df50c89c820412863cd8a (patch) | |
tree | 5d626b4d6719161ab774b36587facd0ffa94c804 | |
parent | de3d5b94bc891c405b8d91d3c112681a0654613f (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.c | 58 | ||||
-rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 36 |
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 | **/ |
352 | static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter) | 352 | static 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 | |||
375 | done: | ||
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 | ||
386 | static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter, | 371 | static 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 | **/ |
713 | static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter) | 698 | static 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; | |
782 | out: | ||
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 | ||
827 | err_alloc_q_vectors: | 798 | err_alloc_q_vectors: |
828 | ixgbe_reset_interrupt_capability(adapter); | 799 | ixgbe_reset_interrupt_capability(adapter); |
829 | err_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 | ||
4819 | err_set_queues: | ||
4820 | ixgbe_free_irq(adapter); | ||
4805 | err_req_irq: | 4821 | err_req_irq: |
4806 | ixgbe_free_all_rx_resources(adapter); | 4822 | ixgbe_free_all_rx_resources(adapter); |
4807 | err_setup_rx: | 4823 | err_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 | ||