Received: with ECARTIS (v1.0.0; list netdev); Thu, 06 Jan 2005 05:10:19 -0800 (PST) Received: from fmsfmr005.fm.intel.com (fmr15.intel.com [192.55.52.69]) by oss.sgi.com (8.13.0/8.13.0) with ESMTP id j06DAEuW004558 for ; Thu, 6 Jan 2005 05:10:14 -0800 Received: from fmsfmr101.fm.intel.com (fmsfmr101.fm.intel.com [10.1.192.59]) by fmsfmr005.fm.intel.com (8.12.10/8.12.10/d: major-outer.mc,v 1.1 2004/09/17 17:50:56 root Exp $) with ESMTP id j071A1bh018331; Fri, 7 Jan 2005 01:10:02 GMT Received: from fmsmsxvs041.fm.intel.com (fmsmsxvs041.fm.intel.com [132.233.42.126]) by fmsfmr101.fm.intel.com (8.12.10/8.12.10/d: major-inner.mc,v 1.2 2004/09/17 18:05:01 root Exp $) with SMTP id j0719uIZ007111; Fri, 7 Jan 2005 01:10:01 GMT Received: from isotope.jf.intel.com ([10.23.51.62]) by fmsmsxvs041.fm.intel.com (SAVSMTP 3.1.2.35) with SMTP id M2005010617100023806 ; Thu, 06 Jan 2005 17:10:00 -0800 Date: Thu, 6 Jan 2005 17:10:00 -0800 (PST) From: Ganesh Venkatesan To: "jgarzik@pobox.com" cc: netdev Subject: [PATCH 2.4 7/13] e1000: fix tx resource cleanup logic Message-ID: ReplyTo: "Ganesh Venkatesan" MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Scanned-By: MIMEDefang 2.44 X-Virus-Scanned: ClamAV 0.80/650/Sun Jan 2 19:00:02 2005 clamav-milter version 0.80j on 127.0.0.1 X-Virus-Status: Clean X-archive-position: 13511 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: ganesh.venkatesan@intel.com Precedence: bulk X-list: netdev Signed-off-by: Ganesh Venkatesan diff -up net-drivers-2.4/drivers/net/e1000/e1000_main.c net-drivers-2.4/drivers/net/e1000.new/e1000_main.c --- net-drivers-2.4/drivers/net/e1000/e1000_main.c 2004-12-06 08:43:11.635381920 -0800 +++ net-drivers-2.4/drivers/net/e1000.new/e1000_main.c 2004-12-06 08:43:12.534245272 -0800 @@ -1054,6 +1054,24 @@ e1000_free_tx_resources(struct e1000_ada adapter->tx_ring.desc = NULL; } +static inline void +e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter, + struct e1000_buffer *buffer_info) +{ + struct pci_dev *pdev = adapter->pdev; + if(buffer_info->dma) { + pci_unmap_page(pdev, + buffer_info->dma, + buffer_info->length, + PCI_DMA_TODEVICE); + buffer_info->dma = 0; + } + if(buffer_info->skb) { + dev_kfree_skb_any(buffer_info->skb); + buffer_info->skb = NULL; + } +} + /** * e1000_clean_tx_ring - Free Tx Buffers * @adapter: board private structure @@ -1064,7 +1082,6 @@ e1000_clean_tx_ring(struct e1000_adapter { struct e1000_desc_ring *tx_ring = &adapter->tx_ring; struct e1000_buffer *buffer_info; - struct pci_dev *pdev = adapter->pdev; unsigned long size; unsigned int i; @@ -1072,17 +1089,7 @@ e1000_clean_tx_ring(struct e1000_adapter for(i = 0; i < tx_ring->count; i++) { buffer_info = &tx_ring->buffer_info[i]; - if(buffer_info->skb) { - - pci_unmap_page(pdev, - buffer_info->dma, - buffer_info->length, - PCI_DMA_TODEVICE); - - dev_kfree_skb(buffer_info->skb); - - buffer_info->skb = NULL; - } + e1000_unmap_and_free_tx_resource(adapter, buffer_info); } size = sizeof(struct e1000_buffer) * tx_ring->count; @@ -2180,7 +2187,6 @@ e1000_clean_tx_irq(struct e1000_adapter { struct e1000_desc_ring *tx_ring = &adapter->tx_ring; struct net_device *netdev = adapter->netdev; - struct pci_dev *pdev = adapter->pdev; struct e1000_tx_desc *tx_desc, *eop_desc; struct e1000_buffer *buffer_info; unsigned int i, eop; @@ -2195,20 +2201,7 @@ e1000_clean_tx_irq(struct e1000_adapter tx_desc = E1000_TX_DESC(*tx_ring, i); buffer_info = &tx_ring->buffer_info[i]; - if(likely(buffer_info->dma)) { - pci_unmap_page(pdev, - buffer_info->dma, - buffer_info->length, - PCI_DMA_TODEVICE); - - buffer_info->dma = 0; - } - - if(buffer_info->skb) { - dev_kfree_skb_any(buffer_info->skb); - buffer_info->skb = NULL; - } - + e1000_unmap_and_free_tx_resource(adapter, buffer_info); tx_desc->buffer_addr = 0; tx_desc->lower.data = 0; tx_desc->upper.data = 0;