diff --git a/src/sys/include/mm/paging.h b/src/sys/include/mm/paging.h index 5dfbb97..1817f1a 100644 --- a/src/sys/include/mm/paging.h +++ b/src/sys/include/mm/paging.h @@ -16,3 +16,5 @@ #define PAGE_EXECUTE 0x00000008 #define PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE|PAGE_USER) #define KERNEL_PAGE_DEFAULT (PAGE_PRESENT|PAGE_WRITE) + +#endif diff --git a/src/sys/include/mm/vmm.h b/src/sys/include/mm/vmm.h index 0f7ce3d..37cbbf1 100644 --- a/src/sys/include/mm/vmm.h +++ b/src/sys/include/mm/vmm.h @@ -2,29 +2,23 @@ #define _VMM_H #include -#include #include -#define memAvail 1 -#define memNotavail 2 -#define vmmID -3 -#define vmmMemoryMapAddr 0xE6667000 - typedef struct _mMap mMap; struct _mMap { - uInt32 pageAddr; - uInt32 physicalAddr; + uInt32 pageAddr; /* same as physicalAddr for kernel */ + mMap *link; /* the next contiguous block */ + uInt32 physicalAddr; mMap *First; mMap *Last; mMap *Next; mMap *Previous; - spinLock_t *lock; }; -extern int numPages; -extern uInt32 freePages; -extern uInt32 usedPages; +int numPages; +uInt32 freePages; +uInt32 usedPages; mMap *mmFreePages; - +#endif diff --git a/src/sys/include/ubixos/sched.h b/src/sys/include/ubixos/sched.h index ec9cd6d..0e5825c 100644 --- a/src/sys/include/ubixos/sched.h +++ b/src/sys/include/ubixos/sched.h @@ -31,7 +31,6 @@ #define _SCHED_H #include -#include #include #include #include @@ -84,7 +83,6 @@ uInt8 Priority; mMap *FirstPage; mMap *LastPage; - spinLock_t *lock; } kTask_t; diff --git a/src/sys/mm/Makefile b/src/sys/mm/Makefile index d68c945..9ceae56 100644 --- a/src/sys/mm/Makefile +++ b/src/sys/mm/Makefile @@ -6,7 +6,7 @@ include ../Makefile.inc # Objects -OBJS = page_fault.o pagefault.o copyvirtualspace.o getfreepage.o memory.o +OBJS = page_fault.o pagefault.o copyvirtualspace.o getfreepage.o memory.o kmalloc.o kfree.o all: $(OBJS) diff --git a/src/sys/mm/copyvirtualspace.c b/src/sys/mm/copyvirtualspace.c index e6bd7be..f2e73eb 100644 --- a/src/sys/mm/copyvirtualspace.c +++ b/src/sys/mm/copyvirtualspace.c @@ -35,9 +35,7 @@ for(;;) { tmp2->Previous = prev; - tmp2->pid = new->id; tmp2->pageAddr = tmp->pageAddr; - tmp2->status = tmp->status; prev = tmp2; tmp2 = (mMap *) kmalloc(sizeof(mMap)); prev->Next = tmp2; diff --git a/src/sys/mm/getfreepage.c b/src/sys/mm/getfreepage.c index 6d7130e..0484076 100644 --- a/src/sys/mm/getfreepage.c +++ b/src/sys/mm/getfreepage.c @@ -1,18 +1,15 @@ -#include #include -#include -#include -#include -static spinLock_t vmmGFPlock = SPIN_LOCK_INITIALIZER; +#include -void * mmGetFreeVirtualPage(kTask_t *task) +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 = mmFreePages->First->Next; mmFreePages->First->Previous = NULL; /* add the free entry to the task's pages list */ diff --git a/src/sys/mm/memory.c b/src/sys/mm/memory.c index 10dc626..80e8876 100644 --- a/src/sys/mm/memory.c +++ b/src/sys/mm/memory.c @@ -1,4 +1,4 @@ -#include +#include #include #include #include diff --git a/src/sys/mm/pagefault.c b/src/sys/mm/pagefault.c index 083f13d..8b9c04f 100644 --- a/src/sys/mm/pagefault.c +++ b/src/sys/mm/pagefault.c @@ -1,12 +1,12 @@ #include #include #include -static spinLock_t pageFaultSpinLock = SPIN_LOCK_INITIALIZER; void LoadPageIntoMemory(mMap *page); void vmm_pageFault2(uInt32 memAddr, uInt32 eip, uInt32 esp) { + /* WARNING: this is not SMP safe to use _current! */ kTask_t *tmp = _current; mMap *m = tmp->FirstPage;