|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
#include "uaddrspace.h"
|
|
|
|
|
#include "alloc.h"
|
|
|
|
|
#include "kernel.h"
|
|
|
|
|
#include "klibc.h"
|
|
|
|
|
#include "mem.h"
|
|
|
|
|
#include "mmuContext.h"
|
|
|
|
|
#include "process.h"
|
|
|
|
@ -105,15 +106,26 @@ uaddr_t sysBrk(struct uAddrSpace *as, uaddr_t newHeapTop)
|
|
|
|
|
return as->heapStart + as->heapSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//WIP do it manually
|
|
|
|
|
for (uaddr_t begin = ALIGN(as->heapStart + as->heapSize, PAGE_SIZE); begin < newHeapTop; begin += PAGE_SIZE) {
|
|
|
|
|
paddr_t ppage = allocPhyPage(1);
|
|
|
|
|
if (0 != pageMap(begin, ppage,
|
|
|
|
|
PAGING_MEM_USER | PAGING_MEM_WRITE | PAGING_MEM_READ))
|
|
|
|
|
return (uaddr_t)NULL;
|
|
|
|
|
as->heapSize += incSize;
|
|
|
|
|
|
|
|
|
|
unrefPhyPage(ppage);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int uAddrSpaceCheckNAlloc(struct uAddrSpace *as, vaddr_t addr)
|
|
|
|
|
{
|
|
|
|
|
pr_devel("Checking %p inside %p and %p", addr, as->heapStart, as->heapStart +as->heapSize);
|
|
|
|
|
if (addr < as->heapStart || addr >= as->heapStart + as->heapSize) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
vaddr_t addrAlign = ALIGN_DOWN(addr, PAGE_SIZE);
|
|
|
|
|
paddr_t ppage = allocPhyPage(1);
|
|
|
|
|
|
|
|
|
|
if (0 != pageMap(addrAlign, ppage, PAGING_MEM_USER | PAGING_MEM_WRITE | PAGING_MEM_READ)) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
unrefPhyPage(ppage);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|