Got rid of regions - we're now back in area-land.
Renamed vm_area::lock to vm_area::protection to be less confusing - wiring is still called wiring, though (might be renamed to lock later, as that's how BeOS calls it). Renamed some global variables to match our naming scheme. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9860 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+381
-381
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright 2002-2004, The Haiku Team. All rights reserved.
|
||||
** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
** Distributed under the terms of the Haiku License.
|
||||
**
|
||||
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
||||
@@ -58,7 +58,7 @@ static sem_id aspace_hash_sem;
|
||||
static void
|
||||
_dump_aspace(vm_address_space *aspace)
|
||||
{
|
||||
vm_region *region;
|
||||
vm_area *area;
|
||||
|
||||
dprintf("dump of address space at %p:\n", aspace);
|
||||
dprintf("name: '%s'\n", aspace->name);
|
||||
@@ -71,14 +71,14 @@ _dump_aspace(vm_address_space *aspace)
|
||||
dprintf("virtual_map.size: 0x%lx\n", aspace->virtual_map.size);
|
||||
dprintf("virtual_map.change_count: 0x%x\n", aspace->virtual_map.change_count);
|
||||
dprintf("virtual_map.sem: 0x%lx\n", aspace->virtual_map.sem);
|
||||
dprintf("virtual_map.region_hint: %p\n", aspace->virtual_map.region_hint);
|
||||
dprintf("virtual_map.region_hint: %p\n", aspace->virtual_map.area_hint);
|
||||
dprintf("virtual_map.region_list:\n");
|
||||
for (region = aspace->virtual_map.region_list; region != NULL; region = region->aspace_next) {
|
||||
dprintf(" region 0x%lx: ", region->id);
|
||||
dprintf("base_addr = 0x%lx ", region->base);
|
||||
dprintf("size = 0x%lx ", region->size);
|
||||
dprintf("name = '%s' ", region->name);
|
||||
dprintf("lock = 0x%x\n", region->lock);
|
||||
for (area = aspace->virtual_map.areas; area != NULL; area = area->aspace_next) {
|
||||
dprintf(" region 0x%lx: ", area->id);
|
||||
dprintf("base_addr = 0x%lx ", area->base);
|
||||
dprintf("size = 0x%lx ", area->size);
|
||||
dprintf("name = '%s' ", area->name);
|
||||
dprintf("protection = 0x%lx\n", area->protection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,8 +322,8 @@ vm_create_aspace(const char *name, addr_t base, addr_t size, bool kernel, vm_add
|
||||
// initialize the virtual map
|
||||
aspace->virtual_map.base = base;
|
||||
aspace->virtual_map.size = size;
|
||||
aspace->virtual_map.region_list = NULL;
|
||||
aspace->virtual_map.region_hint = NULL;
|
||||
aspace->virtual_map.areas = NULL;
|
||||
aspace->virtual_map.area_hint = NULL;
|
||||
aspace->virtual_map.change_count = 0;
|
||||
aspace->virtual_map.sem = create_sem(WRITE_COUNT, "aspacelock");
|
||||
aspace->virtual_map.aspace = aspace;
|
||||
@@ -366,7 +366,7 @@ vm_aspace_init(void)
|
||||
next_aspace_id = 0;
|
||||
aspace_hash_sem = -1;
|
||||
|
||||
// create the region and address space hash tables
|
||||
// create the area and address space hash tables
|
||||
{
|
||||
vm_address_space *aspace;
|
||||
aspace_table = hash_init(ASPACE_HASH_TABLE_SIZE, (addr_t)&aspace->hash_next - (addr_t)aspace,
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
/*
|
||||
** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
** Distributed under the terms of the Haiku License.
|
||||
**
|
||||
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
||||
** Distributed under the terms of the NewOS License.
|
||||
*/
|
||||
|
||||
|
||||
#include <kernel.h>
|
||||
#include <vm.h>
|
||||
#include <vm_priv.h>
|
||||
@@ -122,7 +126,7 @@ vm_cache_ref_create(vm_cache *cache)
|
||||
|
||||
ref->cache = cache;
|
||||
mutex_init(&ref->lock, "cache_ref_mutex");
|
||||
ref->region_list = NULL;
|
||||
ref->areas = NULL;
|
||||
ref->ref_count = 0;
|
||||
cache->ref = ref;
|
||||
|
||||
@@ -352,15 +356,15 @@ vm_cache_resize(vm_cache_ref *cacheRef, size_t newSize)
|
||||
|
||||
|
||||
status_t
|
||||
vm_cache_insert_region(vm_cache_ref *cache_ref, vm_region *region)
|
||||
vm_cache_insert_area(vm_cache_ref *cache_ref, vm_area *area)
|
||||
{
|
||||
mutex_lock(&cache_ref->lock);
|
||||
|
||||
region->cache_next = cache_ref->region_list;
|
||||
if (region->cache_next)
|
||||
region->cache_next->cache_prev = region;
|
||||
region->cache_prev = NULL;
|
||||
cache_ref->region_list = region;
|
||||
area->cache_next = cache_ref->areas;
|
||||
if (area->cache_next)
|
||||
area->cache_next->cache_prev = area;
|
||||
area->cache_prev = NULL;
|
||||
cache_ref->areas = area;
|
||||
|
||||
mutex_unlock(&cache_ref->lock);
|
||||
return B_OK;
|
||||
@@ -368,16 +372,16 @@ vm_cache_insert_region(vm_cache_ref *cache_ref, vm_region *region)
|
||||
|
||||
|
||||
status_t
|
||||
vm_cache_remove_region(vm_cache_ref *cache_ref, vm_region *region)
|
||||
vm_cache_remove_area(vm_cache_ref *cache_ref, vm_area *area)
|
||||
{
|
||||
mutex_lock(&cache_ref->lock);
|
||||
|
||||
if (region->cache_prev)
|
||||
region->cache_prev->cache_next = region->cache_next;
|
||||
if (region->cache_next)
|
||||
region->cache_next->cache_prev = region->cache_prev;
|
||||
if (cache_ref->region_list == region)
|
||||
cache_ref->region_list = region->cache_next;
|
||||
if (area->cache_prev)
|
||||
area->cache_prev->cache_next = area->cache_next;
|
||||
if (area->cache_next)
|
||||
area->cache_next->cache_prev = area->cache_prev;
|
||||
if (cache_ref->areas == area)
|
||||
cache_ref->areas = area->cache_next;
|
||||
|
||||
mutex_unlock(&cache_ref->lock);
|
||||
return B_OK;
|
||||
|
||||
@@ -25,8 +25,8 @@ static addr_t free_memory_high_water;
|
||||
static void
|
||||
scan_pages(vm_address_space *aspace, addr_t free_target)
|
||||
{
|
||||
vm_region *first_region;
|
||||
vm_region *region;
|
||||
vm_area *firstArea;
|
||||
vm_area *area;
|
||||
vm_page *page;
|
||||
addr_t va;
|
||||
addr_t pa;
|
||||
@@ -38,30 +38,30 @@ scan_pages(vm_address_space *aspace, addr_t free_target)
|
||||
|
||||
acquire_sem_etc(aspace->virtual_map.sem, READ_COUNT, 0, 0);
|
||||
|
||||
first_region = aspace->virtual_map.region_list;
|
||||
while (first_region && (first_region->base + (first_region->size - 1)) < aspace->scan_va)
|
||||
first_region = first_region->aspace_next;
|
||||
firstArea = aspace->virtual_map.areas;
|
||||
while (firstArea && (firstArea->base + (firstArea->size - 1)) < aspace->scan_va)
|
||||
firstArea = firstArea->aspace_next;
|
||||
|
||||
if (!first_region)
|
||||
first_region = aspace->virtual_map.region_list;
|
||||
if (!firstArea)
|
||||
firstArea = aspace->virtual_map.areas;
|
||||
|
||||
if (!first_region) {
|
||||
if (!firstArea) {
|
||||
release_sem_etc(aspace->virtual_map.sem, READ_COUNT, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
region = first_region;
|
||||
area = firstArea;
|
||||
for (;;) {
|
||||
// ignore reserved ranges
|
||||
while (region != NULL && region->id == RESERVED_REGION_ID)
|
||||
region = region->aspace_next;
|
||||
if (region == NULL)
|
||||
while (area != NULL && area->id == RESERVED_REGION_ID)
|
||||
area = area->aspace_next;
|
||||
if (area == NULL)
|
||||
break;
|
||||
|
||||
// scan the pages in this region
|
||||
mutex_lock(®ion->cache_ref->lock);
|
||||
if (!region->cache_ref->cache->scan_skip) {
|
||||
for(va = region->base; va < (region->base + region->size); va += B_PAGE_SIZE) {
|
||||
// scan the pages in this area
|
||||
mutex_lock(&area->cache_ref->lock);
|
||||
if (!area->cache_ref->cache->scan_skip) {
|
||||
for(va = area->base; va < (area->base + area->size); va += B_PAGE_SIZE) {
|
||||
aspace->translation_map.ops->lock(&aspace->translation_map);
|
||||
aspace->translation_map.ops->query(&aspace->translation_map, va, &pa, &flags);
|
||||
if ((flags & PAGE_PRESENT) == 0) {
|
||||
@@ -117,17 +117,17 @@ scan_pages(vm_address_space *aspace, addr_t free_target)
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(®ion->cache_ref->lock);
|
||||
// move to the next region, wrapping around and stopping if we get back to the first region
|
||||
region = region->aspace_next ? region->aspace_next : aspace->virtual_map.region_list;
|
||||
if (region == first_region)
|
||||
mutex_unlock(&area->cache_ref->lock);
|
||||
// move to the next area, wrapping around and stopping if we get back to the first area
|
||||
area = area->aspace_next ? area->aspace_next : aspace->virtual_map.areas;
|
||||
if (area == firstArea)
|
||||
break;
|
||||
|
||||
if (quantum == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
aspace->scan_va = region ? (first_region->base + first_region->size) : aspace->virtual_map.base;
|
||||
aspace->scan_va = area ? (firstArea->base + firstArea->size) : aspace->virtual_map.base;
|
||||
release_sem_etc(aspace->virtual_map.sem, READ_COUNT, 0);
|
||||
|
||||
// dprintf("exiting scan_pages\n");
|
||||
@@ -217,8 +217,8 @@ vm_daemon_init()
|
||||
|
||||
// create a kernel thread to select pages for pageout
|
||||
thread = spawn_kernel_thread(&page_daemon, "page daemon", B_FIRST_REAL_TIME_PRIORITY, NULL);
|
||||
resume_thread(thread);
|
||||
send_signal_etc(thread, SIGCONT, B_DO_NOT_RESCHEDULE);
|
||||
|
||||
return 0;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
** Distributed under the terms of the Haiku License.
|
||||
**
|
||||
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
||||
** Distributed under the terms of the NewOS License.
|
||||
*/
|
||||
@@ -65,7 +68,7 @@ device_fault(struct vm_store *_store, struct vm_address_space *aspace, off_t off
|
||||
{
|
||||
struct device_store *store = (struct device_store *)_store;
|
||||
vm_cache_ref *cache_ref = store->vm.cache->ref;
|
||||
vm_region *region;
|
||||
vm_area *area;
|
||||
|
||||
// dprintf("device_fault: offset 0x%x 0x%x + base_addr 0x%x\n", offset, d->base_addr);
|
||||
|
||||
@@ -74,15 +77,15 @@ device_fault(struct vm_store *_store, struct vm_address_space *aspace, off_t off
|
||||
(*aspace->translation_map.ops->lock)(&aspace->translation_map);
|
||||
|
||||
// cycle through all of the regions that map this cache and map the page in
|
||||
for (region = cache_ref->region_list; region != NULL; region = region->cache_next) {
|
||||
// make sure this page in the cache that was faulted on is covered in this region
|
||||
if (offset >= region->cache_offset && (offset - region->cache_offset) < region->size) {
|
||||
for (area = cache_ref->areas; area != NULL; area = area->cache_next) {
|
||||
// make sure this page in the cache that was faulted on is covered in this area
|
||||
if (offset >= area->cache_offset && (offset - area->cache_offset) < area->size) {
|
||||
// dprintf("device_fault: mapping paddr 0x%x to vaddr 0x%x\n",
|
||||
// (addr)(d->base_addr + offset),
|
||||
// (addr)(region->base + (offset - region->cache_offset)));
|
||||
// (addr)(area->base + (offset - area->cache_offset)));
|
||||
(*aspace->translation_map.ops->map)(&aspace->translation_map,
|
||||
region->base + (offset - region->cache_offset),
|
||||
store->base_address + offset, region->lock);
|
||||
area->base + (offset - area->cache_offset),
|
||||
store->base_address + offset, area->protection);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
** Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||
** Distributed under the terms of the Haiku License.
|
||||
**
|
||||
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
|
||||
** Distributed under the terms of the NewOS License.
|
||||
*/
|
||||
@@ -22,10 +25,10 @@ vm_test(void)
|
||||
#if 1
|
||||
dprintf("vm_test 1: creating anonymous region and writing to it\n");
|
||||
{
|
||||
region_id region;
|
||||
area_id region;
|
||||
addr_t region_addr;
|
||||
|
||||
region = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "test_region", (void **)®ion_addr,
|
||||
region = vm_create_anonymous_area(vm_get_kernel_aspace_id(), "test_region", (void **)®ion_addr,
|
||||
B_ANY_KERNEL_ADDRESS, B_PAGE_SIZE * 16, B_NO_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if (region < 0)
|
||||
panic("vm_test 1: failed to create test region\n");
|
||||
@@ -34,7 +37,7 @@ vm_test(void)
|
||||
memset((void *)region_addr, 0, B_PAGE_SIZE * 16);
|
||||
|
||||
dprintf("memsetted the region\n");
|
||||
if (vm_delete_region(vm_get_kernel_aspace_id(), region) < 0)
|
||||
if (vm_delete_area(vm_get_kernel_aspace_id(), region) < 0)
|
||||
panic("vm_test 1: error deleting test region\n");
|
||||
dprintf("deleted the region\n");
|
||||
}
|
||||
@@ -42,14 +45,14 @@ vm_test(void)
|
||||
#if 1
|
||||
dprintf("vm_test 2: creating physical region and writing and reading from it\n");
|
||||
{
|
||||
region_id region;
|
||||
area_id region;
|
||||
area_info info;
|
||||
char *ptr;
|
||||
int i;
|
||||
|
||||
region = vm_map_physical_memory(vm_get_kernel_aspace_id(), "test_physical_region", (void **)&ptr,
|
||||
B_ANY_KERNEL_ADDRESS, B_PAGE_SIZE * 16, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, 0xb8000);
|
||||
if(region < 0)
|
||||
if (region < 0)
|
||||
panic("vm_test 2: failed to create test region\n");
|
||||
|
||||
get_area_info(region, &info);
|
||||
@@ -60,7 +63,7 @@ vm_test(void)
|
||||
for(i=0; i<64; i++) {
|
||||
ptr[i] = 'a';
|
||||
}
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region) < 0)
|
||||
if (vm_delete_area(vm_get_kernel_aspace_id(), region) < 0)
|
||||
panic("vm_test 2: error deleting test region\n");
|
||||
dprintf("deleted the region\n");
|
||||
}
|
||||
@@ -95,36 +98,36 @@ vm_test(void)
|
||||
#if 1
|
||||
dprintf("vm_test 4: cloning vidmem and testing if it compares\n");
|
||||
{
|
||||
region_id region, region2;
|
||||
area_id region, region2;
|
||||
area_info info;
|
||||
void *ptr;
|
||||
int rc;
|
||||
|
||||
region = find_area("vid_mem");
|
||||
if(region < 0)
|
||||
if (region < 0)
|
||||
panic("vm_test 4: error finding region 'vid_mem'\n");
|
||||
dprintf("vid_mem region = 0x%lx\n", region);
|
||||
|
||||
region2 = vm_clone_region(vm_get_kernel_aspace_id(), "vid_mem2",
|
||||
region2 = vm_clone_area(vm_get_kernel_aspace_id(), "vid_mem2",
|
||||
&ptr, B_ANY_KERNEL_ADDRESS, region, REGION_NO_PRIVATE_MAP, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if(region2 < 0)
|
||||
if (region2 < 0)
|
||||
panic("vm_test 4: error cloning region 'vid_mem'\n");
|
||||
dprintf("region2 = 0x%lx, ptr = %p\n", region2, ptr);
|
||||
|
||||
get_area_info(region, &info);
|
||||
rc = memcmp(ptr, (void *)info.address, info.size);
|
||||
if(rc != 0)
|
||||
if (rc != 0)
|
||||
panic("vm_test 4: regions are not identical\n");
|
||||
else
|
||||
dprintf("vm_test 4: comparison ok\n");
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
if (vm_delete_area(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
panic("vm_test 4: error deleting cloned region\n");
|
||||
}
|
||||
#endif
|
||||
#if 1
|
||||
dprintf("vm_test 5: cloning vidmem in RO and testing if it compares\n");
|
||||
{
|
||||
region_id region, region2;
|
||||
area_id region, region2;
|
||||
area_info info;
|
||||
void *ptr;
|
||||
int rc;
|
||||
@@ -134,32 +137,32 @@ vm_test(void)
|
||||
panic("vm_test 5: error finding region 'vid_mem'\n");
|
||||
dprintf("vid_mem region = 0x%lx\n", region);
|
||||
|
||||
region2 = vm_clone_region(vm_get_kernel_aspace_id(), "vid_mem3",
|
||||
region2 = vm_clone_area(vm_get_kernel_aspace_id(), "vid_mem3",
|
||||
&ptr, B_ANY_KERNEL_ADDRESS, region, REGION_NO_PRIVATE_MAP, B_KERNEL_READ_AREA);
|
||||
if(region2 < 0)
|
||||
if (region2 < 0)
|
||||
panic("vm_test 5: error cloning region 'vid_mem'\n");
|
||||
dprintf("region2 = 0x%lx, ptr = %p\n", region2, ptr);
|
||||
|
||||
get_area_info(region, &info);
|
||||
rc = memcmp(ptr, (void *)info.address, info.size);
|
||||
if(rc != 0)
|
||||
if (rc != 0)
|
||||
panic("vm_test 5: regions are not identical\n");
|
||||
else
|
||||
dprintf("vm_test 5: comparison ok\n");
|
||||
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
if (vm_delete_area(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
panic("vm_test 5: error deleting cloned region\n");
|
||||
}
|
||||
#endif
|
||||
#if 1
|
||||
dprintf("vm_test 6: creating anonymous region, cloning it, and testing if it compares\n");
|
||||
{
|
||||
region_id region, region2;
|
||||
area_id region, region2;
|
||||
void *region_addr;
|
||||
void *ptr;
|
||||
int rc;
|
||||
|
||||
region = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "test_region", ®ion_addr,
|
||||
region = vm_create_anonymous_area(vm_get_kernel_aspace_id(), "test_region", ®ion_addr,
|
||||
B_ANY_KERNEL_ADDRESS, B_PAGE_SIZE * 16, B_NO_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if (region < 0)
|
||||
panic("vm_test 6: error creating test region\n");
|
||||
@@ -169,7 +172,7 @@ vm_test(void)
|
||||
|
||||
dprintf("memsetted the region\n");
|
||||
|
||||
region2 = vm_clone_region(vm_get_kernel_aspace_id(), "test_region2",
|
||||
region2 = vm_clone_area(vm_get_kernel_aspace_id(), "test_region2",
|
||||
&ptr, B_ANY_KERNEL_ADDRESS, region, REGION_NO_PRIVATE_MAP, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if(region2 < 0)
|
||||
panic("vm_test 6: error cloning test region\n");
|
||||
@@ -181,10 +184,10 @@ vm_test(void)
|
||||
else
|
||||
dprintf("vm_test 6: comparison ok\n");
|
||||
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region) < 0)
|
||||
if(vm_delete_area(vm_get_kernel_aspace_id(), region) < 0)
|
||||
panic("vm_test 6: error deleting test region\n");
|
||||
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
if(vm_delete_area(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
panic("vm_test 6: error deleting cloned region\n");
|
||||
}
|
||||
#endif
|
||||
@@ -192,7 +195,7 @@ vm_test(void)
|
||||
dprintf("vm_test 7: mmaping a known file a few times and verifying they see the same data\n");
|
||||
{
|
||||
void *ptr, *ptr2;
|
||||
region_id rid, rid2;
|
||||
area_id rid, rid2;
|
||||
// char *blah;
|
||||
int fd;
|
||||
|
||||
@@ -208,8 +211,8 @@ vm_test(void)
|
||||
|
||||
dprintf("removing regions\n");
|
||||
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), rid);
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), rid2);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), rid);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), rid2);
|
||||
|
||||
dprintf("regions deleted\n");
|
||||
|
||||
@@ -221,14 +224,14 @@ vm_test(void)
|
||||
#if 1
|
||||
dprintf("vm_test 8: creating anonymous region, cloning it with private mapping\n");
|
||||
{
|
||||
region_id region, region2;
|
||||
area_id region, region2;
|
||||
void *region_addr;
|
||||
void *ptr;
|
||||
int rc;
|
||||
|
||||
dprintf("vm_test 8: creating test region...\n");
|
||||
|
||||
region = vm_create_anonymous_region(vm_get_kernel_aspace_id(), "test_region", ®ion_addr,
|
||||
region = vm_create_anonymous_area(vm_get_kernel_aspace_id(), "test_region", ®ion_addr,
|
||||
B_ANY_KERNEL_ADDRESS, B_PAGE_SIZE * 16, B_NO_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if(region < 0)
|
||||
panic("vm_test 8: error creating test region\n");
|
||||
@@ -240,7 +243,7 @@ vm_test(void)
|
||||
|
||||
dprintf("vm_test 8: cloning test region with PRIVATE_MAP\n");
|
||||
|
||||
region2 = vm_clone_region(vm_get_kernel_aspace_id(), "test_region2",
|
||||
region2 = vm_clone_area(vm_get_kernel_aspace_id(), "test_region2",
|
||||
&ptr, B_ANY_KERNEL_ADDRESS, region, REGION_PRIVATE_MAP, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
if(region2 < 0)
|
||||
panic("vm_test 8: error cloning test region\n");
|
||||
@@ -293,10 +296,10 @@ vm_test(void)
|
||||
else
|
||||
panic("vm_test 8: comparison shows not private mapping\n");
|
||||
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region) < 0)
|
||||
if(vm_delete_area(vm_get_kernel_aspace_id(), region) < 0)
|
||||
panic("vm_test 8: error deleting test region\n");
|
||||
|
||||
if(vm_delete_region(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
if(vm_delete_area(vm_get_kernel_aspace_id(), region2) < 0)
|
||||
panic("vm_test 8: error deleting cloned region\n");
|
||||
}
|
||||
#endif
|
||||
@@ -304,7 +307,7 @@ vm_test(void)
|
||||
dprintf("vm_test 9: mmaping a known file a few times, one with private mappings\n");
|
||||
{
|
||||
void *ptr, *ptr2;
|
||||
region_id rid, rid2;
|
||||
area_id rid, rid2;
|
||||
int err;
|
||||
|
||||
dprintf("vm_test 9: mapping /boot/kernel twice\n");
|
||||
@@ -345,8 +348,8 @@ vm_test(void)
|
||||
|
||||
dprintf("vm_test 9: removing regions\n");
|
||||
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), rid);
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), rid2);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), rid);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), rid2);
|
||||
|
||||
dprintf("vm_test 9: regions deleted\n");
|
||||
|
||||
@@ -384,8 +387,8 @@ vm_test(void)
|
||||
|
||||
dprintf("vm_test 10: remove areas\n");
|
||||
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), a);
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), b);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), a);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), b);
|
||||
}
|
||||
dprintf("vm_test 10: passed\n");
|
||||
#endif
|
||||
@@ -414,7 +417,7 @@ vm_test(void)
|
||||
|
||||
dprintf("vm_test 11: remove areas\n");
|
||||
|
||||
vm_delete_region(vm_get_kernel_aspace_id(), a);
|
||||
vm_delete_area(vm_get_kernel_aspace_id(), a);
|
||||
}
|
||||
dprintf("vm_test 11: passed\n");
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user