Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Feb 1999 02:32:55 +0900
From:      Kenjiro Cho <kjc@csl.sony.co.jp>
To:        Graeme Brown <graeme.brown@bt-sys.bt.co.uk>
Cc:        "FreeBSD-Net (FreeBSD.Org) List" <freebsd-net@freebsd.org>, Alan ONeill <alan.oneill@bt-sys.bt.co.uk>, Arie van Breene <arie@efficient.com>
Subject:   Re: Troubles with BSDATM and PVCs 
Message-ID:  <199902251732.CAA29017@hotaka.csl.sony.co.jp>
In-Reply-To: Your message of "25 Feb 1999 16:02:03 %2B0100." <n1292164143.57598@maczebedee> 

next in thread | previous in thread | raw e-mail | index | archive | help

Graeme,

>> Has anyone seen/heard of reliability problems using BSDATM in
>> conjunction with ENI ATM NICs or more specifically using ENI cards 
>> with ALTQ pvcsifs ?

Could you try the patch attached below?

I fixed a bug back in October but somehow it slipped away when I
made altq-1.1.3.  I noticed this mistake a couple of days ago.
(the fix was also made to 3.0-current.)

bug description:
  When the entire transmit buffer is used, the transmitter thinks that
  the buffer is empty (WRTX == RDTX) and stops sending.  The driver
  thinks the buffer is full, which leads to a lockup.

  This happens only when
   - the sending rate is set to a small value by the hardware shaper
     (to overload the NIC)
   - overload the NIC with small UDP packets
     (specific packet size is required to fit into the total buffer size)

If your problem does not go away,
 - enable DDB in your kernel (options DDB)
 - when you see the problem, go to DDB by Alt-Cntrl-ESC
	type "call en_dump(0,1)"
	(the first argument is the device unit number and the second
	argument is dump level)
	send me the output

--Kenjiro

--- midway.c-	Wed Oct  7 20:54:18 1998
+++ midway.c	Thu Oct  8 12:24:34 1998
@@ -2237,7 +2237,11 @@
     goto dequeue_drop;
   }
 
-  if (launch.need > sc->txslot[chan].bfree) {
+  /*
+   * note: don't use the entire buffer space.  if WRTX becomes equal
+   * to RDTX, the transmitter stops assuming the buffer is empty!  --kjc
+   */
+  if (launch.need >= sc->txslot[chan].bfree) {
     EN_COUNT(sc->txoutspace);
 #ifdef EN_DEBUG
     printf("%s: tx%d: out of transmit space\n", sc->sc_dev.dv_xname, chan);



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199902251732.CAA29017>