Received: with ECARTIS (v1.0.0; list netdev); Thu, 07 Jul 2005 16:22:09 -0700 (PDT) Received: from omx2.sgi.com (omx2-ext.sgi.com [192.48.171.19]) by oss.sgi.com (8.12.10/8.12.10/SuSE Linux 0.7) with ESMTP id j67NM4H9030735 for ; Thu, 7 Jul 2005 16:22:04 -0700 Received: from nodin.corp.sgi.com (fddi-nodin.corp.sgi.com [198.29.75.193]) by omx2.sgi.com (8.12.11/8.12.9/linux-outbound_gateway-1.1) with ESMTP id j681CV6e022381 for ; Thu, 7 Jul 2005 18:12:31 -0700 Received: from cthulhu.engr.sgi.com (cthulhu.engr.sgi.com [192.26.80.2]) by nodin.corp.sgi.com (SGI-8.12.5/8.12.10/SGI_generic_relay-1.2) with ESMTP id j67NKQbT85273697 for ; Thu, 7 Jul 2005 16:20:26 -0700 (PDT) Received: from [192.168.2.20] (mtv-vpn-sw-corp-0-42.corp.sgi.com [134.15.0.42]) by cthulhu.engr.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id j67NJPdP45504187; Thu, 7 Jul 2005 16:19:25 -0700 (PDT) Date: Thu, 7 Jul 2005 16:15:20 -0700 (PDT) From: Arthur Kepner X-X-Sender: akepner@resonance.WorkGroup To: raghavendra.koushik@neterion.com cc: jgarzik@pobox.com, netdev@oss.sgi.com, netdev@vger.kernel.org, ravinandan.arakali@neterion.com, leonid.grossman@neterion.com, rapuru.sriram@neterion.com Subject: Re: [PATCH 2.6.12.1 5/12] S2io: Performance improvements In-Reply-To: <20050707222741.71C3E89826@linux.site> Message-ID: References: <20050707222741.71C3E89826@linux.site> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-archive-position: 2689 X-ecartis-version: Ecartis v1.0.0 Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com X-original-sender: akepner@sgi.com Precedence: bulk X-list: netdev Content-Length: 1331 Lines: 40 On Thu, 7 Jul 2005 raghavendra.koushik@neterion.com wrote: > ....... > 2. Removed unnecessary PIOs(read/write of tx_traffic_int and > rx_traffic_int) from interrupt handler and removed read of > general_int_status register from xmit routine. > ...... > @@ -2891,6 +2869,8 @@ int s2io_xmit(struct sk_buff *skb, struc > val64 = mac_control->fifos[queue].list_info[put_off].list_phy_addr; > writeq(val64, &tx_fifo->TxDL_Pointer); > > + wmb(); > + > val64 = (TX_FIFO_LAST_TXD_NUM(frg_cnt) | TX_FIFO_FIRST_LIST | > TX_FIFO_LAST_LIST); > > @@ -2900,9 +2880,6 @@ int s2io_xmit(struct sk_buff *skb, struc > #endif > writeq(val64, &tx_fifo->List_Control); > > - /* Perform a PCI read to flush previous writes */ > - val64 = readq(&bar0->general_int_status); > - > put_off++; I thought that an mmiowb() was called for here (to order the PIO writes above more cheaply than doing the readq()). I posted a patch like this some time ago: http://marc.theaimsgroup.com/?l=linux-netdev&m=111508292028110&w=2 FWIW, I've done quite a few performance measurements with the patch I posted earlier, and it's worked well. For 1500 byte mtus throughput goes up by ~20%. Is even the mmiowb() unnecessary? What is the wmb() above for? -- Arthur