From 705539efb54181dbec9105a98fdc8595b0286ddc Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Sep 02 2010 01:45:56 +0000 Subject: One more velocity fix. --- diff --git a/kernel.spec b/kernel.spec index d1a81f1..26a664d 100644 --- a/kernel.spec +++ b/kernel.spec @@ -48,7 +48,7 @@ Summary: The Linux kernel # reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec). # scripts/rebase.sh should be made to do that for you, actually. # -%global baserelease 15 +%global baserelease 16 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -1896,6 +1896,9 @@ fi # and build. %changelog +* Wed Sep 01 2010 Dave Jones 2.6.35.4-16 +- Another VIA Velocity fix. This time in ifdown path. + * Wed Sep 01 2010 Dave Jones 2.6.35.4-15 - Improved version of the VIA Velocity DMA fix. diff --git a/linux-2.6-via-velocity-dma-fix.patch b/linux-2.6-via-velocity-dma-fix.patch index 3708484..d110646 100644 --- a/linux-2.6-via-velocity-dma-fix.patch +++ b/linux-2.6-via-velocity-dma-fix.patch @@ -33,10 +33,10 @@ Reported-by: Dave Jones Signed-off-by: David S. Miller diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c -index fd69095..4167e1f 100644 +index fd69095..258c368 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c -@@ -1705,28 +1705,21 @@ err_free_dma_rings_0: +@@ -1705,28 +1705,24 @@ err_free_dma_rings_0: * recycle it, if not then unmap the buffer. */ static void velocity_free_tx_buf(struct velocity_info *vptr, @@ -51,7 +51,9 @@ index fd69095..4167e1f 100644 - */ - if (tdinfo->skb_dma) { - int i; -- ++ if (unlikely(!tdinfo->skb)) ++ return; + - for (i = 0; i < tdinfo->nskb_dma; i++) { - size_t pktlen = max_t(size_t, skb->len, ETH_ZLEN); + pci_unmap_single(vptr->pdev, tdinfo->skb_dma[0], @@ -74,7 +76,7 @@ index fd69095..4167e1f 100644 dev_kfree_skb_irq(skb); tdinfo->skb = NULL; } -@@ -1739,22 +1732,8 @@ static void velocity_free_td_ring_entry(struct velocity_info *vptr, +@@ -1739,22 +1735,8 @@ static void velocity_free_td_ring_entry(struct velocity_info *vptr, int q, int n) { struct velocity_td_info *td_info = &(vptr->tx.infos[q][n]); @@ -98,7 +100,7 @@ index fd69095..4167e1f 100644 } /** -@@ -1925,7 +1904,7 @@ static int velocity_tx_srv(struct velocity_info *vptr) +@@ -1925,7 +1907,7 @@ static int velocity_tx_srv(struct velocity_info *vptr) stats->tx_packets++; stats->tx_bytes += tdinfo->skb->len; } @@ -107,7 +109,7 @@ index fd69095..4167e1f 100644 vptr->tx.used[qnum]--; } vptr->tx.tail[qnum] = idx; -@@ -2534,9 +2513,7 @@ static netdev_tx_t velocity_xmit(struct sk_buff *skb, +@@ -2534,9 +2516,7 @@ static netdev_tx_t velocity_xmit(struct sk_buff *skb, return NETDEV_TX_OK; }