private static unsafe void SelfTest(IPageFrameAllocator allocator) { if (SelfTestDump) { allocator.DumpPages(); } KernelMessage.WriteLine("Begin SelfTest {0}", allocator.DebugName); var ptrPages = (allocator.TotalPages * 4) / 4096; var ptrListAddr = AllocatePages(ptrPages); // pointers for 4GB of pages var ptrList = (Addr *)ptrListAddr; var checkPageCount = allocator.FreePages; checkPageCount -= allocator.CriticalLowPages; uint checkPagesEach = 4; checkPageCount /= checkPagesEach; //checkPageCount = 32; var mapPhysAddr = PhysicalPageManager.AllocatePageAddr(checkPagesEach); for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write("."); } var testAddr = allocator.AllocatePagesAddr(checkPagesEach); ptrList[i] = testAddr; //KernelMessage.WriteLine("{0:X8}-->{1:X8}", testAddr, mapPhysAddr); PageTable.KernelTable.Map(testAddr, mapPhysAddr, 4096 * checkPagesEach, true, true); var mapPtr = (uint *)testAddr; for (var pos = 0; pos < 1024 * checkPagesEach; pos++) { *mapPtr = 0xEBFEEBFE; mapPtr += 1; } PageTable.KernelTable.UnMap(testAddr, 4096 * checkPagesEach, true); //Default.Free(testPage); } PhysicalPageManager.FreeAddr(mapPhysAddr); if (SelfTestDump) { allocator.DumpPages(); } KernelMessage.WriteLine("Free Pages now"); for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write(":"); } var testAddr = ptrList[i]; //KernelMessage.WriteLine("Free: {0:X8}", testAddr); allocator.FreeAddr(testAddr); } KernelMessage.WriteLine("Free ptrList"); FreeAddr(ptrListAddr); KernelMessage.WriteLine("SelfTest Done"); if (SelfTestDump) { allocator.DumpPages(); KernelMessage.WriteLine("Final Dump"); } }
public static void SelfTest() { if (SelfTestDump) { Default.DumpPages(); } KernelMessage.WriteLine("Begin SelfTest"); var ptrPages = ((BootInfo.Header->InstalledPhysicalMemory / 4096) * 4) / 4096; var ptrList = (Addr *)AllocatePageAddr(ptrPages); // pointers for 4GB of pages var ptrListMapped = (Addr *)0x3000; PageTable.KernelTable.Map(ptrListMapped, ptrList, ptrPages * 4096, true, true); var checkPageCount = Default.FreePages; checkPageCount -= Default.CriticalLowPages; //checkPageCount = 32; var mapAddr = 0x2000u; for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write("."); } var testPage = Default.AllocatePage(); var testAddr = Default.GetAddress(testPage); ptrListMapped[i] = testAddr; PageTable.KernelTable.Map(mapAddr, testAddr, 4096, true, true); var mapPtr = (uint *)mapAddr; for (var pos = 0; pos < 1024; pos++) { *mapPtr = 0xEBFEEBFE; mapPtr += 1; } PageTable.KernelTable.UnMap(mapAddr, 4096, true); //Default.Free(testPage); } if (SelfTestDump) { Default.DumpPages(); } KernelMessage.WriteLine("Free Pages now"); for (var i = 0; i < checkPageCount; i++) { if (SelfTestDump) { KernelMessage.Write(":"); } var testAddr = ptrListMapped[i]; Default.FreeAddr(testAddr); } Default.FreeAddr(ptrList); KernelMessage.WriteLine("SelfTest Done"); if (SelfTestDump) { Default.DumpPages(); KernelMessage.WriteLine("Final Dump"); } }