Commit 6e634ba8 authored by Andrew Morton's avatar Andrew Morton Committed by David S. Miller

[TG3]: Use mmiowb in tg3_poll

From: <akepner@sgi.com>

Returning from tg3_poll() without flushing the PIO write which reenables
interrupts can result in lower cpu utilization and higher throughput.  So
use a memory barrier, mmiowb(), instead of flushing the write with a PIO
read.
Signed-off-by: default avatarArthur Kepner <akepner@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ff53177b
......@@ -418,6 +418,20 @@ static void tg3_enable_ints(struct tg3 *tp)
tg3_cond_int(tp);
}
/* tg3_restart_ints
* similar to tg3_enable_ints, but it can return without flushing the
* PIO write which reenables interrupts
*/
static void tg3_restart_ints(struct tg3 *tp)
{
tw32(TG3PCI_MISC_HOST_CTRL,
(tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000000);
mmiowb();
tg3_cond_int(tp);
}
static inline void tg3_netif_stop(struct tg3 *tp)
{
netif_poll_disable(tp->dev);
......@@ -2789,7 +2803,7 @@ static int tg3_poll(struct net_device *netdev, int *budget)
if (done) {
spin_lock_irqsave(&tp->lock, flags);
__netif_rx_complete(netdev);
tg3_enable_ints(tp);
tg3_restart_ints(tp);
spin_unlock_irqrestore(&tp->lock, flags);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment