diff --git a/headers/private/kernel/vm.h b/headers/private/kernel/vm.h index aae018dcd0..70d93ca9df 100644 --- a/headers/private/kernel/vm.h +++ b/headers/private/kernel/vm.h @@ -14,6 +14,7 @@ #include struct kernel_args; +struct team; #ifdef __cplusplus @@ -25,45 +26,33 @@ status_t vm_init(kernel_args *args); status_t vm_init_post_sem(struct kernel_args *args); status_t vm_init_post_thread(struct kernel_args *args); status_t vm_init_post_modules(struct kernel_args *args); -status_t vm_address_space_init(void); -status_t vm_address_space_init_post_sem(void); void vm_free_kernel_args(kernel_args *args); void vm_free_unused_boot_loader_range(addr_t start, addr_t end); -void vm_delete_address_space(vm_address_space *aspace); -status_t vm_create_address_space(team_id id, addr_t base, addr_t size, - bool kernel, vm_address_space **_aspace); -status_t vm_delete_areas(struct vm_address_space *aspace); -vm_address_space *vm_get_kernel_address_space(void); -vm_address_space *vm_kernel_address_space(void); -team_id vm_kernel_address_space_id(void); -vm_address_space *vm_get_current_user_address_space(void); -team_id vm_current_user_address_space_id(void); -vm_address_space *vm_get_address_space_by_id(team_id aid); -void vm_put_address_space(vm_address_space *aspace); -#define vm_swap_address_space(aspace) arch_vm_aspace_swap(aspace) +// to protect code regions with interrupts turned on +void permit_page_faults(void); +void forbid_page_faults(void); // private kernel only extension (should be moved somewhere else): -struct team; area_id create_area_etc(struct team *team, const char *name, void **address, uint32 addressSpec, uint32 size, uint32 lock, uint32 protection); status_t delete_area_etc(struct team *team, area_id area); -status_t vm_unreserve_address_range(team_id aid, void *address, addr_t size); -status_t vm_reserve_address_range(team_id aid, void **_address, +status_t vm_unreserve_address_range(team_id team, void *address, addr_t size); +status_t vm_reserve_address_range(team_id team, void **_address, uint32 addressSpec, addr_t size, uint32 flags); -area_id vm_create_anonymous_area(team_id aid, const char *name, void **address, +area_id vm_create_anonymous_area(team_id team, const char *name, void **address, uint32 addressSpec, addr_t size, uint32 wiring, uint32 protection); -area_id vm_map_physical_memory(team_id aid, const char *name, void **address, +area_id vm_map_physical_memory(team_id team, const char *name, void **address, uint32 addressSpec, addr_t size, uint32 protection, addr_t phys_addr); area_id vm_map_file(team_id aid, const char *name, void **address, uint32 addressSpec, addr_t size, uint32 protection, uint32 mapping, const char *path, off_t offset); -area_id vm_create_null_area(team_id aid, const char *name, void **address, +area_id vm_create_null_area(team_id team, const char *name, void **address, uint32 addressSpec, addr_t size); -area_id vm_copy_area(team_id addressSpaceID, const char *name, void **_address, +area_id vm_copy_area(team_id team, const char *name, void **_address, uint32 addressSpec, uint32 protection, area_id sourceID); -area_id vm_clone_area(team_id aid, const char *name, void **address, +area_id vm_clone_area(team_id team, const char *name, void **address, uint32 addressSpec, uint32 protection, uint32 mapping, area_id sourceArea); status_t vm_delete_area(team_id aid, area_id id); @@ -71,10 +60,11 @@ status_t vm_create_vnode_cache(void *vnode, vm_cache_ref **_cacheRef); status_t vm_set_area_memory_type(area_id id, addr_t physicalBase, uint32 type); -status_t vm_get_page_mapping(team_id aid, addr_t vaddr, addr_t *paddr); -status_t vm_get_physical_page(addr_t paddr, addr_t *vaddr, int flags); +status_t vm_get_page_mapping(team_id team, addr_t vaddr, addr_t *paddr); +status_t vm_get_physical_page(addr_t paddr, addr_t *vaddr, uint32 flags); status_t vm_put_physical_page(addr_t vaddr); +// user syscalls area_id _user_create_area(const char *name, void **address, uint32 addressSpec, size_t size, uint32 lock, uint32 protection); status_t _user_delete_area(area_id area); @@ -92,13 +82,6 @@ area_id _user_clone_area(const char *name, void **_address, uint32 addressSpec, uint32 protection, area_id sourceArea); status_t _user_init_heap_address_range(addr_t base, addr_t size); -// to protect code regions with interrupts turned on -void permit_page_faults(void); -void forbid_page_faults(void); - -// XXX remove later -void vm_test(void); - #ifdef __cplusplus } #endif diff --git a/headers/private/kernel/vm_address_space.h b/headers/private/kernel/vm_address_space.h new file mode 100644 index 0000000000..cea24167d8 --- /dev/null +++ b/headers/private/kernel/vm_address_space.h @@ -0,0 +1,42 @@ +/* + * Copyright 2002-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. + * Distributed under the terms of the NewOS License. + */ +#ifndef _KERNEL_VM_ADDRESS_SPACE_H +#define _KERNEL_VM_ADDRESS_SPACE_H + + +#include +#include + +struct kernel_args; + + +#ifdef __cplusplus +extern "C" { +#endif + +status_t vm_address_space_init(void); +status_t vm_address_space_init_post_sem(void); + +void vm_delete_address_space(vm_address_space *aspace); +status_t vm_create_address_space(team_id id, addr_t base, addr_t size, + bool kernel, vm_address_space **_aspace); +status_t vm_delete_areas(struct vm_address_space *aspace); +vm_address_space *vm_get_kernel_address_space(void); +vm_address_space *vm_kernel_address_space(void); +team_id vm_kernel_address_space_id(void); +vm_address_space *vm_get_current_user_address_space(void); +team_id vm_current_user_address_space_id(void); +vm_address_space *vm_get_address_space_by_id(team_id aid); +void vm_put_address_space(vm_address_space *aspace); +#define vm_swap_address_space(aspace) arch_vm_aspace_swap(aspace) + +#ifdef __cplusplus +} +#endif + +#endif /* _KERNEL_VM_ADDRESS_SPACE_H */ diff --git a/headers/private/kernel/vm_priv.h b/headers/private/kernel/vm_priv.h index 35df46c259..4301b78b40 100644 --- a/headers/private/kernel/vm_priv.h +++ b/headers/private/kernel/vm_priv.h @@ -50,8 +50,8 @@ status_t vm_try_reserve_memory(size_t bytes); status_t vm_daemon_init(void); // used by the page daemon to walk the list of address spaces -int vm_aspace_walk_start(struct hash_iterator *i); -vm_address_space *vm_aspace_walk_next(struct hash_iterator *i); +void vm_address_space_walk_start(struct hash_iterator *i); +vm_address_space *vm_address_space_walk_next(struct hash_iterator *i); // allocates memory from the kernel_args structure addr_t vm_alloc_from_kernel_args(kernel_args *args, size_t size, uint32 lock); diff --git a/src/add-ons/kernel/console/vga_text/vga_text.c b/src/add-ons/kernel/console/vga_text/vga_text.c index 514eccc3fe..10542e83f6 100644 --- a/src/add-ons/kernel/console/vga_text/vga_text.c +++ b/src/add-ons/kernel/console/vga_text/vga_text.c @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include diff --git a/src/system/kernel/arch/x86/arch_thread.c b/src/system/kernel/arch/x86/arch_thread.c index cfb7a7522a..4c58fdf710 100644 --- a/src/system/kernel/arch/x86/arch_thread.c +++ b/src/system/kernel/arch/x86/arch_thread.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/system/kernel/arch/x86/arch_vm_translation_map.c b/src/system/kernel/arch/x86/arch_vm_translation_map.c index 5fc4d05a55..1a9c7a0e73 100644 --- a/src/system/kernel/arch/x86/arch_vm_translation_map.c +++ b/src/system/kernel/arch/x86/arch_vm_translation_map.c @@ -7,7 +7,7 @@ */ -#include +#include #include #include #include diff --git a/src/system/kernel/cache/block_allocator.cpp b/src/system/kernel/cache/block_allocator.cpp index cbef9254a9..bc1e9a3a22 100644 --- a/src/system/kernel/cache/block_allocator.cpp +++ b/src/system/kernel/cache/block_allocator.cpp @@ -9,7 +9,8 @@ #include #include -#include +//#include +#include #include #include diff --git a/src/system/kernel/elf.c b/src/system/kernel/elf.c index ac9508eb56..7256e90bf6 100644 --- a/src/system/kernel/elf.c +++ b/src/system/kernel/elf.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/src/system/kernel/team.c b/src/system/kernel/team.c index 722de94efe..cf6f916105 100644 --- a/src/system/kernel/team.c +++ b/src/system/kernel/team.c @@ -10,23 +10,24 @@ #include -#include +#include +#include +#include #include -#include -#include -#include -#include +#include #include #include -#include -#include +#include +#include #include +#include +#include #include -#include -#include -#include +#include #include -#include +#include +#include +#include #include #include diff --git a/src/system/kernel/thread.c b/src/system/kernel/thread.c index ada2db9f3b..251a188f93 100644 --- a/src/system/kernel/thread.c +++ b/src/system/kernel/thread.c @@ -10,19 +10,20 @@ #include -#include -#include -#include -#include #include -#include +#include #include -#include #include +#include +#include #include +#include +#include #include -#include #include +#include +#include + #include #include diff --git a/src/system/kernel/vm/Jamfile b/src/system/kernel/vm/Jamfile index 4d35f2e4cf..49934791f9 100644 --- a/src/system/kernel/vm/Jamfile +++ b/src/system/kernel/vm/Jamfile @@ -10,7 +10,7 @@ KernelMergeObject kernel_vm.o : vm_store_anonymous_noswap.c vm_store_device.c vm_store_null.c - vm_tests.c + #vm_tests.c : -fno-pic -Wno-unused ; diff --git a/src/system/kernel/vm/vm.cpp b/src/system/kernel/vm/vm.cpp index ec717d0a2f..d8ac162218 100644 --- a/src/system/kernel/vm/vm.cpp +++ b/src/system/kernel/vm/vm.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -2738,7 +2739,7 @@ vm_area_lookup(vm_address_space *addressSpace, addr_t address) status_t -vm_get_physical_page(addr_t paddr, addr_t *_vaddr, int flags) +vm_get_physical_page(addr_t paddr, addr_t *_vaddr, uint32 flags) { return (*kernel_aspace->translation_map.ops->get_physical_page)(paddr, _vaddr, flags); } diff --git a/src/system/kernel/vm/vm_address_space.c b/src/system/kernel/vm/vm_address_space.c index 566b76b7d1..cd37a65e5e 100644 --- a/src/system/kernel/vm/vm_address_space.c +++ b/src/system/kernel/vm/vm_address_space.c @@ -7,36 +7,17 @@ */ -#include +//#include #include #include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include +#include -#include -#include - -#include -#include - -#include -#include #include -#include + //#define TRACE_VM #ifdef TRACE_VM @@ -328,21 +309,20 @@ vm_create_address_space(team_id id, addr_t base, addr_t size, } -int -vm_aspace_walk_start(struct hash_iterator *i) +void +vm_address_space_walk_start(struct hash_iterator *iterator) { - hash_open(aspace_table, i); - return 0; + hash_open(aspace_table, iterator); } vm_address_space * -vm_aspace_walk_next(struct hash_iterator *i) +vm_address_space_walk_next(struct hash_iterator *iterator) { vm_address_space *aspace; acquire_sem_etc(aspace_hash_sem, READ_COUNT, 0, 0); - aspace = hash_next(aspace_table, i); + aspace = hash_next(aspace_table, iterator); if (aspace) atomic_add(&aspace->ref_count, 1); release_sem_etc(aspace_hash_sem, READ_COUNT, 0); diff --git a/src/system/kernel/vm/vm_daemons.c b/src/system/kernel/vm/vm_daemons.c index 1c6069c747..c0146bc319 100644 --- a/src/system/kernel/vm/vm_daemons.c +++ b/src/system/kernel/vm/vm_daemons.c @@ -7,15 +7,14 @@ */ -#include -#include -#include #include -#include + +#include #include #include #include #include +#include bool trimming_cycle; @@ -153,8 +152,8 @@ page_daemon(void *unused) snooze(PAGE_DAEMON_INTERVAL); // scan through all of the address spaces - vm_aspace_walk_start(&i); - aspace = vm_aspace_walk_next(&i); + vm_address_space_walk_start(&i); + aspace = vm_address_space_walk_next(&i); while (aspace) { mapped_size = aspace->translation_map.ops->get_mapped_size(&aspace->translation_map); @@ -198,7 +197,7 @@ page_daemon(void *unused) // must hold a ref to the old aspace while we grab the next one, // otherwise the iterator becomes out of date. old_aspace = aspace; - aspace = vm_aspace_walk_next(&i); + aspace = vm_address_space_walk_next(&i); vm_put_address_space(old_aspace); } } diff --git a/src/system/kernel/vm/vm_tests.c b/src/system/kernel/vm/vm_tests.c index bc970dbedc..0924061a99 100644 --- a/src/system/kernel/vm/vm_tests.c +++ b/src/system/kernel/vm/vm_tests.c @@ -6,10 +6,9 @@ * Distributed under the terms of the NewOS License. */ -#include + #include -#include -#include +#include #include