Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!lll-lcc!ames!ucbcad!ucbvax!OKEEFFE.BERKELEY.EDU!bostic From: bostic@OKEEFFE.BERKELEY.EDU (Keith Bostic) Newsgroups: comp.bugs.4bsd.ucb-fixes Subject: ARTICLE #12 Message-ID: <8703222326.AA06305@okeeffe.Berkeley.EDU> Date: Sun, 22-Mar-87 18:26:02 EST Article-I.D.: okeeffe.8703222326.AA06305 Posted: Sun Mar 22 18:26:02 1987 Date-Received: Tue, 24-Mar-87 01:33:08 EST Sender: daemon@ucbvax.BERKELEY.EDU Distribution: world Organization: The ARPA Internet Lines: 78 Approved: ucb-fixes@okeeffe.berkeley.edu 4.3BSD network bug (#8, exrecv) Index: sys/vaxif/if_ex.c 4.3BSD FIX Description: The ex driver must protect its enqueueing of data from ethernet boards that interrupt at a higher priority. Fix: *** if_ex.c.7.1 Wed Mar 4 23:34:11 1987 --- if_ex.c.7.2 Mon Oct 13 16:57:19 1986 *************** *** 5,7 **** * ! * @(#)if_ex.c 7.1 (Berkeley) 6/5/86 */ --- 5,7 ---- * ! * @(#)if_ex.c 7.2 (Berkeley) 10/13/86 */ *************** *** 29,30 **** --- 29,31 ---- #include "ioctl.h" + #include "syslog.h" #include "errno.h" *************** *** 492,494 **** xs->xs_if.if_oerrors++; ! printf("ex%d: transmit error=%b\n", unit, bp->mb_rply, XMIT_BITS); --- 493,495 ---- xs->xs_if.if_oerrors++; ! log(LOG_ERR, "ex%d: transmit error=%b\n", unit, bp->mb_rply, XMIT_BITS); *************** *** 557,558 **** --- 558,560 ---- register struct ifqueue *inq; + int s; *************** *** 562,564 **** xs->xs_if.if_ierrors++; ! printf("ex%d: receive error=%b\n", unit, bp->mb_rply, RECV_BITS); --- 564,566 ---- xs->xs_if.if_ierrors++; ! log(LOG_ERR, "ex%d: receive error=%b\n", unit, bp->mb_rply, RECV_BITS); *************** *** 631,632 **** --- 633,635 ---- + s = splimp(); if (IF_QFULL(inq)) { *************** *** 634,638 **** m_freem(m); ! return; ! } ! IF_ENQUEUE(inq, m); } --- 637,641 ---- m_freem(m); ! } else ! IF_ENQUEUE(inq, m); ! splx(s); } *************** *** 914,916 **** #ifdef DEBUG ! printf("ex%d: reset addr %s\n", ui->ui_unit, ether_sprintf(bp->mb_na.na_addrs)); --- 917,919 ---- #ifdef DEBUG ! log(LOG_DEBUG, "ex%d: reset addr %s\n", ui->ui_unit, ether_sprintf(bp->mb_na.na_addrs));