From deb2c0ed3b6cd2aba8ad5f811ca0e2ba41892220 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Mon, 20 Jan 2020 19:38:27 +0100 Subject: [PATCH] paging and allocator functional, heap bug resolved #67 --- kaleid/kernel/mm/paging.c | 16 ++++++++-------- kaleid/kernel/mm/palloc.c | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kaleid/kernel/mm/paging.c b/kaleid/kernel/mm/paging.c index 16d574d..ad253d6 100644 --- a/kaleid/kernel/mm/paging.c +++ b/kaleid/kernel/mm/paging.c @@ -87,7 +87,7 @@ void MmInitPaging(void) // Alloc structures memzero((void *)&MmPageMapLevel4[0], 512*sizeof(ulong)); - KalAllocMemoryEx((void**)&MmPhysicalPageTable, phDirSize, M_ZEROED, KPAGESIZE); + MmPhysicalPageTable = memalign(phDirSize, KPAGESIZE); //DebugLog("\t\t\t\tPhysical map addr : %p\n", MmPhysicalPageTable); @@ -105,7 +105,7 @@ void MmInitPaging(void) continue; } - KalAllocMemoryEx((void**)&MmPDP, 512*sizeof(pde_t), M_ZEROED, KPAGESIZE); + MmPDP = memalign(512*sizeof(pde_t), KPAGESIZE); if (!firstDirectoryAddr) { firstDirectoryAddr = (ulong)MmPDP; @@ -128,7 +128,7 @@ void MmInitPaging(void) continue; } - KalAllocMemoryEx((void**)&MmPD, 512*sizeof(pde_t), M_ZEROED, KPAGESIZE); + MmPD = memalign(512*sizeof(pde_t), KPAGESIZE); index = (curAddrPDP / ((ulong)KPAGESIZE * 0x40000)) % 512; @@ -149,7 +149,7 @@ void MmInitPaging(void) continue; } - KalAllocMemoryEx((void**)&MmPT, 512*sizeof(pte_t), M_ZEROED, KPAGESIZE); + MmPT = memalign(512*sizeof(pte_t), KPAGESIZE); //DebugLog("\t\t\t\tPT %d : %p\n", index, MmPT); MmPD[index] = (pte_t *)((ulong)MmPT | PRESENT | READWRITE); @@ -232,7 +232,7 @@ ulong *MmGetPageDescriptorFromVirtual(void *virtualAddr) if (!((ulong)MmPageMapLevel4[pml4Index] & 0xFFFFFFFFFF000)) { // Select bit from 12 to 51 // Alloc space - KalAllocMemoryEx((void**)&MmPageMapLevel4[pml4Index], 512*sizeof(pdpe_t), M_ZEROED, KPAGESIZE); + MmPageMapLevel4[pml4Index] = memalign(512*sizeof(pdpe_t), KPAGESIZE); // Set present MmPageMapLevel4[pml4Index] = (pml4_t)((ulong)MmPageMapLevel4[pml4Index] | PRESENT | READWRITE); @@ -248,7 +248,7 @@ ulong *MmGetPageDescriptorFromVirtual(void *virtualAddr) if (!((ulong)pdp[pdpIndex] & 0xFFFFFFFFFF000)) { // Select bit from 12 to 51 - KalAllocMemoryEx((void**)&pdp[pdpIndex], 512*sizeof(pde_t), M_ZEROED, KPAGESIZE); + pdp[pdpIndex] = memalign(512*sizeof(pde_t), KPAGESIZE); pdp[pdpIndex] = (pdpe_t)((ulong)pdp[pdpIndex] | PRESENT | READWRITE); @@ -262,8 +262,8 @@ ulong *MmGetPageDescriptorFromVirtual(void *virtualAddr) DebugLog("\tPD[%d] = %p\n", pdIndex, pd[pdIndex]); if (!((ulong)pd[pdIndex] & 0xFFFFFFFFFF000)) { // Select bit from 12 to 51 - // - KalAllocMemoryEx((void**)&pd[pdIndex], 512*sizeof(pte_t), M_ZEROED, KPAGESIZE); + + pd[pdIndex] = memalign(512*sizeof(pte_t), KPAGESIZE); pd[pdIndex] = (pde_t)((ulong)pd[pdIndex] | PRESENT | READWRITE); diff --git a/kaleid/kernel/mm/palloc.c b/kaleid/kernel/mm/palloc.c index 03e79be..31fb17a 100644 --- a/kaleid/kernel/mm/palloc.c +++ b/kaleid/kernel/mm/palloc.c @@ -297,7 +297,7 @@ error_t MmTestBusyPage(void) ulong a = KeGetTicks(); DebugLog("Start alloc 30 MB: %lu s\n", a/1000); tab[j++] = MmAllocPageFrame(5*MB, NORMAL); - tab[j++] = MmAllocPageFrame(513*4*KB, NORMAL); + tab[j++] = MmAllocPageFrame(5*MB, NORMAL); ulong b = KeGetTicks(); DebugLog("End alloc : %lu s\n", b/1000); DebugLog("Alloc time : %lu s\n", (b-a)/1000);