*** arch/sparc/sparc/machdep.c.orig Wed Jun 28 07:11:01 1995 --- arch/sparc/sparc/machdep.c Tue Jul 18 01:39:18 1995 *************** *** 74,79 **** --- 74,82 ---- #endif #include #include + #ifdef CALLWHEEL + #include + #endif /* CALLWHEEL */ #include #include *************** *** 160,166 **** --- 163,192 ---- #endif printf("real mem = %d\n", ctob(physmem)); + #ifdef CALLWHEEL /* + * Initialize size variables that allocsys will need. + */ + for (calloutsize = 1, calloutbits = 0; + calloutsize < ncallout; + calloutsize <<= 1, ++calloutbits); + callwheelsize = calloutsize; + callwheelbits = calloutbits; + + #ifndef MRIT_USE_SETCALLOUT + #define NCALLHASH ncallout + #else /* MRIT_USE_SETCALLOUT is defined */ + #define NCALLHASH (ncallout - nmrtimer) + #endif /* MRIT_USE_SETCALLOUT */ + + for (callhashsize = 1, callhashbits = 0; + callhashsize < NCALLHASH; + callhashsize <<= 1, ++callhashbits); + callhashsize <<= 1; + ++callhashbits; + #endif /* CALLWHEEL */ + + /* * Find out how much space we need, allocate it, * and then give everything true virtual addresses. */ *************** *** 241,250 **** --- 267,314 ---- * Initialize callouts */ callfree = callout; + #ifndef CALLWHEEL for (i = 1; i < ncallout; i++) callout[i-1].c_next = &callout[i]; + #else /* CALLWHEEL is defined */ + calloutmask = calloutsize - 1; + for (i = 0; i < ncallout; ++i) { + callout[i].c_next = callout + i + 1; + callout[i].hash_back = NULL; + callout[i].handle.lo = 0; + callout[i].handle.hi = i; + } + #endif /* CALLWHEEL */ callout[i-1].c_next = NULL; + #ifdef MRITIMER + /* + * Initialize mrtimers + */ + mrfree = mrtimer; + for (i = 0; i < nmrtimer; ++i) { + mrtimer[i].p = NULL; + mrtimer[i].next = mrtimer + i + 1; + } + mrtimer[i-1].next = NULL; + #endif /* MRITIMER */ + + #ifdef CALLWHEEL + /* + * Initialize callwheel + */ + callwheelmask = callwheelsize - 1; + for (i = 0; i < callwheelsize; ++i) + callwheel[i] = NULL; + + /* + * Initialize callhash + */ + callhashmask = callhashsize - 1; + for (i = 0; i < callhashsize; ++i) + callhash[i] = NULL; + #endif /* CALLWHEEL */ + #ifdef DEBUG pmapdebug = opmapdebug; #endif *************** *** 291,296 **** --- 355,367 ---- #define valloc(name, type, num) \ v = (caddr_t)(((name) = (type *)v) + (num)) valloc(callout, struct callout, ncallout); + #ifdef MRITIMER + valloc(mrtimer, struct mrtimer, nmrtimer); + #endif /* MRITIMER */ + #ifdef CALLWHEEL + valloc(callwheel, struct callout *, callwheelsize); + valloc(callhash, struct callout *, callhashsize); + #endif /* CALLWHEEL */ valloc(swapmap, struct map, nswapmap = maxproc * 2); #ifdef SYSVSHM valloc(shmsegs, struct shmid_ds, shminfo.shmmni);