diff options
author | Richard Braun <rbraun@sceen.net> | 2016-08-05 15:00:07 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2016-08-06 00:09:56 +0200 |
commit | bc23dda642a299fb1380294f4e5940511bc512ef (patch) | |
tree | 2009cfe49bc974f36a7ce155a255aaf95ce281b7 | |
parent | 4bccd10cfeaf126382467dd90d7339a98989b9d2 (diff) | |
download | gnumach-bc23dda642a299fb1380294f4e5940511bc512ef.tar.gz gnumach-bc23dda642a299fb1380294f4e5940511bc512ef.tar.bz2 gnumach-bc23dda642a299fb1380294f4e5940511bc512ef.zip |
Augment VM maps with task names
This change improves the clarity of "no more room for ..." VM map
allocation errors.
* kern/task.c (task_init): Call vm_map_set_name for the kernel map.
(task_create): Call vm_map_set_name where appropriate.
* vm/vm_map.c (vm_map_setup): Set map name to NULL.
(vm_map_find_entry_anywhere): Update error message to include map name.
* vm/vm_map.h (struct vm_map): New `name' member.
(vm_map_set_name): New inline function.
-rw-r--r-- | kern/task.c | 3 | ||||
-rw-r--r-- | vm/vm_map.c | 3 | ||||
-rw-r--r-- | vm/vm_map.h | 8 |
3 files changed, 13 insertions, 1 deletions
diff --git a/kern/task.c b/kern/task.c index d721f172..673a4378 100644 --- a/kern/task.c +++ b/kern/task.c @@ -75,6 +75,7 @@ void task_init(void) */ (void) task_create(TASK_NULL, FALSE, &kernel_task); (void) task_set_name(kernel_task, "gnumach"); + vm_map_set_name(kernel_map, kernel_task->name); } kern_return_t task_create( @@ -99,10 +100,12 @@ kern_return_t task_create( new_task->map = kernel_map; } else if (inherit_memory) { new_task->map = vm_map_fork(parent_task->map); + vm_map_set_name(new_task->map, new_task->name); } else { new_task->map = vm_map_create(pmap_create(0), round_page(VM_MIN_ADDRESS), trunc_page(VM_MAX_ADDRESS), TRUE); + vm_map_set_name(new_task->map, new_task->name); } simple_lock_init(&new_task->lock); diff --git a/vm/vm_map.c b/vm/vm_map.c index 4490878d..ccbe8f1a 100644 --- a/vm/vm_map.c +++ b/vm/vm_map.c @@ -195,6 +195,7 @@ void vm_map_setup( map->wait_for_space = FALSE; map->first_free = vm_map_to_entry(map); map->hint = vm_map_to_entry(map); + map->name = NULL; vm_map_lock_init(map); simple_lock_init(&map->ref_lock); simple_lock_init(&map->hint_lock); @@ -704,7 +705,7 @@ restart: return entry; error: - printf("no more room in %p\n", map); + printf("no more room in %p (%s)\n", map, map->name); return NULL; } diff --git a/vm/vm_map.h b/vm/vm_map.h index 74c86a79..9e946c5e 100644 --- a/vm/vm_map.h +++ b/vm/vm_map.h @@ -194,6 +194,8 @@ struct vm_map { /* boolean_t */ wiring_required:1; /* All memory wired? */ unsigned int timestamp; /* Version number */ + + const char *name; /* Associated name */ }; #define vm_map_to_entry(map) ((struct vm_map_entry *) &(map)->hdr.links) @@ -466,6 +468,12 @@ boolean_t vm_map_lookup_entry( vm_offset_t address, vm_map_entry_t *entry); /* OUT */ +static inline void vm_map_set_name(vm_map_t map, const char *name) +{ + map->name = name; +} + + /* * Functions implemented as macros */ |