diff --git a/src/kernel/core/cbuf.c b/src/kernel/core/cbuf.c index 315d0935ec..861df14bbb 100644 --- a/src/kernel/core/cbuf.c +++ b/src/kernel/core/cbuf.c @@ -956,17 +956,15 @@ cbuf_init(void) // errors are fatal, that's why we don't clean up here - sBufferArea = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "cbuf region", - (void **)&sBuffer, REGION_ADDR_ANY_ADDRESS, CBUF_REGION_SIZE, - REGION_WIRING_LAZY, LOCK_RW|LOCK_KERNEL); + sBufferArea = create_area("cbuf region", (void **)&sBuffer, B_ANY_KERNEL_ADDRESS, + CBUF_REGION_SIZE, B_NO_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); if (sBufferArea < 0) { panic("cbuf_init: error creating cbuf region\n"); return B_NO_MEMORY; } - sBitmapArea = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "cbuf bitmap region", - (void **)&sBitmap, REGION_ADDR_ANY_ADDRESS, - CBUF_BITMAP_SIZE / 8, REGION_WIRING_WIRED, LOCK_RW|LOCK_KERNEL); + sBitmapArea = create_area("cbuf bitmap region", (void **)&sBitmap, B_ANY_KERNEL_ADDRESS, + CBUF_BITMAP_SIZE / 8, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); if (sBitmapArea < 0) { panic("cbuf_init: error creating cbuf bitmap region\n"); return B_NO_MEMORY; diff --git a/src/kernel/core/elf.c b/src/kernel/core/elf.c index 996ed7f7d2..f12a2124e6 100644 --- a/src/kernel/core/elf.c +++ b/src/kernel/core/elf.c @@ -755,7 +755,7 @@ elf_load_kspace(const char *path, const char *sym_prepend) bool ro_segment_handled = false; bool rw_segment_handled = false; int image_region; - int lock; + int protection; PRINT(("looking at program header %d\n", i)); @@ -773,24 +773,26 @@ elf_load_kspace(const char *path, const char *sym_prepend) // we're here, so it must be a PT_LOAD segment if ((pheaders[i].p_flags & (PF_R | PF_W | PF_X)) == (PF_R | PF_W)) { // this is the writable segment - if(rw_segment_handled) { + if (rw_segment_handled) { // we've already created this segment continue; } rw_segment_handled = true; image_region = 1; - lock = LOCK_RW|LOCK_KERNEL; + protection = B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA; sprintf(region_name, "%s_rw", path); } else if ((pheaders[i].p_flags & (PF_R | PF_W | PF_X)) == (PF_R | PF_X)) { // this is the non-writable segment - if(ro_segment_handled) { + if (ro_segment_handled) { // we've already created this segment continue; } ro_segment_handled = true; image_region = 0; -// lock = LOCK_RO|LOCK_KERNEL; - lock = LOCK_RW|LOCK_KERNEL; + protection = B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA; + // ToDo: why is this? Right now, the kernel crashes without + // it, so go, investigate! + sprintf(region_name, "%s_ro", path); } else { dprintf("weird program header flags 0x%lx\n", pheaders[i].p_flags); @@ -798,9 +800,9 @@ elf_load_kspace(const char *path, const char *sym_prepend) } image->regions[image_region].size = ROUNDUP(pheaders[i].p_memsz + (pheaders[i].p_vaddr % PAGE_SIZE), PAGE_SIZE); - image->regions[image_region].id = vm_create_anonymous_region(vm_get_kernel_aspace_id(), region_name, - (void **)&image->regions[image_region].start, REGION_ADDR_ANY_ADDRESS, - image->regions[image_region].size, REGION_WIRING_WIRED, lock); + image->regions[image_region].id = create_area(region_name, + (void **)&image->regions[image_region].start, B_ANY_KERNEL_ADDRESS, + image->regions[image_region].size, B_FULL_LOCK, protection); if (image->regions[image_region].id < 0) { dprintf("error allocating region!\n"); err = ERR_INVALID_BINARY; @@ -853,9 +855,9 @@ done: error4: if (image->regions[1].id >= 0) - vm_delete_region(vm_get_kernel_aspace_id(), image->regions[1].id); + delete_area(image->regions[1].id); if (image->regions[0].id >= 0) - vm_delete_region(vm_get_kernel_aspace_id(), image->regions[0].id); + delete_area(image->regions[0].id); error3: free(image); error2: @@ -895,7 +897,7 @@ elf_unload_image_final(struct elf_image_info *image) int i; for (i = 0; i < 2; ++i) { - vm_delete_region(vm_get_kernel_aspace_id(), image->regions[i].id); + delete_area(image->regions[i].id); } if (image->vnode) diff --git a/src/kernel/core/port.c b/src/kernel/core/port.c index 2dac4b6080..c71c5fe127 100644 --- a/src/kernel/core/port.c +++ b/src/kernel/core/port.c @@ -68,18 +68,16 @@ status_t port_init(kernel_args *ka) { int i; - int sz; - - sz = sizeof(struct port_entry) * MAX_PORTS; + int size = sizeof(struct port_entry) * MAX_PORTS; // create and initialize semaphore table - port_region = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "port_table", (void **)&ports, - REGION_ADDR_ANY_ADDRESS, sz, REGION_WIRING_WIRED, LOCK_RW|LOCK_KERNEL); + port_region = create_area("port_table", (void **)&ports, B_ANY_KERNEL_ADDRESS, + size, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); if (port_region < 0) { panic("unable to allocate kernel port table!\n"); } - memset(ports, 0, sz); + memset(ports, 0, size); for (i = 0; i < MAX_PORTS; i++) ports[i].id = -1; diff --git a/src/kernel/core/sem.c b/src/kernel/core/sem.c index 68b6c36b81..37e14ed5d4 100644 --- a/src/kernel/core/sem.c +++ b/src/kernel/core/sem.c @@ -185,9 +185,8 @@ sem_init(kernel_args *ka) TRACE(("sem_init: entry\n")); // create and initialize semaphore table - gSemRegion = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "sem_table", - (void **)&gSems, REGION_ADDR_ANY_ADDRESS, sizeof(struct sem_entry) * MAX_SEMS, - REGION_WIRING_WIRED, LOCK_RW | LOCK_KERNEL); + gSemRegion = create_area("sem_table", (void **)&gSems, B_ANY_KERNEL_ADDRESS, + sizeof(struct sem_entry) * MAX_SEMS, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); if (gSemRegion < 0) panic("unable to allocate semaphore table!\n"); diff --git a/src/kernel/core/thread.c b/src/kernel/core/thread.c index 13e0256654..15cc1d953e 100644 --- a/src/kernel/core/thread.c +++ b/src/kernel/core/thread.c @@ -334,9 +334,9 @@ create_thread(const char *name, team_id teamID, thread_func entry, void *args1, } sprintf(stack_name, "%s_kstack", name); - t->kernel_stack_region_id = vm_create_anonymous_region(vm_get_kernel_aspace_id(), stack_name, - (void **)&t->kernel_stack_base, REGION_ADDR_ANY_ADDRESS, KSTACK_SIZE, - REGION_WIRING_WIRED, LOCK_RW|LOCK_KERNEL); + t->kernel_stack_region_id = create_area(stack_name, (void **)&t->kernel_stack_base, + B_ANY_KERNEL_ADDRESS, KSTACK_SIZE, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); + if (t->kernel_stack_region_id < 0) panic("_create_thread: error creating kernel stack!\n"); @@ -672,7 +672,7 @@ thread_exit2(void *_args) // delete the old kernel stack region TRACE(("thread_exit2: deleting old kernel stack id 0x%x for thread 0x%x\n", args.old_kernel_stack, args.t->id)); - vm_delete_region(vm_get_kernel_aspace_id(), args.old_kernel_stack); + delete_area(args.old_kernel_stack); // remove this thread from all of the global lists TRACE(("thread_exit2: removing thread 0x%x from global lists\n", args.t->id)); @@ -1094,9 +1094,8 @@ thread_init(kernel_args *ka) for (i = 0; i < num_death_stacks; i++) { sprintf(temp, "death_stack%d", i); - death_stacks[i].rid = vm_create_anonymous_region(vm_get_kernel_aspace_id(), temp, - (void **)&death_stacks[i].address, - REGION_ADDR_ANY_ADDRESS, KSTACK_SIZE, REGION_WIRING_WIRED, LOCK_RW|LOCK_KERNEL); + death_stacks[i].rid = create_area(temp, (void **)&death_stacks[i].address, + B_ANY_KERNEL_ADDRESS, KSTACK_SIZE, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA); if (death_stacks[i].rid < 0) { panic("error creating death stacks\n"); return death_stacks[i].rid;