Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Aug 2002 03:04:26 +0100
From:      Ian Dowse <iedowse@maths.tcd.ie>
To:        Mike Tancsa <mike@sentex.net>
Cc:        stable@freebsd.org, luigi@freebsd.org
Subject:   Re: fxp problems with latest stable Re: panics after upgrading to -STABLE Aug 9, 2002 (still something up) 
Message-ID:   <200208110304.aa47521@salmon.maths.tcd.ie>
In-Reply-To: Your message of "Sat, 10 Aug 2002 21:18:57 EDT." <5.1.0.14.0.20020810210400.0622d770@192.168.0.12> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <5.1.0.14.0.20020810210400.0622d770@192.168.0.12>, Mike Tancsa write
s:
>I did some more tests with the new driver with 2 machines on a totally 
>different segment and the same sorts of packet loss on simple pings.  If I 
>revert to the previous version, no packet loss at all.

Hi Mike,

thanks for tracking down the commit that caused this. I had a quick
look at the changes in that revision, and although there were no
obvious problems I could see, a few things stood out as possible
candidates:

The FXP_RFA_RNRMARK flag: Luigi, do you have hardware documentation
for the Intel etherexpress chips that explicitly says that this bit
is free for use by the device driver? If not, this would be my first
guess at the problem. A patch that just #if 0's out this code
(breaking the DEVICE_POLLING case) is below. It would be very useful
to know if this makes a difference.

Total packet size: the old code used rfa->actual_size & (MCLBYTES - 1)
and the new version uses a mask of 0x3fff. I assume this is correct,
but to test if it is the problem, change the 0x3fff to 0x1fff.

Ian

Index: if_fxp.c
===================================================================
RCS file: /home/iedowse/CVS/src/sys/dev/fxp/if_fxp.c,v
retrieving revision 1.110.2.24
diff -u -r1.110.2.24 if_fxp.c
--- if_fxp.c	9 Aug 2002 02:04:20 -0000	1.110.2.24
+++ if_fxp.c	11 Aug 2002 01:46:23 -0000
@@ -1292,7 +1292,9 @@
 	 * info will be used in the subsequent polling cycle.
 	 */
 
+#if 0
 #define	FXP_RFA_RNRMARK		0x4000	/* used to mark a pending RNR intr */
+#endif
 
 	for (;;) {
 		m = sc->rfa_headm;
@@ -1307,8 +1309,10 @@
 		if ( (rfa->rfa_status & FXP_RFA_STATUS_C) == 0)
 			break;
 
+#if 0
 		if (rfa->rfa_status & FXP_RFA_RNRMARK)
 			rnr = 1;
+#endif
 		/*
 		 * Remove first packet from the chain.
 		 */
@@ -1342,15 +1346,19 @@
 		}
 	}
 	if (rnr) {
+#if 0
 		if (rfa->rfa_status & FXP_RFA_STATUS_C)
 			rfa->rfa_status |= FXP_RFA_RNRMARK;
 		else {
+#endif
 			fxp_scb_wait(sc);
 			CSR_WRITE_4(sc, FXP_CSR_SCB_GENERAL,
 			    vtophys(sc->rfa_headm->m_ext.ext_buf) +
 				RFA_ALIGNMENT_FUDGE);
 			fxp_scb_cmd(sc, FXP_SCB_COMMAND_RU_START);
+#if 0
 		}
+#endif
 	}
 }
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




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