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