Making progress on if_bfe

Mike Silbersack silby at silby.com
Sat May 27 12:06:52 PDT 2006


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
-------------- next part --------------
--- 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++;


More information about the freebsd-mobile mailing list