From owner-freebsd-current Tue Sep 22 09:17:18 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id JAA01459 for freebsd-current-outgoing; Tue, 22 Sep 1998 09:17:18 -0700 (PDT) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from skynet.ctr.columbia.edu (skynet.ctr.columbia.edu [128.59.64.70]) by hub.freebsd.org (8.8.8/8.8.8) with SMTP id JAA01344 for ; Tue, 22 Sep 1998 09:16:49 -0700 (PDT) (envelope-from wpaul@skynet.ctr.columbia.edu) Received: (from wpaul@localhost) by skynet.ctr.columbia.edu (8.6.12/8.6.9) id MAA26438; Tue, 22 Sep 1998 12:21:05 -0400 From: Bill Paul Message-Id: <199809221621.MAA26438@skynet.ctr.columbia.edu> Subject: xl driver and watchdog timeouts To: kong@kong.dorms.spbu.ru, gubarev@raven.itep.ru Date: Tue, 22 Sep 1998 12:21:03 -0400 (EDT) Cc: current@FreeBSD.ORG X-Mailer: ELM [version 2.4 PL24] Content-Type: text Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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