bostic@OKEEFFE.BERKELEY.EDU.UUCP (06/05/87)
Subject: rcv_xmtbuf panic
Index: sys/vaxif/if_uba.c 4.3BSD
Description:
On systems with heavy usage of DEUNAs, you can get an
rcv_xmtbuf panic.
Fix:
Apply the following patch:
*** if_uba.c.old Thu Jun 4 13:53:12 1987
--- if_uba.c.new Thu Jun 4 13:53:26 1987
***************
*** 3,9 ****
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
! * @(#)if_uba.c 7.1 (Berkeley) 6/5/86
*/
#include "../machine/pte.h"
--- 3,9 ----
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
! * @(#)if_uba.c 7.5.1.1 (Berkeley) 6/4/87
*/
#include "../machine/pte.h"
***************
*** 97,105 ****
return (1);
bad:
while (--nw >= 0)
! ubarelse(ifu->iff_uban, &ifr[nw].ifrw_info);
while (--nr >= 0)
! ubarelse(ifu->iff_uban, &ifw[nr].ifw_info);
m_pgfree(cp, (nr + nw) * ncl);
ifr[0].ifrw_addr = 0;
return (0);
--- 97,105 ----
return (1);
bad:
while (--nw >= 0)
! ubarelse(ifu->iff_uban, &ifw[nw].ifw_info);
while (--nr >= 0)
! ubarelse(ifu->iff_uban, &ifr[nr].ifrw_info);
m_pgfree(cp, (nr + nw) * ncl);
ifr[0].ifrw_addr = 0;
return (0);
***************
*** 273,279 ****
register struct mbuf *m;
struct mbuf **mprev;
register i;
- int t;
char *cp;
while (i = ffs((long)ifw->ifw_xswapd)) {
--- 273,278 ----
***************
*** 280,299 ****
cp = ifw->ifw_base + i * CLBYTES;
i--;
ifw->ifw_xswapd &= ~(1<<i);
- i *= CLSIZE;
mprev = &ifw->ifw_xtofree;
for (m = ifw->ifw_xtofree; m && m->m_next; m = m->m_next)
mprev = &m->m_next;
if (m == NULL)
! panic("rcv_xmtbuf");
bcopy(mtod(m, caddr_t), cp, CLBYTES);
(void) m_free(m);
*mprev = NULL;
- for (t = 0; t < CLSIZE; t++) {
- ifw->ifw_mr[i] = ifw->ifw_wmap[i];
- i++;
- }
}
}
/*
--- 279,296 ----
cp = ifw->ifw_base + i * CLBYTES;
i--;
ifw->ifw_xswapd &= ~(1<<i);
mprev = &ifw->ifw_xtofree;
for (m = ifw->ifw_xtofree; m && m->m_next; m = m->m_next)
mprev = &m->m_next;
if (m == NULL)
! break;
bcopy(mtod(m, caddr_t), cp, CLBYTES);
(void) m_free(m);
*mprev = NULL;
}
+ ifw->ifw_xswapd = 0;
+ for (i = 0; i < ifw->ifw_nmr; i++)
+ ifw->ifw_mr[i] = ifw->ifw_wmap[i];
}
/*