Newer
Older
ubixos / src / sys / mm / getfreepage.c
@fsdfs fsdfs on 10 Aug 2005 585 bytes header files and such.
#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;
}