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