diff --git a/src/kernel/vm2/area.C b/src/kernel/vm2/area.C index fc3ed20c3b..9212a3c9cc 100644 --- a/src/kernel/vm2/area.C +++ b/src/kernel/vm2/area.C @@ -55,17 +55,17 @@ status_t area::createAreaMappingFile(char *name, int pageCount,void **address, a status_t area::createArea(char *name, int pageCount,void **address, addressSpec type,pageState inState,protectType protect) { manager->lock(); - printf ("Locked in createArea\n"); + printf ("area::createArea: Locked in createArea\n"); unsigned long requested=(unsigned long)(*address); // Hold onto this to make sure that EXACT works... unsigned long base=mapAddressSpecToAddress(type,requested,pageCount); - printf ("in area::createArea, base address = %d\n",base); + printf ("area::createArea: base address = %d\n",base); vpage *newPage; vnode newVnode; newVnode.fd=0; newVnode.offset=0; for (int i=0;iunlock(); *address=(void *)base; - printf ("unlocked in createArea\n"); + printf ("area::createArea: unlocked in createArea\n"); } void area::freeArea(void) @@ -117,7 +117,7 @@ bool area::contains(void *address) { // no need to lock here... unsigned long base=(unsigned long)(address); - printf ("Inside contains; looking for %d in %d -- %d, value = %d\n",base,start_address,end_address, ((start_address<=base) && (end_address>=base))); + printf ("area::contains: looking for %d in %d -- %d, value = %d\n",base,start_address,end_address, ((start_address<=base) && (end_address>=base))); return ((start_address<=base) && (end_address>=base)); } diff --git a/src/kernel/vm2/areaManager.C b/src/kernel/vm2/areaManager.C index 4843a41faf..b4bcd3b02b 100644 --- a/src/kernel/vm2/areaManager.C +++ b/src/kernel/vm2/areaManager.C @@ -40,11 +40,11 @@ area *areaManager::findArea(void *address) for (struct node *cur=areas.rock;cur;cur=cur->next) { area *myArea=(area *)cur; - printf ("Looking for %d\n",address); + printf ("areaManager::findArea: Looking for %d\n",address); if (myArea->contains(address)) return myArea; } - printf ("findArea is giving up\n"); + printf ("areaManager::findArea is giving up\n"); return NULL; } diff --git a/src/kernel/vm2/list.h b/src/kernel/vm2/list.h index 48bca10d74..09fddbeb7d 100644 --- a/src/kernel/vm2/list.h +++ b/src/kernel/vm2/list.h @@ -19,8 +19,8 @@ class list { rock=newNode; nodeCount++; } - int count(void) {printf ("About to return %d\n",nodeCount);return nodeCount;} - void *next(void) {nodeCount--;node *n=rock;if (rock) rock=rock->next;return rock;} + int count(void) {printf ("list::count: About to return %d\n",nodeCount);return nodeCount;} + void *next(void) {nodeCount--;node *n=rock;if (rock) rock=rock->next;return n;} void remove(void *in) { struct node *toNuke=(node *)in; @@ -35,7 +35,7 @@ class list { { for (struct node *cur=rock;cur;cur=cur->next) { - printf ("At %x, next = %x\n",cur,cur->next); + printf ("list::dump: At %x, next = %x\n",cur,cur->next); } } struct node *rock; diff --git a/src/kernel/vm2/pageManager.C b/src/kernel/vm2/pageManager.C index b8bf08efb4..353c18cde8 100644 --- a/src/kernel/vm2/pageManager.C +++ b/src/kernel/vm2/pageManager.C @@ -12,7 +12,7 @@ pageManager::pageManager(int pages) void *area; if (0>=create_area("vm_test",&area,B_ANY_ADDRESS,B_PAGE_SIZE*pages,B_NO_LOCK,B_READ_AREA|B_WRITE_AREA)) { - printf ("No memory!\n"); + printf ("pageManager::pageManager: No memory!\n"); exit(1); } for (int i=0;izero(); } // This could fail if someone swoops in and steal our page. diff --git a/src/kernel/vm2/swapFileManager.C b/src/kernel/vm2/swapFileManager.C index 9654fe128f..eb5f47d3a4 100644 --- a/src/kernel/vm2/swapFileManager.C +++ b/src/kernel/vm2/swapFileManager.C @@ -8,23 +8,27 @@ swapFileManager::swapFileManager(void) void swapFileManager::write_block(vnode node,void *loc,unsigned long size) { - printf ("writing, node.fd = %d, node.offset = %d\n",node.fd, node.offset); + printf ("swapFileManager::write_block: writing, node.fd = %d, node.offset = %d\n",node.fd, node.offset); lseek(node.fd,SEEK_SET,node.offset); write(node.fd,loc,size); + node.valid=true; } void swapFileManager::read_block(vnode node,void *loc,unsigned long size) { - printf ("reading, node.fd = %d, node.offset = %d\n",node.fd, node.offset); + printf ("swapFileManager::read_block: reading, node.fd = %d, node.offset = %d\n",node.fd, node.offset); lseek(node.fd,SEEK_SET,node.offset); + if (node.valid==false) + return; // Do nothing. This prevents "garbage" data on disk from being read in... read(node.fd,loc,size); } vnode swapFileManager::findNode(void) { - printf ("Finding a new node for you master\n"); + printf ("swapFileManager::findNode: Finding a new node for you, Master\n"); vnode tmp; tmp.fd=swapFile; tmp.offset=maxNode+=PAGE_SIZE; // Can't ever free, swap file grows forever... :-( + tmp.valid=false; return tmp; } diff --git a/src/kernel/vm2/test.C b/src/kernel/vm2/test.C index 6fc2dab0a3..6e86f3d9ba 100644 --- a/src/kernel/vm2/test.C +++ b/src/kernel/vm2/test.C @@ -11,5 +11,9 @@ int main(int argc,char **argv) vm.setByte(addr,99); printf ("addr = %d\n",addr); printf ("Byte = %d\n",vm.getByte(addr)); + printf ("\n\n\n\n\n"); + vm.setByte(addr+4097,99); + printf ("addr = %d\n",addr); + printf ("Byte = %d\n",vm.getByte(addr)); return 0; } diff --git a/src/kernel/vm2/vm.h b/src/kernel/vm2/vm.h index b300edffdd..1fe699d3e3 100644 --- a/src/kernel/vm2/vm.h +++ b/src/kernel/vm2/vm.h @@ -6,6 +6,7 @@ struct vnode { int fd; unsigned long offset; + bool valid; }; typedef unsigned long owningProcess; #define B_OS_NAME_LENGTH 32 diff --git a/src/kernel/vm2/vpage.C b/src/kernel/vm2/vpage.C index 27b5644dc5..3af4e73688 100644 --- a/src/kernel/vm2/vpage.C +++ b/src/kernel/vm2/vpage.C @@ -47,7 +47,7 @@ void vpage::setProtection(protectType prot) bool vpage::fault(void *fault_address, bool writeError) // true = OK, false = panic. { // This is dispatched by the real interrupt handler, who locates us - printf ("Inside fault; address = %d, write = %s\n",(unsigned long) fault_address,((writeError)?"true":"false")); + printf ("vpage::fault: address = %d, write = %s\n",(unsigned long) fault_address,((writeError)?"true":"false")); if (writeError) { dirty=true; @@ -66,30 +66,30 @@ bool vpage::fault(void *fault_address, bool writeError) // true = OK, false = pa } } physPage=pageMan.getPage(); - printf ("New page allocated! address = %s\n",physPage->getAddress()); + printf ("vpage::fault: New page allocated! address = %x\n",physPage->getAddress()); // Update the architecture specific stuff here... - // This refresh is unneeded if the code was never written out... + // This refresh is unneeded if the data was never written out... refresh(); // I wonder if these vnode calls are safe during an interrupt... - printf ("Refreshed\n"); + printf ("vpage::fault: Refreshed\n"); } char vpage::getByte(unsigned long address) { - printf ("inside vpage::getByte; address = %d\n",address ); + printf ("vpage::getByte: address = %d\n",address ); if (!physPage) fault((void *)(address),false); - printf ("About to return %d\n", *((char *)(address-start_address+physPage->getAddress()))); + printf ("vpage::getByte: About to return %d\n", *((char *)(address-start_address+physPage->getAddress()))); return *((char *)(address-start_address+physPage->getAddress())); } void vpage::setByte(unsigned long address,char value) { - printf ("inside vpage::setByte; address = %d, value = %d\n",address, value); + printf ("vpage::setByte: address = %d, value = %d\n",address, value); if (!physPage) fault((void *)(address),true); *((char *)(address-start_address+physPage->getAddress()))=value; - printf ("inside vpage::setByte; physical address = %d, value = %d\n",physPage->getAddress(), *((char *)(physPage->getAddress()))); + printf ("vpage::setByte: physical address = %d, value = %d\n",physPage->getAddress(), *((char *)(physPage->getAddress()))); } int vpage::getInt(unsigned long address)