From 3a07ae70fd052a2e6f4ae4856f88ff4c93f03ef8 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Tue, 5 Feb 2008 01:21:55 +0000 Subject: [PATCH] Rearranged devzero. More bugs to fix. --- tasks/fs0/main.c | 1 + tasks/mm0/include/memory.h | 3 ++- tasks/mm0/src/{zpage.c => devzero.c} | 16 ++++++++++++++++ tasks/mm0/src/fault.c | 3 --- tasks/mm0/src/init.c | 2 +- tasks/mm0/src/mmap.c | 6 ++---- 6 files changed, 22 insertions(+), 9 deletions(-) rename tasks/mm0/src/{zpage.c => devzero.c} (75%) diff --git a/tasks/fs0/main.c b/tasks/fs0/main.c index c77af73..4887467 100644 --- a/tasks/fs0/main.c +++ b/tasks/fs0/main.c @@ -71,6 +71,7 @@ void handle_fs_requests(void) void main(void) { + // printf("\n%s: Started.\n", __FUNCTION__); initialise(); wait_pager(PAGER_TID); diff --git a/tasks/mm0/include/memory.h b/tasks/mm0/include/memory.h index daf60d0..139919c 100644 --- a/tasks/mm0/include/memory.h +++ b/tasks/mm0/include/memory.h @@ -22,7 +22,8 @@ void init_mm_descriptors(struct page_bitmap *page_map, struct bootdesc *bootdesc, struct membank *membank); void init_physmem(struct initdata *initdata, struct membank *membank); -void init_zero_page(void); +void init_devzero(void); +struct vm_file *get_devzero(void); void *get_zero_page(void); void put_zero_page(void); diff --git a/tasks/mm0/src/zpage.c b/tasks/mm0/src/devzero.c similarity index 75% rename from tasks/mm0/src/zpage.c rename to tasks/mm0/src/devzero.c index e43379a..c003d37 100644 --- a/tasks/mm0/src/zpage.c +++ b/tasks/mm0/src/devzero.c @@ -15,6 +15,7 @@ static void *zpage_p; static struct page *zpage; +static struct vm_file devzero; void init_zero_page(void) { @@ -35,6 +36,21 @@ void init_zero_page(void) zpage->count++; } +void init_devzero(void) +{ + init_zero_page(); + + INIT_LIST_HEAD(&devzero.list); + INIT_LIST_HEAD(&devzero.page_cache_list); + devzero.length = (unsigned int)-1; + devzero.inode.i_addr = -1; +} + +struct vm_file *get_devzero(void) +{ + return &devzero; +} + void *get_zero_page(void) { zpage->count++; diff --git a/tasks/mm0/src/fault.c b/tasks/mm0/src/fault.c index e0c95fa..bab8e64 100644 --- a/tasks/mm0/src/fault.c +++ b/tasks/mm0/src/fault.c @@ -317,7 +317,6 @@ int do_anon_page(struct fault_data *fault) /* Add the page to it's owner's list of in-memory pages */ BUG_ON(!list_empty(&page->list)); - BUG(); list_add(&page->list, &page->owner->page_cache_list); /* The offset of this page in its owner file */ @@ -400,8 +399,6 @@ int do_page_fault(struct fault_data *fault) err = do_file_page(fault); /* Return the ipc and by doing so restart the faulty thread */ - printf("Finished handling fault. Restarting thread by returning.\n"); - l4_ipc_return(err); return 0; } diff --git a/tasks/mm0/src/init.c b/tasks/mm0/src/init.c index 827dde8..e191b1e 100644 --- a/tasks/mm0/src/init.c +++ b/tasks/mm0/src/init.c @@ -33,7 +33,7 @@ void init_mm(struct initdata *initdata) printf("%s: Initialised page allocator.\n", __TASKNAME__); /* Initialise the zero page */ - init_zero_page(); + init_devzero(); printf("%s: Initialised zero page.\n", __TASKNAME__); init_utcb(); diff --git a/tasks/mm0/src/mmap.c b/tasks/mm0/src/mmap.c index 45c2cfc..9230138 100644 --- a/tasks/mm0/src/mmap.c +++ b/tasks/mm0/src/mmap.c @@ -9,10 +9,9 @@ #include #include #include +#include #include -static struct vm_file devzero; - /* Swap related bookkeeping. static struct vm_file shm_swap_file; static struct id_pool *swap_file_offset_pool; @@ -253,7 +252,6 @@ int vma_swapfile_realloc(struct vm_area *vma, unsigned long pfn_start, } - /* This shrinks the vma from *one* end only, either start or end */ int vma_shrink(struct vm_area *vma, struct tcb *task, unsigned long pfn_start, unsigned long pfn_end) @@ -441,7 +439,7 @@ int do_mmap(struct vm_file *mapfile, unsigned long f_offset, struct tcb *t, if (!mapfile) { if (flags & VMA_ANON) { - mapfile = &devzero; + mapfile = get_devzero(); f_offset = 0; } else BUG();