#include <ubixos/spinlock.h> #include <ubixos/sched.h> #include <vmm/vmm.h> #include <vmm/paging.h> #include <ubixos/kpanic.h> static spinLock_t vmmGFPlock = SPIN_LOCK_INITIALIZER; void * mmGetFreeVirtualPage(kTask_t *task) { mMap *tmp; /* remove the first free entry from the free pages list */ tmp = mmFreePages->First; freePages--; mmFreePages->First = vmmFreePages->First->Next; mmFreePages->First->Previous = NULL; /* add the free entry to the task's pages list */ usedPages++; tmp->Next = NULL; tmp->Previous = task->LastPage; task->LastPage = tmp; return tmp; }