Wrapping fix in vterm, increased verbosity of MM_Allocate
[tpg/acess2.git] / Kernel / arch / x86 / mm_virt.c
index 985dc14..cdd071c 100644 (file)
@@ -18,8 +18,6 @@
 #define KERNEL_STACK_END       0xFD000000
 #define PAGE_TABLE_ADDR        0xFD000000
 #define PAGE_DIR_ADDR  0xFD3F4000
-//#define PAGE_CR3_ADDR        0xFD3F47F4
-//#define TMP_CR3_ADDR 0xFD3F47F8      // Part of core instead of temp
 #define PAGE_CR3_ADDR  0xFD3F4FD0
 #define TMP_CR3_ADDR   0xFD3F4FD4      // Part of core instead of temp
 #define TMP_DIR_ADDR   0xFD3F5000      // Same
@@ -63,14 +61,17 @@ tPAddr      *gTmpCR3 = (void*)TMP_CR3_ADDR;
 // === CODE ===
 /**
  * \fn void MM_PreinitVirtual()
+ * \brief Maps the fractal mappings
  */
 void MM_PreinitVirtual()
 {
        gaInitPageDir[ 0 ] = 0;
        gaInitPageDir[ PAGE_TABLE_ADDR >> 22 ] = ((Uint)&gaInitPageDir - KERNEL_BASE) | 3;
 }
+
 /**
  * \fn void MM_InstallVirtual()
+ * \brief Sets up the constant page mappings
  */
 void MM_InstallVirtual()
 {
@@ -98,7 +99,7 @@ void MM_InstallVirtual()
  */
 void MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs)
 {
-       ENTER("xAddr bErrorCode", Addr, ErrorCode);
+       //ENTER("xAddr bErrorCode", Addr, ErrorCode);
        
        // -- Check for COW --
        if( gaPageDir  [Addr>>22] & PF_PRESENT
@@ -111,6 +112,8 @@ void MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs)
                gaPageTable[Addr>>12] &= PF_USER;
                gaPageTable[Addr>>12] |= paddr|PF_PRESENT|PF_WRITE;
                INVLPG( Addr & ~0xFFF );
+               //LEAVE('-')
+               return;
        }
        
        // -- Check Error Code --
@@ -133,7 +136,6 @@ void MM_PageFault(Uint Addr, Uint ErrorCode, tRegs *Regs)
        MM_DumpTables(0, -1);   
        
        Panic("Page Fault at 0x%x\n", Regs->eip);
-       LEAVE('-');
 }
 
 /**
@@ -210,7 +212,7 @@ tPAddr MM_Allocate(Uint VAddr)
        }
        // Check if the page is already allocated
        else if( gaPageTable[ VAddr >> 12 ] != 0 ) {
-               Warning("MM_Allocate - Allocating to used address");
+               Warning("MM_Allocate - Allocating to used address (%p)", VAddr);
                return gaPageTable[ VAddr >> 12 ] & ~0xFFF;
        }
        
@@ -521,6 +523,19 @@ void MM_SetFlags(Uint VAddr, Uint Flags, Uint Mask)
                if( Flags & MM_PFLAG_KERNEL )   *ent &= ~PF_USER;
                else    *ent |= PF_USER;
        }
+       
+       // Copy-On-Write
+       if( Mask & MM_PFLAG_COW )
+       {
+               if( Flags & MM_PFLAG_COW ) {
+                       *ent &= ~PF_WRITE;
+                       *ent |= PF_COW;
+               }
+               else {
+                       *ent &= ~PF_COW;
+                       *ent |= PF_WRITE;
+               }
+       }
 }
 
 /**

UCC git Repository :: git.ucc.asn.au