Netdev List
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@linux-foundation.org>
To: "Jon Nelson" <jnelson@jamponi.net>
Cc: "Jarek Poplawski" <jarkao2@o2.pl>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"David S. Miller" <davem@davemloft.net>,
	netdev@vger.kernel.org, jnelson-kernel-bugzilla@jamponi.net
Subject: Re: [PATCH] via-velocity: don't oops on MTU change.
Date: Thu, 15 Nov 2007 20:35:08 -0800	[thread overview]
Message-ID: <20071115203508.4ad025f2@freepuppy.rosehill> (raw)
In-Reply-To: <cccedfc60711151842l4aafe0ffo220e84a5e37b6a82@mail.gmail.com>

On Thu, 15 Nov 2007 20:42:55 -0600
"Jon Nelson" <jnelson@jamponi.net> wrote:

> On 11/15/07, Jarek Poplawski <jarkao2@o2.pl> wrote:
> ..
> 
> > Sure! I was only worried velocity_open() treats dev->mtu
> > a bit different than velocity_change_mtu(), so eg. after:
> >
> > velocity_change_mtu() // dev is down
> > velocity_open()
> > velocity_change_mtu() // dev is up
> >
> > with the same mtu, vptr->rx_buf_sz could be different than after:
> >
> > velocity_open()
> > velocity_change_mtu() // dev is up
> >
> > But, probably, I miss someting.
> 
> There is a snag here: if I change the MTU after the device is UP
> something ends up rather broken. A tcpdump shows nearly every outgoing
> frame has a bad TCP checksum (and the card does not support H/W
> checksumming or it is turned off as reported by ethtool).
> 

Does this fix the problem.

Note: reading the code the driver has other problems (besides crappy
style). It does pci_map_single()/unmap in a way that doesn't account
correctly for the padding that was added.

--- a/drivers/net/via-velocity.c	2007-11-15 20:11:12.000000000 -0800
+++ b/drivers/net/via-velocity.c	2007-11-15 20:32:14.000000000 -0800
@@ -1242,6 +1242,9 @@ static int velocity_rx_refill(struct vel
 static int velocity_init_rd_ring(struct velocity_info *vptr)
 {
 	int ret;
+	int mtu = vptr->dev->mtu;
+
+	vptr->rx_buf_sz = (mtu <= ETH_DATA_LEN) ? PKT_BUF_SZ : mtu + 32;
 
 	vptr->rd_info = kcalloc(vptr->options.numrx,
 				sizeof(struct velocity_rd_info), GFP_KERNEL);
@@ -1898,8 +1901,6 @@ static int velocity_open(struct net_devi
 	struct velocity_info *vptr = netdev_priv(dev);
 	int ret;
 
-	vptr->rx_buf_sz = (dev->mtu <= 1504 ? PKT_BUF_SZ : dev->mtu + 32);
-
 	ret = velocity_init_rings(vptr);
 	if (ret < 0)
 		goto out;
@@ -1978,12 +1979,6 @@ static int velocity_change_mtu(struct ne
 		velocity_free_rd_ring(vptr);
 
 		dev->mtu = new_mtu;
-		if (new_mtu > 8192)
-			vptr->rx_buf_sz = 9 * 1024;
-		else if (new_mtu > 4096)
-			vptr->rx_buf_sz = 8192;
-		else
-			vptr->rx_buf_sz = 4 * 1024;
 
 		ret = velocity_init_rd_ring(vptr);
 		if (ret < 0)


-- 
Stephen Hemminger <shemminger@linux-foundation.org>

  parent reply	other threads:[~2007-11-16  4:37 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-9382-10286@http.bugzilla.kernel.org/>
2007-11-15  3:23 ` [Bugme-new] [Bug 9382] New: etting MTU > 1500 on card "cold" sigsegs the "ip" program and produces an OOPS Andrew Morton
2007-11-15  3:38   ` [PATCH] via-velocity: don't oops on MTU change Stephen Hemminger
2007-11-15  3:48     ` David Miller
2007-11-15  8:26     ` Jarek Poplawski
2007-11-15 18:20       ` Stephen Hemminger
2007-11-15 23:10         ` Jarek Poplawski
2007-11-16  2:42           ` Jon Nelson
2007-11-16  4:05             ` Stephen Hemminger
2007-11-16  4:35             ` Stephen Hemminger [this message]
2007-11-16 16:21               ` Jon Nelson
2007-11-16 16:47                 ` Stephen Hemminger
2007-11-17  0:25                   ` David Miller
2007-11-17  0:59                   ` Jon Nelson
2007-11-17 15:04                     ` Jarek Poplawski
2007-11-28 22:02               ` Jon Nelson
2007-11-28 22:20                 ` [PATCH] via-velocity: don't oops on MTU change (resend) Stephen Hemminger
2007-12-01 21:36                   ` Jeff Garzik

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=20071115203508.4ad025f2@freepuppy.rosehill \
    --to=shemminger@linux-foundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=jarkao2@o2.pl \
    --cc=jnelson-kernel-bugzilla@jamponi.net \
    --cc=jnelson@jamponi.net \
    --cc=netdev@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