Changeset 2042
- Timestamp:
- 04/03/09 19:03:56 (3 years ago)
- Files:
-
- 1 modified
-
Whitix/trunk/arch/i386/mm/virt.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/arch/i386/mm/virt.c
r1862 r2042 68 68 extern DWORD bootPageDirectory; 69 69 manager->pageDir = (DWORD*)(VA_TO_PA(&bootPageDirectory)); 70 71 VirtMemMapPage(0, 0, 0); 70 72 }else{ 71 73 manager->pageDir=(DWORD*)(PageAlloc()->physAddr); … … 202 204 { 203 205 pageDir[virtEnt]=PageAlloc()->physAddr | perms | PAGE_RW; 206 204 207 /* Zero out the whole page table */ 205 208 ZeroMemory(&pageTable[virtEnt*1024], PAGE_SIZE); 206 209 207 210 /* If in kernel memory space, map to all other page directories */ 208 211 if (virtEnt >= 768) … … 210 213 ListForEachEntry(manager,&managerList,list) 211 214 { 215 /* Avoid copying to the same page table entry */ 216 if ((DWORD)manager->pageDir == VirtToPhys((DWORD)pageDir)) 217 break; 218 212 219 virtDir=(DWORD*)VirtAllocateTemp((DWORD)manager->pageDir); 213 virtDir[virtEnt] =pageDir[virtEnt];220 virtDir[virtEnt] = pageDir[virtEnt]; 214 221 VirtUnmapPhysPage((DWORD)virtDir); 215 222 } 216 223 } 217 224 } 218 225 219 226 pageTable[PGTABLE_ENT(virt)]=phys | perms; 220 227 invlpg(virt); 221 228 222 229 IrqRestoreFlags(flags); 223 230 return 0; … … 263 270 if (!(pageDir[PGDIR_ENT(i)]) || !(pageTable[PGTABLE_ENT(i)])) /* Definitely not used */ 264 271 { 265 VirtMemMapPage(i, page,perms);272 VirtMemMapPage(i, page, perms); 266 273 IrqRestoreFlags(flags); 267 274 return i; … … 348 355 pageTable[PGTABLE_ENT(address)] &= ~(0xFFF); 349 356 pageTable[PGTABLE_ENT(address)] |= protection; 350 // KePrint("address = %#X\n", pageTable[PGTABLE_ENT(address)]);351 357 } 352 358 } … … 386 392 if (!pageDir[PGDIR_ENT(i)] || !pageTable[PGTABLE_ENT(i)]) /* Definitely not used */ 387 393 { 388 VirtMemMapPage(i, phys,PAGE_PRESENT | PAGE_KERNEL | PAGE_RW);394 VirtMemMapPage(i, phys, PAGE_PRESENT | PAGE_KERNEL | PAGE_RW); 389 395 return i; 390 396 } … … 398 404 void VirtShowFault(DWORD address,int error) 399 405 { 400 KePrint("\nAddress = %#X (pageDir[%d] = %#X)",address, address >> 22,pageDir[address >> 22]);406 KePrint("\nAddress = %#X (pageDir[%d] = %#X)",address, address >> 22, pageDir[address >> 22]); 401 407 402 408 if (pageDir[address >> 22])
