#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 * vmmGetFreePage(kTask_t *task) { mMap *tmp; /* remove the first free entry from the free pages list */ tmp = vmmFreePages->First; freePages--; vmmFreePages->First = vmmFreePages->First->Next; vmmFreePages->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; }