Skip site navigation (1)Skip section navigation (2)
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>