-mbinit()
-{
- register struct mbuf *m;
- register i;
-
-COUNT(MBUFINIT);
- m = (struct mbuf *)&mbutl[0]; /* ->start of buffer virt mem */
- (void) vmemall(&Mbmap[0], 2, proc, CSYS);
- vmaccess(&Mbmap[0], (caddr_t)m, 2);
- for (i=0; i < NMBPG; i++) {
- m->m_off = 0;
- (void) m_free(m);
- m++;
- }
- (void) pg_alloc(3);
- mbstat.m_pages = 4;
- mbstat.m_bufs = 32;
- mbstat.m_lowat = 16;
- mbstat.m_hiwat = 32;
- { int j,k,n;
- n = 32;
- k = n << 1;
- if ((i = rmalloc(mbmap, n)) == 0)
- panic("mbinit");
- j = i<<1;
- m = pftom(i);
- /* should use vmemall sometimes */
- if (memall(&Mbmap[j], k, proc, CSYS) == 0) {
- printf("botch\n");
- return;
- }
- vmaccess(&Mbmap[j], (caddr_t)m, k);
- for (j=0; j < n; j++) {
- m->m_off = 0;
- m->m_next = mpfree;
- mpfree = m;
- m += NMBPG;
- nmpfree++;
- }
- }
-}
-
-pg_alloc(n)
- register int n;
-{
- register i, j, k;
- register struct mbuf *m;
- int bufs, s;
-
-COUNT(PG_ALLOC);
- k = n << 1;
- if ((i = rmalloc(mbmap, n)) == 0)
- return (0);
- j = i<<1;
- m = pftom(i);
- /* should use vmemall sometimes */
- if (memall(&Mbmap[j], k, proc, CSYS) == 0)
- return (0);
- vmaccess(&Mbmap[j], (caddr_t)m, k);
- bufs = n << 3;
- s = splimp();
- for (j=0; j < bufs; j++) {
- m->m_off = 0;
- (void) m_free(m);
- m++;
- }
- splx(s);
- mbstat.m_pages += n;
- return (1);
-}
-
-m_expand()
-{
- register i;
- int need, needp, needs;
-
-COUNT(M_EXPAND);
- needs = need = mbstat.m_hiwat - mbstat.m_bufs;
- needp = need >> 3;
- if (pg_alloc(needp))
- return (1);
- for (i=0; i < needp; i++, need -= NMBPG)
- if (pg_alloc(1) == 0)
- goto steal;
- return (need < needs);
-steal:
- /* while (not enough) ask protocols to free code */
- ;
- return (0);
-}
-
-#ifdef notdef
-m_relse()
-{
-
-COUNT(M_RELSE);
-}
-#endif
-