*BSD News Article 44359


Return to BSD News archive

Newsgroups: comp.bugs.2bsd
Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!bunyip.cc.uq.oz.au!munnari.oz.au!news.ecn.uoknor.edu!paladin.american.edu!gatech!news.mathworks.com!solaris.cc.vt.edu!spcuna!wlbr!sms
From: sms@wlv.iipo.gtegsc.com (Steven M. Schultz)
Subject: DEQNA driver and mbuf exhaustion (#246)
Sender: news@wlbr.iipo.gtegsc.com (System Administrator)
Organization: GTE Government Systems, Westlake Village
Message-ID: <D8wyI2.Cx6@wlbr.iipo.gtegsc.com>
X-Nntp-Posting-Host: wlv.iipo.gtegsc.com
Date: Sun, 21 May 1995 05:42:02 GMT
Lines: 78

Subject: DEQNA driver and mbuf exhaustion (#246)
Index:	sys/pdpif/if_qe.c 2.11BSD

Description:
	If, due to network load, the system is temporarily out of
	mbufs the DEQNA driver will effectively hang the system 
	instead of tossing packets away.

Repeat-By:
	Run SATAN in "heavy scan" mode against your 11/73 ;-)

Fix:
	The problem was a debugging printf() statement left in from when the
	driver was rewritten.  Printf() is a quite slow and expensive,
	especially from supervisor mode networking code, and does raise
	the processor priority for extended periods of time.

	The system would basically lock up doing nothing but printf calls
	instead of tossing packets away and at least trying to catch up.

	Cut where indicated, saving to a tmp file (/tmp/246 for example)
	and then:

		patch -p0 < /tmp/246

	If you do not have a DEQNA or DELQA (but not the DELQA-YM) interface 
	then there is no need to recompile the kernel/networking.  If you are 
	using one of those cards then you may want to install a new kernel
	and reboot the system.

======================cut here=====================
*** /sys/pdpif/if_qe.c.old	Mon Dec 28 18:22:44 1992
--- /sys/pdpif/if_qe.c	Sat May 20 21:00:25 1995
***************
*** 1,4 ****
! /*	@(#)if_qe.c	1.1 (2.11BSD) 12/28/92 */
   
  /****************************************************************
   *								*
--- 1,4 ----
! /*	@(#)if_qe.c	1.2 (2.11BSD) 1995/05/20 */
   
  /****************************************************************
   *								*
***************
*** 829,838 ****
  	 */
  	m = if_rubaget(ifuba, len, 0, &sc->is_if);
   
! 	if (m == 0) {
! 		printf("qe: if_rubaget ret 0\n");
  		return;
- 	}
   
  	switch (type) {
  
--- 829,836 ----
  	 */
  	m = if_rubaget(ifuba, len, 0, &sc->is_if);
   
! 	if (m == 0)
  		return;
   
  	switch (type) {
  
*** /VERSION.old	Sat May 20 20:58:49 1995
--- /VERSION	Sat May 20 20:58:26 1995
***************
*** 1,4 ****
! Current Patch Level: 245
  
  2.11 BSD
  ============
--- 1,4 ----
! Current Patch Level: 246
  
  2.11 BSD
  ============