-
-/*
- * Initialize hash links for buffers.
- */
-bhinit()
-{
- register int i;
- register struct bufhd *bp;
-
- for (bp = bufhash, i = 0; i < BUFHSZ; i++, bp++)
- bp->b_forw = bp->b_back = (struct buf *)bp;
-}
-
-/*
- * Initialize the buffer I/O system by freeing
- * all buffers and setting all device buffer lists to empty.
- */
-binit()
-{
- register struct buf *bp, *dp;
- register int i;
- struct swdevt *swp;
- int base, residual;
-
- for (dp = bfreelist; dp < &bfreelist[BQUEUES]; dp++) {
- dp->b_forw = dp->b_back = dp->av_forw = dp->av_back = dp;
- dp->b_flags = B_HEAD;
- }
- base = bufpages / nbuf;
- residual = bufpages % nbuf;
- for (i = 0; i < nbuf; i++) {
- bp = &buf[i];
- bp->b_dev = NODEV;
- bp->b_bcount = 0;
- bp->b_un.b_addr = buffers + i * MAXBSIZE;
- if (i < residual)
- bp->b_bufsize = (base + 1) * CLBYTES;
- else
- bp->b_bufsize = base * CLBYTES;
- binshash(bp, &bfreelist[BQ_AGE]);
- bp->b_flags = B_BUSY|B_INVAL;
- brelse(bp);
- }
- /*
- * Count swap devices, and adjust total swap space available.
- * Some of this space will not be available until a vswapon()
- * system is issued, usually when the system goes multi-user.
- */
- nswdev = 0;
- nswap = 0;
- for (swp = swdevt; swp->sw_dev; swp++) {
- nswdev++;
- if (swp->sw_nblks > nswap)
- nswap = swp->sw_nblks;
- }
- if (nswdev == 0)
- panic("binit");
- if (nswdev > 1)
- nswap = ((nswap + dmmax - 1) / dmmax) * dmmax;
- nswap *= nswdev;
- /*
- * If there are multiple swap areas,
- * allow more paging operations per second.
- */
- if (nswdev > 1)
- maxpgio = (maxpgio * (2 * nswdev - 1)) / 2;
- swfree(0);
-}
-
-/*
- * Initialize linked list of free swap
- * headers. These do not actually point
- * to buffers, but rather to pages that
- * are being swapped in and out.
- */
-bswinit()
-{
- register int i;
- register struct buf *sp = swbuf;
-
- bswlist.av_forw = sp;
- for (i=0; i<nswbuf-1; i++, sp++)
- sp->av_forw = sp+1;
- sp->av_forw = NULL;
-}
-
-/*
- * Initialize clist by freeing all character blocks, then count
- * number of character devices. (Once-only routine)
- */
-cinit()
-{
- register int ccp;
- register struct cblock *cp;
-
- ccp = (int)cfree;
- ccp = (ccp+CROUND) & ~CROUND;
- for(cp=(struct cblock *)ccp; cp < &cfree[nclist-1]; cp++) {
- cp->c_next = cfreelist;
- cfreelist = cp;
- cfreecount += CBSIZE;
- }
-}