Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Apr 2010 11:17:41 -0700
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        Mike Tancsa <mike@sentex.net>
Cc:        freebsd-stable@freebsd.org, jfvogel@gmail.com
Subject:   Re: em driver regression
Message-ID:  <20100408181741.GI5734@michelle.cdnetworks.com>
In-Reply-To: <201004081446.o38EkU7h042296@lava.sentex.ca>
References:  <201004081313.o38DD4JM041821@lava.sentex.ca> <7.1.0.9.0.20100408091756.10652be0@sentex.net> <201004081446.o38EkU7h042296@lava.sentex.ca>

next in thread | previous in thread | raw e-mail | index | archive | help

--BXVAT5kNtrzKuDFl
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Thu, Apr 08, 2010 at 10:46:22AM -0400, Mike Tancsa wrote:
> 
> OK, some more data... It seems dhclient is getting upset as well 
> since the updated driver
> 
> Apr  8 10:28:37 ich10 dhclient[1383]: DHCPDISCOVER on em0 to 
> 255.255.255.255 port 67 interval 6
> Apr  8 10:28:38 ich10 dhclient[1383]: ip length 328 disagrees with 
> bytes received 332.
> Apr  8 10:28:38 ich10 dhclient[1383]: accepting packet with data 
> after udp payload.
> Apr  8 10:28:38 ich10 dhclient[1383]: DHCPOFFER from 192.168.xx.1
> Apr  8 10:28:40 ich10 dhclient[1383]: DHCPREQUEST on em0 to 
> 255.255.255.255 port 67
> Apr  8 10:28:40 ich10 dhclient[1383]: ip length 328 disagrees with 
> bytes received 332.
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Try this patch. It should fix the issue. It seems Jack forgot to
strip CRC bytes as old em(4) didn't strip it, probably to
workaround silicon bug of old em(4) controllers.

It seems there are also TX issues here. The system load is too high
and sometimes system is not responsive while TX is in progress.
Because I initiated TCP bulk transfers, TSO should reduce CPU load
a lot but it didn't so I guess it could also be related watchdog
timeouts you've seen. I'll see what can be done.

--BXVAT5kNtrzKuDFl
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="em.crc.patch"

Index: sys/dev/e1000/if_em.c
===================================================================
--- sys/dev/e1000/if_em.c	(revision 206399)
+++ sys/dev/e1000/if_em.c	(working copy)
@@ -3706,6 +3706,8 @@
 		rxr->next_to_refresh = i;
 	}
 update:
+	bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 	if (cleaned != -1) /* Update tail index */
 		E1000_WRITE_REG(&adapter->hw,
 		    E1000_RDT(rxr->me), cleaned);
@@ -4039,7 +4041,8 @@
 	rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
 	    E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
 	    (hw->mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
-
+	/* Strip CRC bytes. */
+	rctl |= E1000_RCTL_SECRC;
         /* Make sure VLAN Filters are off */
         rctl &= ~E1000_RCTL_VFE;
 	rctl &= ~E1000_RCTL_SBP;

--BXVAT5kNtrzKuDFl--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100408181741.GI5734>