diff --git a/tasks/mm0/include/vm_area.h b/tasks/mm0/include/vm_area.h index d42014f..4e7b8cc 100644 --- a/tasks/mm0/include/vm_area.h +++ b/tasks/mm0/include/vm_area.h @@ -32,7 +32,7 @@ /* Defines the type of file. A device file? Regular file? One used at boot? */ enum VM_FILE_TYPE { - VM_FILE_DEVZERO = 0, + VM_FILE_DEVZERO = 1, VM_FILE_REGULAR, VM_FILE_BOOTFILE, }; diff --git a/tasks/mm0/src/mmap.c b/tasks/mm0/src/mmap.c index 49a1ce8..ce8abf0 100644 --- a/tasks/mm0/src/mmap.c +++ b/tasks/mm0/src/mmap.c @@ -461,7 +461,7 @@ int do_mmap(struct vm_file *mapfile, unsigned long file_offset, struct tcb *task /* Set up devzero if none given */ if (!mapfile) { if (flags & VMA_ANONYMOUS) { - mapfile = get_devzero(); + BUG_ON(!(mapfile = get_devzero())); file_offset = 0; } else BUG(); diff --git a/tasks/mm0/src/pagers.c b/tasks/mm0/src/pagers.c index 57ae5a8..d9b52b7 100644 --- a/tasks/mm0/src/pagers.c +++ b/tasks/mm0/src/pagers.c @@ -266,7 +266,7 @@ struct vm_file *get_devzero(void) struct vm_file *f; list_for_each_entry(f, &vm_file_list, list) - if (f->type & VM_FILE_DEVZERO) + if ((f->type & VM_FILE_DEVZERO) == VM_FILE_DEVZERO) return f; return 0; } diff --git a/tasks/mm0/src/task.c b/tasks/mm0/src/task.c index 84c727f..eb68cac 100644 --- a/tasks/mm0/src/task.c +++ b/tasks/mm0/src/task.c @@ -265,7 +265,7 @@ int start_boot_task(struct vm_file *file, struct task_ids *ids) /* mmap each task's environment as anonymous memory. */ if ((err = do_mmap(0, 0, task, task->env_start, - VM_READ | VM_WRITE | VMA_PRIVATE, + VM_READ | VM_WRITE | VMA_PRIVATE | VMA_ANONYMOUS, __pfn(task->env_end - task->env_start)) < 0)) { printf("do_mmap: Mapping environment failed with %d.\n", err); @@ -274,7 +274,7 @@ int start_boot_task(struct vm_file *file, struct task_ids *ids) /* mmap each task's stack as anonymous memory. */ if ((err = do_mmap(0, 0, task, task->stack_start, - VM_READ | VM_WRITE | VMA_PRIVATE, + VM_READ | VM_WRITE | VMA_PRIVATE | VMA_ANONYMOUS, __pfn(task->stack_end - task->stack_start)) < 0)) { printf("do_mmap: Mapping stack failed with %d.\n", err); goto error; @@ -284,7 +284,7 @@ int start_boot_task(struct vm_file *file, struct task_ids *ids) printf("%s: Mapping utcb for new task at: 0x%x\n", __TASKNAME__, task->utcb_address); if ((err = do_mmap(0, 0, task, task->utcb_address, - VM_READ | VM_WRITE | VMA_SHARED, + VM_READ | VM_WRITE | VMA_SHARED | VMA_ANONYMOUS, DEFAULT_UTCB_SIZE) < 0)) { printf("do_mmap: Mapping utcb failed with %d.\n", err); goto error;