diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index bd709e5..876251c 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -4584,10 +4584,25 @@ static void e1000_netpoll(struct net_device *netdev) { struct e1000_adapter *adapter = netdev_priv(netdev); +#ifdef CONFIG_E1000_NAPI + int budget = 0; + + disable_irq(adapter->pdev->irq); + if (likely(netif_rx_schedule_prep(&adapter->polling_netdev[0]))) { + if (spin_trylock(&adapter->tx_queue_lock)) { + e1000_clean_tx_irq(adapter, &adapter->tx_ring[0]); + spin_unlock(&adapter->tx_queue_lock); + } + adapter->clean_rx(adapter, adapter->rx_ring, + &budget, netdev->weight); + clear_bit(__LINK_STATE_RX_SCHED, + &adapter->polling_netdev[0].state); + } +#else + disable_irq(adapter->pdev->irq); e1000_intr(adapter->pdev->irq, netdev, NULL); e1000_clean_tx_irq(adapter, adapter->tx_ring); -#ifndef CONFIG_E1000_NAPI adapter->clean_rx(adapter, adapter->rx_ring); #endif enable_irq(adapter->pdev->irq);