Date: Tue, 22 Sep 1998 12:21:03 -0400 (EDT) From: Bill Paul <wpaul@skynet.ctr.columbia.edu> To: kong@kong.dorms.spbu.ru, gubarev@raven.itep.ru Cc: current@FreeBSD.ORG Subject: xl driver and watchdog timeouts Message-ID: <199809221621.MAA26438@skynet.ctr.columbia.edu>
next in thread | raw e-mail | index | archive | help
Hm. Okay. I'm not sure what's going on here exactly, but if you have problems with a 3c905-TX that generates 'watchdog timeout' errors, please try the patch included at the end of this message. This patch was generated against the if_xl.c from FreeBSD-current, but it will apply to the 2.2.x version too with a little fuzz. Something I realized last night is that if the IFF_OACTIVE flag is set on an interface, ether_output() won't even bother trying to call the interface transmit start routine. This being the case, the code I had added to test for the IFF_OACTIVE condition in xl_start() would never actually be called. Anyway, if you are having watchdog timeout problems, please try this patch and let me know what effect (if any) it has. -Bill -- ============================================================================= -Bill Paul (212) 854-6020 | System Manager, Master of Unix-Fu Work: wpaul@ctr.columbia.edu | Center for Telecommunications Research Home: wpaul@skynet.ctr.columbia.edu | Columbia University, New York City ============================================================================= "It is not I who am crazy; it is I who am mad!" - Ren Hoek, "Space Madness" ============================================================================= *** if_xl.c 1998/09/08 16:05:04 1.53 --- if_xl.c 1998/09/22 15:57:54 *************** *** 2192,2219 **** } /* - * If the OACTIVE flag is set, make sure the transmitter - * isn't wedged. Call the txeoc handler to make sure the - * transmitter is enabled and then call the txeof handler - * to see if any descriptors can be reclaimed and reload - * the downlist pointer register if necessary. If after - * that the OACTIVE flag is still set, return, otherwise - * proceed and queue up some more frames. - */ - if (ifp->if_flags & IFF_OACTIVE) { - xl_txeoc(sc); - xl_txeof(sc); - if (ifp->if_flags & IFF_OACTIVE) - return; - } - - /* * Check for an available queue slot. If there are none, * punt. */ if (sc->xl_cdata.xl_tx_free == NULL) { ! ifp->if_flags |= IFF_OACTIVE; ! return; } start_tx = sc->xl_cdata.xl_tx_free; --- 2192,2207 ---- } /* * Check for an available queue slot. If there are none, * punt. */ if (sc->xl_cdata.xl_tx_free == NULL) { ! xl_txeoc(sc); ! xl_txeof(sc); ! if (sc->xl_cdata.xl_tx_free == NULL) { ! ifp->if_flags |= IFF_OACTIVE; ! return; ! } } start_tx = sc->xl_cdata.xl_tx_free; *************** *** 2653,2658 **** --- 2641,2652 ---- printf("xl%d: no carrier - transceiver cable problem?\n", sc->xl_unit); xl_txeoc(sc); + xl_txeof(sc); + xl_rxeof(sc); + xl_init(sc); + + if (ifp->if_snd.ifq_head != NULL) + xl_start(ifp); return; } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199809221621.MAA26438>