linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: jacliburn@bellsouth.net
To: jeff@garzik.org
Cc: csnook@redhat.com, linux-kernel@vger.kernel.org,
	atl1-devel@lists.sourceforge.net,
	Jay Cliburn <jacliburn@bellsouth.net>
Subject: [PATCH 03/26] atl1: fix broken TSO
Date: Mon, 31 Dec 2007 19:59:41 -0600	[thread overview]
Message-ID: <1199152804-3889-4-git-send-email-jacliburn@bellsouth.net> (raw)
In-Reply-To: <1199152804-3889-1-git-send-email-jacliburn@bellsouth.net>

From: Jay Cliburn <jacliburn@bellsouth.net>

The L1 tx packet descriptor expects TCP Header Length to be expressed as a
number of 32-bit dwords.  The atl1 driver uses tcp_hdrlen() to populate the
field, but tcp_hdrlen() returns the header length in bytes, not in dwords.
Add a shift to convert tcp_hdrlen() to dwords when we write it to the tpd.

Also, some of our bit assignments are made to the wrong tpd words.  Change
those to the correct words.

Finally, since all this fixes TSO, enable TSO by default.

Signed-off-by: Jay Cliburn <jacliburn@bellsouth.net>
---
 drivers/net/atlx/atl1.c |   29 +++++++++++------------------
 1 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
index 0df3f32..4e98c16 100644
--- a/drivers/net/atlx/atl1.c
+++ b/drivers/net/atlx/atl1.c
@@ -36,7 +36,6 @@
  * A very incomplete list of things that need to be dealt with:
  *
  * TODO:
- * Fix TSO; tx performance is horrible with TSO enabled.
  * Wake on LAN.
  * Add more ethtool functions.
  * Fix abstruse irq enable/disable condition described here:
@@ -1308,8 +1307,8 @@ static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb,
 				tso->tsopl |= 1 << TSO_PARAM_ETHTYPE_SHIFT;
 
 			tso->tsopl |= (iph->ihl &
-				CSUM_PARAM_IPHL_MASK) << CSUM_PARAM_IPHL_SHIFT;
-			tso->tsopl |= (tcp_hdrlen(skb) &
+				TSO_PARAM_IPHL_MASK) << TSO_PARAM_IPHL_SHIFT;
+			tso->tsopl |= ((tcp_hdrlen(skb) >> 2) &
 				TSO_PARAM_TCPHDRLEN_MASK) <<
 				TSO_PARAM_TCPHDRLEN_SHIFT;
 			tso->tsopl |= (skb_shinfo(skb)->gso_size &
@@ -1472,8 +1471,8 @@ static void atl1_tx_queue(struct atl1_adapter *adapter, int count,
 		tpd->desc.tso.tsopl = descr->tso.tsopl;
 		tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
 		tpd->desc.data = descr->data;
-		tpd->desc.csum.csumpu |= (cpu_to_le16(buffer_info->length) &
-			CSUM_PARAM_BUFLEN_MASK) << CSUM_PARAM_BUFLEN_SHIFT;
+		tpd->desc.tso.tsopu |= (cpu_to_le16(buffer_info->length) &
+			TSO_PARAM_BUFLEN_MASK) << TSO_PARAM_BUFLEN_SHIFT;
 
 		val = (descr->tso.tsopl >> TSO_PARAM_SEGMENT_SHIFT) &
 			TSO_PARAM_SEGMENT_MASK;
@@ -1481,7 +1480,7 @@ static void atl1_tx_queue(struct atl1_adapter *adapter, int count,
 			tpd->desc.tso.tsopl |= 1 << TSO_PARAM_HDRFLAG_SHIFT;
 
 		if (j == (count - 1))
-			tpd->desc.csum.csumpl |= 1 << CSUM_PARAM_EOP_SHIFT;
+			tpd->desc.tso.tsopl |= 1 << TSO_PARAM_EOP_SHIFT;
 
 		if (++tpd_next_to_use == tpd_ring->count)
 			tpd_next_to_use = 0;
@@ -1574,9 +1573,9 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 		vlan_tag = vlan_tx_tag_get(skb);
 		vlan_tag = (vlan_tag << 4) | (vlan_tag >> 13) |
 			((vlan_tag >> 9) & 0x8);
-		param.csum.csumpl |= 1 << CSUM_PARAM_INSVLAG_SHIFT;
-		param.csum.csumpu |= (vlan_tag & CSUM_PARAM_VALANTAG_MASK) <<
-			CSUM_PARAM_VALAN_SHIFT;
+		param.tso.tsopl |= 1 << TSO_PARAM_INSVLAG_SHIFT;
+		param.tso.tsopu |= (vlan_tag & TSO_PARAM_VLANTAG_MASK) <<
+			TSO_PARAM_VLAN_SHIFT;
 	}
 
 	tso = atl1_tso(adapter, skb, &param.tso);
@@ -1595,8 +1594,8 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 		}
 	}
 
-	val = (param.csum.csumpl >> CSUM_PARAM_SEGMENT_SHIFT) &
-		CSUM_PARAM_SEGMENT_MASK;
+	val = (param.tso.tsopl >> TSO_PARAM_SEGMENT_SHIFT) &
+		TSO_PARAM_SEGMENT_MASK;
 	atl1_tx_map(adapter, skb, 1 == val);
 	atl1_tx_queue(adapter, count, &param);
 	netdev->trans_start = jiffies;
@@ -2091,13 +2090,7 @@ static int __devinit atl1_probe(struct pci_dev *pdev,
 	netdev->features = NETIF_F_HW_CSUM;
 	netdev->features |= NETIF_F_SG;
 	netdev->features |= (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX);
-
-	/*
-	 * FIXME - Until tso performance gets fixed, disable the feature.
-	 * Enable it with ethtool -K if desired.
-	 */
-	/* netdev->features |= NETIF_F_TSO; */
-
+	netdev->features |= NETIF_F_TSO;
 	netdev->features |= NETIF_F_LLTX;
 
 	/*
-- 
1.5.3.3


  parent reply	other threads:[~2008-01-01  2:12 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-01  1:59 [PATCH 00/26] atl1: divide and modernize jacliburn
2008-01-01  1:59 ` [PATCH 01/26] atl1: relocate atl1 driver to /drivers/net/atlx jacliburn
2008-01-01  1:59 ` [PATCH 02/26] atl1: move common functions to atlx files jacliburn
2008-01-01  1:59 ` jacliburn [this message]
2008-01-01  1:59 ` [PATCH 04/26] atl1: add ethtool register dump jacliburn
2008-01-22  9:54   ` Jeff Garzik
2008-01-01  1:59 ` [PATCH 05/26] atl1: print debug info if rrd error jacliburn
2008-01-22  9:55   ` Jeff Garzik
2008-01-01  1:59 ` [PATCH 06/26] atl1: update initialization parameters jacliburn
2008-01-22  9:56   ` Jeff Garzik
2008-01-23  2:13     ` Jay Cliburn
2008-01-23  2:19       ` Jeff Garzik
2008-01-23  2:30       ` Chris Snook
2008-01-01  1:59 ` [PATCH 07/26] atl1: clarify max rx frame size jacliburn
2008-01-01  1:59 ` [PATCH 08/26] atl1: additional DMA engine configuration jacliburn
2008-01-01  1:59 ` [PATCH 09/26] atl1: refactor tx processing jacliburn
2008-01-22  9:58   ` Jeff Garzik
2008-01-23  0:31     ` Jay Cliburn
2008-01-25  1:00       ` Jay Cliburn
2008-01-25  1:08         ` Chris Snook
2008-01-25  3:01         ` Jeff Garzik
2008-01-01  1:59 ` [PATCH 10/26] atl1: use csum_start jacliburn
2008-01-01  1:59 ` [PATCH 11/26] atl1: refactor initialization and startup jacliburn
2008-01-01  1:59 ` [PATCH 12/26] atl1: refactor atl1_probe jacliburn
2008-01-01  1:59 ` [PATCH 13/26] atl1: refactor interrupt handling jacliburn
2008-01-22  9:59   ` Jeff Garzik
2008-01-01  1:59 ` [PATCH 14/26] atl1: move stray defines to header file jacliburn
2008-01-01  1:59 ` [PATCH 15/26] atl1: tidy up ring management jacliburn
2008-01-01  1:59 ` [PATCH 16/26] atl1: modernize check link function jacliburn
2008-01-01  1:59 ` [PATCH 17/26] atl1: update phy config function jacliburn
2008-01-01  1:59 ` [PATCH 18/26] atl1: make function static jacliburn
2008-01-01  1:59 ` [PATCH 19/26] atl1: modernize down/up functions jacliburn
2008-01-22 10:01   ` Jeff Garzik
2008-01-01  1:59 ` [PATCH 20/26] atl1: update change mtu jacliburn
2008-01-01  1:59 ` [PATCH 21/26] atl1: update atl1_close jacliburn
2008-01-01  2:00 ` [PATCH 22/26] atl1: update netpoll jacliburn
2008-01-01  2:00 ` [PATCH 23/26] atl1: update shutdown and remove functions jacliburn
2008-01-01  2:00 ` [PATCH 24/26] atl1: update wake-on-lan jacliburn
2008-01-01  2:00 ` [PATCH 25/26] atl1: add NAPI support jacliburn
2008-01-01  6:09   ` Joonwoo Park
2008-01-01 18:15   ` [PATCH 25/26] [REVISED] " Jay Cliburn
2008-01-02  2:56     ` Joonwoo Park
2008-01-02  3:07       ` David Miller
2008-01-01  2:00 ` [PATCH 26/26] atl1: remove experimental tag and clean up comments jacliburn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1199152804-3889-4-git-send-email-jacliburn@bellsouth.net \
    --to=jacliburn@bellsouth.net \
    --cc=atl1-devel@lists.sourceforge.net \
    --cc=csnook@redhat.com \
    --cc=jeff@garzik.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).