67 static void *getEmptyDesc() {
 
   73   tmpDesc = emptyKernDesc;
 
   76     emptyKernDesc = tmpDesc->
next;
 
   77     if (emptyKernDesc != 0x0)
 
   78       emptyKernDesc->
prev = 0x0;
 
   86     kpanic(
"Error: vmmGetFreeKernelPage returned NULL\n");
 
   89   memset(emptyKernDesc, 0x0, 0x4000);
 
   91   emptyKernDesc[0].
next = &emptyKernDesc[1];
 
   93   for (i = 0x1; i < ((0x4000 / 
sizeof(
struct memDescriptor))); i++) {
 
   95       emptyKernDesc[i].
next = &emptyKernDesc[i + 1];
 
   97       emptyKernDesc[i].
next = 0x0;
 
   98     emptyKernDesc[i].
prev = &emptyKernDesc[i - 1];
 
  101   tmpDesc = &emptyKernDesc[0];
 
  103   emptyKernDesc = tmpDesc->
next;
 
  104   emptyKernDesc->
prev = 0x0;
 
  127   if (freeDesc->
limit <= 0x0)
 
  128     kpanic(
"Inserting Descriptor with no limit\n");
 
  130   if (freeKernDesc != 0x0) {
 
  133     freeDesc->
next = freeKernDesc;
 
  134     freeDesc->
prev = 0x0;
 
  135     freeKernDesc->
prev = freeDesc;
 
  136     freeKernDesc = freeDesc;
 
  139     for (tmpDesc = freeKernDesc; tmpDesc != 0x0; tmpDesc = tmpDesc->
next) {
 
  143         if (tmpDesc->
prev != 0x0)
 
  146         tmpDesc->
prev = freeDesc;
 
  147         freeDesc->
next = tmpDesc;
 
  149         if (tmpDesc == freeKernDesc)
 
  150           freeKernDesc = freeDesc;
 
  153       if (tmpDesc->
next == 0x0) {
 
  154         tmpDesc->
next = freeDesc;
 
  155         freeDesc->
prev = tmpDesc;
 
  156         freeDesc->
next = 0x0;
 
  164     freeDesc->
prev = 0x0;
 
  165     freeDesc->
next = 0x0;
 
  166     freeKernDesc = freeDesc;
 
  184 static void mergeMemBlocks() {
 
  192   mergeStart: 
for (tmpDesc1 = freeKernDesc; tmpDesc1 != 0x0; tmpDesc1 = tmpDesc1->
next) {
 
  197     if (tmpDesc1->
limit != 0x0) {
 
  199       for (tmpDesc2 = freeKernDesc; tmpDesc2; tmpDesc2 = tmpDesc2->
next) {
 
  203           tmpDesc2->
limit = 0x0;
 
  204           if (tmpDesc2->
prev) {
 
  207           if (tmpDesc2->
next) {
 
  210           tmpDesc2->
prev = 0x0;
 
  211           tmpDesc2->
next = emptyKernDesc;
 
  212           emptyKernDesc->
prev = tmpDesc2;
 
  213           emptyKernDesc = tmpDesc2;
 
  214           if (tmpDesc1->
prev) {
 
  217           if (tmpDesc1->
next) {
 
  220           tmpDesc1->
prev = 0x0;
 
  221           tmpDesc1->
next = 0x0;
 
  223           insertFreeDesc(tmpDesc1);
 
  258     kprintf(
"kmalloc: len = 0!\n");
 
  261   for (tmpDesc1 = freeKernDesc; tmpDesc1 != 0x0; tmpDesc1 = tmpDesc1->
next) {
 
  263     if (tmpDesc1->
limit >= len) {
 
  264       if (tmpDesc1->
prev != 0x0)
 
  266       if (tmpDesc1->
next != 0x0)
 
  269       if (tmpDesc1 == freeKernDesc)
 
  270         freeKernDesc = tmpDesc1->
next;
 
  272       tmpDesc1->
prev = 0x0;
 
  273       tmpDesc1->
next = usedKernDesc;
 
  274       if (usedKernDesc != 0x0)
 
  275         usedKernDesc->
prev = tmpDesc1;
 
  276       usedKernDesc = tmpDesc1;
 
  277       if (tmpDesc1->
limit > len) {
 
  278         tmpDesc2 = getEmptyDesc();
 
  281         tmpDesc1->
limit = len;
 
  283         tmpDesc2->
next = 0x0;
 
  284         tmpDesc2->
prev = 0x0;
 
  285         insertFreeDesc(tmpDesc2);
 
  288       for (i = 0; i < tmpDesc1->
limit; i++) {
 
  297   tmpDesc1 = getEmptyDesc();
 
  299   if (tmpDesc1 != 0x0) {
 
  300     pages = ((len + 4095) / 4096);
 
  302     tmpDesc1->
limit = len;
 
  303     tmpDesc1->
next = usedKernDesc;
 
  304     tmpDesc1->
prev = 0x0;
 
  305     if (usedKernDesc != 0x0)
 
  306       usedKernDesc->
prev = tmpDesc1;
 
  307     usedKernDesc = tmpDesc1;
 
  309     if (((pages * 4096) - len) > 0x0) {
 
  310       tmpDesc2 = getEmptyDesc();
 
  313       tmpDesc2->
limit = ((pages * 4096) - len);
 
  314       tmpDesc2->
prev = 0x0;
 
  315       tmpDesc2->
next = 0x0;
 
  316       if (tmpDesc2->
limit <= 0x0)
 
  318       insertFreeDesc(tmpDesc2);
 
  322     for (i = 0; i < tmpDesc1->
limit; i++) {
 
  357   for (tmpDesc = usedKernDesc; tmpDesc != 0x0; tmpDesc = tmpDesc->
next) {
 
  362       if (usedKernDesc == tmpDesc)
 
  363         usedKernDesc = tmpDesc->
next;
 
  365       if (tmpDesc->
prev != 0x0)
 
  368       if (tmpDesc->
next != 0x0)
 
  374       if (tmpDesc->
limit <= 0x0)
 
  377       insertFreeDesc(tmpDesc);