netdev
[Top] [All Lists]

Re: e1000_clean_tx_ring

To: "Venkatesan, Ganesh" <ganesh.venkatesan@xxxxxxxxx>
Subject: Re: e1000_clean_tx_ring
From: David Greaves <david@xxxxxxxxxxxx>
Date: Tue, 29 Jun 2004 09:08:34 +0100
Cc: Anton Blanchard <anton@xxxxxxxxx>, netdev@xxxxxxxxxxx, cramerj <cramerj@xxxxxxxxx>, "Ronciak, John" <john.ronciak@xxxxxxxxx>
In-reply-to: <468F3FDA28AA87429AD807992E22D07E01967ADD@orsmsx408>
References: <468F3FDA28AA87429AD807992E22D07E01967ADD@orsmsx408>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla Thunderbird 0.6 (X11/20040528)
FYI
It hasn't helped with either of my problems; watchdog timeout or mtu 9000 malloc

David

Venkatesan, Ganesh wrote:

Anton:

We will integrate this patch into the next release of our driver.

Thanks,
ganesh
-------------------------------------------------
Ganesh Venkatesan
Network/Storage Division, Hillsboro, OR

-----Original Message-----
From: Anton Blanchard [mailto:anton@xxxxxxxxx] Sent: Thursday, June 24, 2004 4:23 PM
To: netdev@xxxxxxxxxxx
Cc: cramerj; Ronciak, John; Venkatesan, Ganesh
Subject: e1000_clean_tx_ring


Hi,

I was looking over the e1000 driver and noticed what I think is a bug
in e1000_clean_tx_ring. We wouldnt call pci_unmap_page on tx ring
entries that didnt have ->skb filled, eg zero copy packets.

This is on latest 2.6 BK.

Anton

===== e1000_main.c 1.120 vs edited =====
--- 1.120/drivers/net/e1000/e1000_main.c        Sat Jun 19 10:00:00 2004
+++ edited/e1000_main.c Thu Jun 24 02:16:42 2004
@@ -1070,14 +1070,19 @@

        for(i = 0; i < tx_ring->count; i++) {
                buffer_info = &tx_ring->buffer_info[i];
-               if(buffer_info->skb) {
+               if (buffer_info->dma) {

                        pci_unmap_page(pdev,
                                       buffer_info->dma,
                                       buffer_info->length,
                                       PCI_DMA_TODEVICE);

-                       dev_kfree_skb(buffer_info->skb);
+                       buffer_info->dma = NULL;
+               }
+
+               if (buffer_info->skb) {
+
+                       dev_kfree_skb_any(buffer_info->skb);

                        buffer_info->skb = NULL;
                }







<Prev in Thread] Current Thread [Next in Thread>