mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-11 23:23:52 +08:00
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>
This commit is contained in:
parent
de3d5b94bc
commit
ac802f5dfe
@ -349,7 +349,7 @@ static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter)
|
|||||||
* fallthrough conditions.
|
* fallthrough conditions.
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
|
static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
|
||||||
{
|
{
|
||||||
/* Start with base case */
|
/* Start with base case */
|
||||||
adapter->num_rx_queues = 1;
|
adapter->num_rx_queues = 1;
|
||||||
@ -358,29 +358,14 @@ static int ixgbe_set_num_queues(struct ixgbe_adapter *adapter)
|
|||||||
adapter->num_rx_queues_per_pool = 1;
|
adapter->num_rx_queues_per_pool = 1;
|
||||||
|
|
||||||
if (ixgbe_set_sriov_queues(adapter))
|
if (ixgbe_set_sriov_queues(adapter))
|
||||||
goto done;
|
return;
|
||||||
|
|
||||||
#ifdef CONFIG_IXGBE_DCB
|
#ifdef CONFIG_IXGBE_DCB
|
||||||
if (ixgbe_set_dcb_queues(adapter))
|
if (ixgbe_set_dcb_queues(adapter))
|
||||||
goto done;
|
return;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
if (ixgbe_set_rss_queues(adapter))
|
ixgbe_set_rss_queues(adapter);
|
||||||
goto done;
|
|
||||||
|
|
||||||
/* fallback to base case */
|
|
||||||
adapter->num_rx_queues = 1;
|
|
||||||
adapter->num_tx_queues = 1;
|
|
||||||
|
|
||||||
done:
|
|
||||||
if ((adapter->netdev->reg_state == NETREG_UNREGISTERED) ||
|
|
||||||
(adapter->netdev->reg_state == NETREG_UNREGISTERING))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Notify the stack of the (possibly) reduced queue counts. */
|
|
||||||
netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues);
|
|
||||||
return netif_set_real_num_rx_queues(adapter->netdev,
|
|
||||||
adapter->num_rx_queues);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
|
static void ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter,
|
||||||
@ -710,11 +695,10 @@ static void ixgbe_reset_interrupt_capability(struct ixgbe_adapter *adapter)
|
|||||||
* Attempt to configure the interrupts using the best available
|
* Attempt to configure the interrupts using the best available
|
||||||
* capabilities of the hardware and the kernel.
|
* capabilities of the hardware and the kernel.
|
||||||
**/
|
**/
|
||||||
static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
|
static void ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct ixgbe_hw *hw = &adapter->hw;
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
int err = 0;
|
int vector, v_budget, err;
|
||||||
int vector, v_budget;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* It's easy to be greedy for MSI-X vectors, but it really
|
* 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)
|
|||||||
ixgbe_acquire_msix_vectors(adapter, v_budget);
|
ixgbe_acquire_msix_vectors(adapter, v_budget);
|
||||||
|
|
||||||
if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED)
|
||||||
goto out;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
|
adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
|
||||||
@ -762,25 +746,17 @@ static int ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
|
|||||||
if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
|
||||||
ixgbe_disable_sriov(adapter);
|
ixgbe_disable_sriov(adapter);
|
||||||
|
|
||||||
err = ixgbe_set_num_queues(adapter);
|
ixgbe_set_num_queues(adapter);
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
adapter->num_q_vectors = 1;
|
adapter->num_q_vectors = 1;
|
||||||
|
|
||||||
err = pci_enable_msi(adapter->pdev);
|
err = pci_enable_msi(adapter->pdev);
|
||||||
if (!err) {
|
if (err) {
|
||||||
adapter->flags |= IXGBE_FLAG_MSI_ENABLED;
|
|
||||||
} else {
|
|
||||||
netif_printk(adapter, hw, KERN_DEBUG, adapter->netdev,
|
netif_printk(adapter, hw, KERN_DEBUG, adapter->netdev,
|
||||||
"Unable to allocate MSI interrupt, "
|
"Unable to allocate MSI interrupt, "
|
||||||
"falling back to legacy. Error: %d\n", err);
|
"falling back to legacy. Error: %d\n", err);
|
||||||
/* reset err */
|
return;
|
||||||
err = 0;
|
|
||||||
}
|
}
|
||||||
|
adapter->flags |= IXGBE_FLAG_MSI_ENABLED;
|
||||||
out:
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -798,15 +774,10 @@ int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter)
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Number of supported queues */
|
/* Number of supported queues */
|
||||||
err = ixgbe_set_num_queues(adapter);
|
ixgbe_set_num_queues(adapter);
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
err = ixgbe_set_interrupt_capability(adapter);
|
/* Set interrupt mode */
|
||||||
if (err) {
|
ixgbe_set_interrupt_capability(adapter);
|
||||||
e_dev_err("Unable to setup interrupt capabilities\n");
|
|
||||||
goto err_set_interrupt;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = ixgbe_alloc_q_vectors(adapter);
|
err = ixgbe_alloc_q_vectors(adapter);
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -826,7 +797,6 @@ int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter)
|
|||||||
|
|
||||||
err_alloc_q_vectors:
|
err_alloc_q_vectors:
|
||||||
ixgbe_reset_interrupt_capability(adapter);
|
ixgbe_reset_interrupt_capability(adapter);
|
||||||
err_set_interrupt:
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4798,10 +4798,26 @@ static int ixgbe_open(struct net_device *netdev)
|
|||||||
if (err)
|
if (err)
|
||||||
goto err_req_irq;
|
goto err_req_irq;
|
||||||
|
|
||||||
|
/* Notify the stack of the actual queue counts. */
|
||||||
|
err = netif_set_real_num_tx_queues(netdev,
|
||||||
|
adapter->num_rx_pools > 1 ? 1 :
|
||||||
|
adapter->num_tx_queues);
|
||||||
|
if (err)
|
||||||
|
goto err_set_queues;
|
||||||
|
|
||||||
|
|
||||||
|
err = netif_set_real_num_rx_queues(netdev,
|
||||||
|
adapter->num_rx_pools > 1 ? 1 :
|
||||||
|
adapter->num_rx_queues);
|
||||||
|
if (err)
|
||||||
|
goto err_set_queues;
|
||||||
|
|
||||||
ixgbe_up_complete(adapter);
|
ixgbe_up_complete(adapter);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_set_queues:
|
||||||
|
ixgbe_free_irq(adapter);
|
||||||
err_req_irq:
|
err_req_irq:
|
||||||
ixgbe_free_all_rx_resources(adapter);
|
ixgbe_free_all_rx_resources(adapter);
|
||||||
err_setup_rx:
|
err_setup_rx:
|
||||||
@ -4864,23 +4880,19 @@ static int ixgbe_resume(struct pci_dev *pdev)
|
|||||||
|
|
||||||
pci_wake_from_d3(pdev, false);
|
pci_wake_from_d3(pdev, false);
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
err = ixgbe_init_interrupt_scheme(adapter);
|
|
||||||
rtnl_unlock();
|
|
||||||
if (err) {
|
|
||||||
e_dev_err("Cannot initialize interrupts for device\n");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixgbe_reset(adapter);
|
ixgbe_reset(adapter);
|
||||||
|
|
||||||
IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0);
|
IXGBE_WRITE_REG(&adapter->hw, IXGBE_WUS, ~0);
|
||||||
|
|
||||||
if (netif_running(netdev)) {
|
rtnl_lock();
|
||||||
|
err = ixgbe_init_interrupt_scheme(adapter);
|
||||||
|
if (!err && netif_running(netdev))
|
||||||
err = ixgbe_open(netdev);
|
err = ixgbe_open(netdev);
|
||||||
if (err)
|
|
||||||
return err;
|
rtnl_unlock();
|
||||||
}
|
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
netif_device_attach(netdev);
|
netif_device_attach(netdev);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user