diff options
author | Don Fry <pcnet32@verizon.net> | 2007-03-05 18:13:09 -0800 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-03-06 06:14:54 -0500 |
commit | b2cbbd8e0e8093fbf115ac2669482b016d781c78 (patch) | |
tree | 04d96724cf39fb65e7209da608fcda0f22d14666 | |
parent | 4c44fd009ae79fc04e2c049f708792ad83400dde (diff) | |
download | linux-3.10-b2cbbd8e0e8093fbf115ac2669482b016d781c78.tar.gz linux-3.10-b2cbbd8e0e8093fbf115ac2669482b016d781c78.tar.bz2 linux-3.10-b2cbbd8e0e8093fbf115ac2669482b016d781c78.zip |
pcnet32: Fix PCnet32 performance bug on non-coherent architecutres
The PCnet32 driver always passed the the size of the largest possible packet
to the pci_dma_sync_single_for_cpu and pci_dma_sync_single_for_device.
This results in a fairly large "colateral damage" in the caches and makes
the flush operation itself much slower. On a system with a 40MHz CPU this
patch increases network bandwidth by about 12%.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Acked-by: Don Fry <pcnet32@verizon.net>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/net/pcnet32.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 36f9d988278..4d94ba7899b 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c @@ -1234,14 +1234,14 @@ static void pcnet32_rx_entry(struct net_device *dev, skb_put(skb, pkt_len); /* Make room */ pci_dma_sync_single_for_cpu(lp->pci_dev, lp->rx_dma_addr[entry], - PKT_BUF_SZ - 2, + pkt_len, PCI_DMA_FROMDEVICE); eth_copy_and_sum(skb, (unsigned char *)(lp->rx_skbuff[entry]->data), pkt_len, 0); pci_dma_sync_single_for_device(lp->pci_dev, lp->rx_dma_addr[entry], - PKT_BUF_SZ - 2, + pkt_len, PCI_DMA_FROMDEVICE); } lp->stats.rx_bytes += skb->len; |