From 0d563d039030bfa997a388c8ec2538789ed8bebd Mon Sep 17 00:00:00 2001 From: nbd Date: Fri, 9 Jan 2009 03:06:37 +0000 Subject: b44: fix misalignment and space-saving in rx packet handling (significant throughput and cpu load improvement) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13946 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches-2.6.25/212-b44_alignment_fix.patch | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 target/linux/brcm47xx/patches-2.6.25/212-b44_alignment_fix.patch (limited to 'target/linux/brcm47xx/patches-2.6.25') diff --git a/target/linux/brcm47xx/patches-2.6.25/212-b44_alignment_fix.patch b/target/linux/brcm47xx/patches-2.6.25/212-b44_alignment_fix.patch new file mode 100644 index 000000000..d65c37e44 --- /dev/null +++ b/target/linux/brcm47xx/patches-2.6.25/212-b44_alignment_fix.patch @@ -0,0 +1,48 @@ +--- a/drivers/net/b44.c ++++ b/drivers/net/b44.c +@@ -73,8 +73,8 @@ + (BP)->tx_cons - (BP)->tx_prod - TX_RING_GAP(BP)) + #define NEXT_TX(N) (((N) + 1) & (B44_TX_RING_SIZE - 1)) + +-#define RX_PKT_OFFSET 30 +-#define RX_PKT_BUF_SZ (1536 + RX_PKT_OFFSET + 64) ++#define RX_PKT_OFFSET (RX_HEADER_LEN + 2) ++#define RX_PKT_BUF_SZ (1536 + RX_PKT_OFFSET) + + /* minimum number of free TX descriptors required to wake up TX process */ + #define B44_TX_WAKEUP_THRESH (B44_TX_RING_SIZE / 4) +@@ -682,7 +682,6 @@ static int b44_alloc_rx_skb(struct b44 * + } + + rh = (struct rx_header *) skb->data; +- skb_reserve(skb, RX_PKT_OFFSET); + + rh->len = 0; + rh->flags = 0; +@@ -693,13 +692,13 @@ static int b44_alloc_rx_skb(struct b44 * + if (src_map != NULL) + src_map->skb = NULL; + +- ctrl = (DESC_CTRL_LEN & (RX_PKT_BUF_SZ - RX_PKT_OFFSET)); ++ ctrl = (DESC_CTRL_LEN & RX_PKT_BUF_SZ); + if (dest_idx == (B44_RX_RING_SIZE - 1)) + ctrl |= DESC_CTRL_EOT; + + dp = &bp->rx_ring[dest_idx]; + dp->ctrl = cpu_to_le32(ctrl); +- dp->addr = cpu_to_le32((u32) mapping + RX_PKT_OFFSET + bp->dma_offset); ++ dp->addr = cpu_to_le32((u32) mapping + bp->dma_offset); + + if (bp->flags & B44_FLAG_RX_RING_HACK) + b44_sync_dma_desc_for_device(bp->sdev, bp->rx_ring_dma, +@@ -809,8 +808,8 @@ static int b44_rx(struct b44 *bp, int bu + dma_unmap_single(bp->sdev->dma_dev, map, + skb_size, DMA_FROM_DEVICE); + /* Leave out rx_header */ +- skb_put(skb, len + RX_PKT_OFFSET); +- skb_pull(skb, RX_PKT_OFFSET); ++ skb_put(skb, len + RX_PKT_OFFSET); ++ skb_pull(skb, RX_PKT_OFFSET); + } else { + struct sk_buff *copy_skb; + -- cgit v1.2.3