Rearranged devzero. More bugs to fix.

This commit is contained in:
Bahadir Balban
2008-02-05 01:21:55 +00:00
parent b725d09eff
commit 3a07ae70fd
6 changed files with 22 additions and 9 deletions

View File

@@ -71,6 +71,7 @@ void handle_fs_requests(void)
void main(void) void main(void)
{ {
// printf("\n%s: Started.\n", __FUNCTION__);
initialise(); initialise();
wait_pager(PAGER_TID); wait_pager(PAGER_TID);

View File

@@ -22,7 +22,8 @@ void init_mm_descriptors(struct page_bitmap *page_map,
struct bootdesc *bootdesc, struct membank *membank); struct bootdesc *bootdesc, struct membank *membank);
void init_physmem(struct initdata *initdata, 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 *get_zero_page(void);
void put_zero_page(void); void put_zero_page(void);

View File

@@ -15,6 +15,7 @@
static void *zpage_p; static void *zpage_p;
static struct page *zpage; static struct page *zpage;
static struct vm_file devzero;
void init_zero_page(void) void init_zero_page(void)
{ {
@@ -35,6 +36,21 @@ void init_zero_page(void)
zpage->count++; 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) void *get_zero_page(void)
{ {
zpage->count++; zpage->count++;

View File

@@ -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 */ /* Add the page to it's owner's list of in-memory pages */
BUG_ON(!list_empty(&page->list)); BUG_ON(!list_empty(&page->list));
BUG();
list_add(&page->list, &page->owner->page_cache_list); list_add(&page->list, &page->owner->page_cache_list);
/* The offset of this page in its owner file */ /* 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); err = do_file_page(fault);
/* Return the ipc and by doing so restart the faulty thread */ /* Return the ipc and by doing so restart the faulty thread */
printf("Finished handling fault. Restarting thread by returning.\n");
l4_ipc_return(err); l4_ipc_return(err);
return 0; return 0;
} }

View File

@@ -33,7 +33,7 @@ void init_mm(struct initdata *initdata)
printf("%s: Initialised page allocator.\n", __TASKNAME__); printf("%s: Initialised page allocator.\n", __TASKNAME__);
/* Initialise the zero page */ /* Initialise the zero page */
init_zero_page(); init_devzero();
printf("%s: Initialised zero page.\n", __TASKNAME__); printf("%s: Initialised zero page.\n", __TASKNAME__);
init_utcb(); init_utcb();

View File

@@ -9,10 +9,9 @@
#include <posix/sys/types.h> #include <posix/sys/types.h>
#include <task.h> #include <task.h>
#include <mmap.h> #include <mmap.h>
#include <memory.h>
#include <l4lib/arch/syscalls.h> #include <l4lib/arch/syscalls.h>
static struct vm_file devzero;
/* Swap related bookkeeping. /* Swap related bookkeeping.
static struct vm_file shm_swap_file; static struct vm_file shm_swap_file;
static struct id_pool *swap_file_offset_pool; 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 */ /* 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, int vma_shrink(struct vm_area *vma, struct tcb *task, unsigned long pfn_start,
unsigned long pfn_end) 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 (!mapfile) {
if (flags & VMA_ANON) { if (flags & VMA_ANON) {
mapfile = &devzero; mapfile = get_devzero();
f_offset = 0; f_offset = 0;
} else } else
BUG(); BUG();