X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/17c7b6c3fdc48301e50d22cc6138ede16bd1be24..adde7768a2eab2950a7628319ec832c63a00ff03:/target/linux/rb532/patches/240-via_rhine_performance.patch diff --git a/target/linux/rb532/patches/240-via_rhine_performance.patch b/target/linux/rb532/patches/240-via_rhine_performance.patch index e7cdf8ae2..d82b6f705 100644 --- a/target/linux/rb532/patches/240-via_rhine_performance.patch +++ b/target/linux/rb532/patches/240-via_rhine_performance.patch @@ -1,27 +1,33 @@ -diff -ur linux.old/drivers/net/via-rhine.c linux.dev/drivers/net/via-rhine.c ---- linux.old/drivers/net/via-rhine.c 2006-11-29 22:57:37.000000000 +0100 -+++ linux.dev/drivers/net/via-rhine.c 2006-12-14 03:39:01.000000000 +0100 -@@ -33,6 +33,7 @@ +Index: linux-2.6.23.17/drivers/net/via-rhine.c +=================================================================== +--- linux-2.6.23.17.orig/drivers/net/via-rhine.c ++++ linux-2.6.23.17/drivers/net/via-rhine.c +@@ -33,6 +33,8 @@ #define DRV_VERSION "1.4.3" #define DRV_RELDATE "2007-03-06" +#define PKT_ALIGN 1 ++ /* A few user-configurable values. These may be modified when a driver module is loaded. */ -@@ -40,9 +41,11 @@ +@@ -40,6 +42,7 @@ static int debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ static int max_interrupt_work = 20; +#ifndef PKT_ALIGN /* Set the copy breakpoint for the copy-only-tiny-frames scheme. Setting to > 1518 effectively disables this feature. */ + #if defined(__alpha__) || defined(__arm__) || defined(__hppa__) \ +@@ -49,6 +52,7 @@ static int rx_copybreak = 1518; + #else static int rx_copybreak; -+#endif + #endif ++#endif /* PKT_ALIGN */ /* Work-around for broken BIOSes: they are unable to get the chip back out of power state D3 so PXE booting fails. bootparam(7): via-rhine.avoid_D3=1 */ -@@ -105,6 +108,7 @@ +@@ -111,6 +115,7 @@ static const int multicast_filter_limit #include #include #include @@ -29,7 +35,7 @@ diff -ur linux.old/drivers/net/via-rhine.c linux.dev/drivers/net/via-rhine.c #include /* These identify the driver base version and may not be removed. */ -@@ -124,12 +128,14 @@ +@@ -130,12 +135,14 @@ MODULE_LICENSE("GPL"); module_param(max_interrupt_work, int, 0); module_param(debug, int, 0); @@ -46,7 +52,7 @@ diff -ur linux.old/drivers/net/via-rhine.c linux.dev/drivers/net/via-rhine.c /* Theory of Operation -@@ -924,7 +930,7 @@ +@@ -927,7 +934,7 @@ static void alloc_rbufs(struct net_devic /* Fill in the Rx buffers. Handle allocation failure gracefully. */ for (i = 0; i < RX_RING_SIZE; i++) { @@ -55,17 +61,18 @@ diff -ur linux.old/drivers/net/via-rhine.c linux.dev/drivers/net/via-rhine.c rp->rx_skbuff[i] = skb; if (skb == NULL) break; -@@ -1482,6 +1488,9 @@ +@@ -1484,7 +1491,9 @@ static int rhine_rx(struct net_device *d + struct sk_buff *skb; /* Length should omit the CRC */ int pkt_len = data_size - 4; - +- +#ifdef PKT_ALIGN + int i; +#else /* Check if the packet is long enough to accept without copying to a minimally-sized skbuff. */ if (pkt_len < rx_copybreak && -@@ -1501,7 +1510,9 @@ +@@ -1503,7 +1512,9 @@ static int rhine_rx(struct net_device *d rp->rx_skbuff_dma[entry], rp->rx_buf_sz, PCI_DMA_FROMDEVICE); @@ -76,19 +83,18 @@ diff -ur linux.old/drivers/net/via-rhine.c linux.dev/drivers/net/via-rhine.c skb = rp->rx_skbuff[entry]; if (skb == NULL) { printk(KERN_ERR "%s: Inconsistent Rx " -@@ -1515,6 +1526,14 @@ +@@ -1517,6 +1528,14 @@ static int rhine_rx(struct net_device *d rp->rx_skbuff_dma[entry], rp->rx_buf_sz, PCI_DMA_FROMDEVICE); -+#ifdef PKT_ALIGN ++#ifdef PKT_ALIGN + /* align the data to the ip header - should be faster than copying the entire packet */ + for (i = pkt_len - (pkt_len % 4); i >= 0; i -= 4) { + put_unaligned(*((u32 *) (skb->data + i)), (u32 *) (skb->data + i + 2)); + } + skb->data += 2; + skb->tail += 2; -+#endif ++#endif } skb->protocol = eth_type_trans(skb, dev); #ifdef CONFIG_VIA_RHINE_NAPI -