Making progress on if_bfe

Mike Silbersack <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
I started working on if_bfe again, and I am able to reproduce the problems 
that people with 512MB of ram started to report after I fixed the driver 
for people with > 1G of ram.  I have some ideas on what is going on, but 
no fix yet.

For anyone who has time (no matter what size ram you have), I'd like you 
to try the attached patch.  The patch is very simple - instead of 
interrupt storming, it tells you why the bfe card is unhappy, and downs 
the interface instead of continually attempting to restart it.  The 
interrupt storm was a side-effect of the card complaining, and the driver 
continually trying to restart the card.

So, apply the patch, then try with 128 as the values for BFE_TX_LIST_CNT 
and BFE_RX_LIST_CNT, see what happens, then try with 511 and see what 
happens.  Then e-mail me the results.  This will confirm that you are 
seeing the same errors from the card that I am.

Oh, and once you're done with that, go back to using the values for 
BFE_TX_LIST_CNT and BFE_RX_LIST_CNT that work for you. :)

Thanks,

Mike "Silby" Silbersack

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
if_bfe.c.errordetect.patch (text/plain, 695 B)
--- if_bfe.c.goodenough	Sat May 27 00:25:24 2006
+++ if_bfe.c.hasallerrorsdetected	Sat May 27 01:18:39 2006
@@ -1215,6 +1215,28 @@
 	}
 
 	if(istat & BFE_ISTAT_ERRORS) {
+
+		if (istat & BFE_ISTAT_DSCE) {
+			printf("if_bfe Descriptor Error\n");
+			bfe_stop(sc);
+			BFE_UNLOCK(sc);
+			return;
+		}
+
+		if (istat & BFE_ISTAT_DATAE) {
+			printf("if_bfe Data Error\n");
+			bfe_stop(sc);
+			BFE_UNLOCK(sc);
+			return;
+		}
+
+		if (istat & BFE_ISTAT_DPE) {
+			printf("if_bfe Descriptor Protocol Error\n");
+			bfe_stop(sc);
+			BFE_UNLOCK(sc);
+			return;
+		}
+		
 		flag = CSR_READ_4(sc, BFE_DMATX_STAT);
 		if(flag & BFE_STAT_EMASK)
 			ifp->if_oerrors++;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.