[net.unix-wizards] Deuna queue backing up?

craig@loki.bbn.COM (Craig Partridge) (09/16/86)

After over a year's hiatus I suddenly find myself doing 4.2bsd kernel support.
We've just encountered a problem that appears to be in the deuna driver
(we have version 1.3 of 84/03/12 by Lou Salkind).

We are frequently getting ENOBUFS error returns when trying to get out
our Ethernet interface.  However, we still have free mbufs, so the error
code must be when the ifp queue is filled (IF_QFULL on line 704).  The
point is that once we start getting the error, it doesn't seem to go
away (we've seen it last for as long as half an hour before we got fed
up and rebooted).

I suspect a concurrency bug that allows the queue to become permanently filled.
(Our Ethernet sometimes runs near saturation).  But before I go digging, does
this ring a bell  with anyone (is there a more recent version of the driver)?

Craig Partridge
CSNET Technical Staff

craig@csnet-sh or craig@sh.cs.net (CSNET)
craig@loki.bbn.com (ARPA)
{decvax,ihnp4,wjh12}!bbncca!craig (USENET)

jim@cs.strath.ac.uk (Jim Reid) (10/01/86)

In article <3839@brl-smoke.ARPA> craig@loki.bbn.COM (Craig Partridge) writes:
>We are frequently getting ENOBUFS error returns when trying to get out
>our Ethernet interface.  However, we still have free mbufs, so the error
>code must be when the ifp queue is filled (IF_QFULL on line 704).  The
>point is that once we start getting the error, it doesn't seem to go
>away (we've seen it last for as long as half an hour before we got fed
>up and rebooted).
>
>I suspect a concurrency bug that allows the queue to become permanently filled.
>(Our Ethernet sometimes runs near saturation).  But before I go digging, does
>this ring a bell  with anyone (is there a more recent version of the driver)?

There was a bug that caused the DEUNA to stop transmitting packets when
the transmit buffers are full. The fix is below. Perhaps this will cure
the problem?

>> From msdc!akgua!ihnp4!watmath!kwlalonde Fri Jul 11 01:03:30 1986
>> Posted-Date: Thu, 10 Jul 86 15:57:31 edt
>> Received: by ihnp4.ATT.COM id AA21232; 10 Jul 86 21:58:59 CDT (Thu)
>> Received: by watmath; Thu, 10 Jul 86 15:57:31 edt
>> Date: Thu, 10 Jul 86 15:57:31 edt
>> From: Ken Lalonde <ihnp4!watmath!kwlalonde>
>> Message-Id: <8607101957.AA07087@watmath.uucp>
>> To: paul@msdc.UUCP
>> Subject: Re: 4.2 VAX TCP/IP or driver problem
>> Newsgroups: net.unix-wizards
>> In-Reply-To: <135@msdc.msdc.UUCP>
>> Organization: U. of Waterloo, Ontario
>> Status: R
>> 
>> We're running Lou Salkind's deuna driver for 4.2BSD.  Occasionally
>> a deuna will just stop transmitting when it's transmit buffers are
>> full.  The following code will give it a poke in that case, to restart
>> transmission.  Context is near the end of function destart.  Hope this helps.
>> 
>> 	...
>> 	if (ds->ds_nxmit != nxmit) {
>> 		ds->ds_nxmit = nxmit;
>> 		if (ds->ds_if.if_flags & IFF_UP)
>> 			addr->pclow = PCSR0_INTE|CMD_PDMD;
>> 	}
>> 	/*
>> 	 * If the xmit ring is full, and we have something
>> 	 * to send, give it a poke.
>> 	 */
>> 	else if (ds->ds_nxmit == NXMT && (ds->ds_if.if_flags & IFF_UP))
>> 		addr->pclow = PCSR0_INTE|CMD_PDMD;
>> }

Hope this helps

		Jim

ARPA:	jim%cs.strath.ac.uk@ucl-cs.arpa, jim@cs.strath.ac.uk
UUCP:	jim@strath-cs.uucp, ...!seismo!mcvax!ukc!strath-cs!jim
JANET:	jim@uk.ac.strath.cs

"JANET domain ordering is swapped around so's there'd be some use for rev(1)!"