ixgbe: Fix netpoll to be properly multiqueue aware
Our ndo_poll_controller callback is broken for anything but non-multiqueue setups. This fixes that issue. Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
accff95c25
commit
8f9a71673d
|
@ -5360,12 +5360,19 @@ static int ixgbe_del_sanmac_netdev(struct net_device *dev)
|
||||||
static void ixgbe_netpoll(struct net_device *netdev)
|
static void ixgbe_netpoll(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
||||||
|
int i;
|
||||||
|
|
||||||
disable_irq(adapter->pdev->irq);
|
|
||||||
adapter->flags |= IXGBE_FLAG_IN_NETPOLL;
|
adapter->flags |= IXGBE_FLAG_IN_NETPOLL;
|
||||||
ixgbe_intr(adapter->pdev->irq, netdev);
|
if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) {
|
||||||
|
int num_q_vectors = adapter->num_msix_vectors - NON_Q_VECTORS;
|
||||||
|
for (i = 0; i < num_q_vectors; i++) {
|
||||||
|
struct ixgbe_q_vector *q_vector = adapter->q_vector[i];
|
||||||
|
ixgbe_msix_clean_many(0, q_vector);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ixgbe_intr(adapter->pdev->irq, netdev);
|
||||||
|
}
|
||||||
adapter->flags &= ~IXGBE_FLAG_IN_NETPOLL;
|
adapter->flags &= ~IXGBE_FLAG_IN_NETPOLL;
|
||||||
enable_irq(adapter->pdev->irq);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue