--- Gnu-Mach/vm/memory_object.c 2020/09/02 04:42:53 1.1.1.2 +++ Gnu-Mach/vm/memory_object.c 2020/09/02 04:54:13 1.1.1.6 @@ -41,14 +41,15 @@ #include #include +#include #include #include #include #include #include -#include "memory_object_user.h" -#include "memory_object_default.h" +#include +#include /* * Implementation dependencies: @@ -57,18 +58,13 @@ #include #include #include /* For copy_to_phys, pmap_clear_modify */ +#include /* For panic() */ #include /* For current_thread() */ #include #include /* For kernel_map, vm_move */ #include /* For vm_map_pageable */ #include -#include -#include -#if NORMA_VM -#include -#endif /* NORMA_VM */ -#include #if MACH_PAGEMAP #include #endif /* MACH_PAGEMAP */ @@ -86,43 +82,19 @@ decl_simple_lock_data(,memory_manager_de * argument conversion. Explicit deallocation is necessary. */ -#if !NORMA_VM -/* - * If successful, destroys the map copy object. - */ -kern_return_t memory_object_data_provided(object, offset, data, data_cnt, - lock_value) - vm_object_t object; - vm_offset_t offset; - pointer_t data; - unsigned int data_cnt; - vm_prot_t lock_value; -{ - return memory_object_data_supply(object, offset, (vm_map_copy_t) data, - data_cnt, lock_value, FALSE, IP_NULL, - 0); -} -#endif /* !NORMA_VM */ - - -kern_return_t memory_object_data_supply(object, offset, data_copy, data_cnt, - lock_value, precious, reply_to, reply_to_type) - register - vm_object_t object; - register - vm_offset_t offset; - vm_map_copy_t data_copy; - unsigned int data_cnt; - vm_prot_t lock_value; - boolean_t precious; - ipc_port_t reply_to; - mach_msg_type_name_t reply_to_type; +kern_return_t memory_object_data_supply( + vm_object_t object, + vm_offset_t offset, + vm_map_copy_t data_copy, + unsigned int data_cnt, + vm_prot_t lock_value, + boolean_t precious, + ipc_port_t reply_to, + mach_msg_type_name_t reply_to_type) { kern_return_t result = KERN_SUCCESS; vm_offset_t error_offset = 0; - register vm_page_t m; - register vm_page_t data_m; vm_size_t original_length; vm_offset_t original_offset; @@ -330,11 +302,11 @@ retry_lookup: return(result); } -kern_return_t memory_object_data_error(object, offset, size, error_value) - vm_object_t object; - vm_offset_t offset; - vm_size_t size; - kern_return_t error_value; +kern_return_t memory_object_data_error( + vm_object_t object, + vm_offset_t offset, + vm_size_t size, + kern_return_t error_value) { if (object == VM_OBJECT_NULL) return(KERN_INVALID_ARGUMENT); @@ -342,16 +314,11 @@ kern_return_t memory_object_data_error(o if (size != round_page(size)) return(KERN_INVALID_ARGUMENT); -#ifdef lint - /* Error value is ignored at this time */ - error_value++; -#endif - vm_object_lock(object); offset -= object->paging_offset; while (size != 0) { - register vm_page_t m; + vm_page_t m; m = vm_page_lookup(object, offset); if ((m != VM_PAGE_NULL) && m->busy && m->absent) { @@ -375,10 +342,10 @@ kern_return_t memory_object_data_error(o return(KERN_SUCCESS); } -kern_return_t memory_object_data_unavailable(object, offset, size) - vm_object_t object; - vm_offset_t offset; - vm_size_t size; +kern_return_t memory_object_data_unavailable( + vm_object_t object, + vm_offset_t offset, + vm_size_t size) { #if MACH_PAGEMAP vm_external_t existence_info = VM_EXTERNAL_NULL; @@ -411,7 +378,7 @@ kern_return_t memory_object_data_unavail offset -= object->paging_offset; while (size != 0) { - register vm_page_t m; + vm_page_t m; /* * We're looking for pages that are both busy and @@ -458,12 +425,11 @@ kern_return_t memory_object_data_unavail #define MEMORY_OBJECT_LOCK_RESULT_MUST_CLEAN 2 #define MEMORY_OBJECT_LOCK_RESULT_MUST_RETURN 3 -memory_object_lock_result_t memory_object_lock_page(m, should_return, - should_flush, prot) - vm_page_t m; - memory_object_return_t should_return; - boolean_t should_flush; - vm_prot_t prot; +memory_object_lock_result_t memory_object_lock_page( + vm_page_t m, + memory_object_return_t should_return, + boolean_t should_flush, + vm_prot_t prot) { /* * Don't worry about pages for which the kernel @@ -661,19 +627,17 @@ memory_object_lock_result_t memory_objec */ kern_return_t -memory_object_lock_request(object, offset, size, - should_return, should_flush, prot, - reply_to, reply_to_type) - register vm_object_t object; - register vm_offset_t offset; - register vm_size_t size; - memory_object_return_t should_return; - boolean_t should_flush; - vm_prot_t prot; - ipc_port_t reply_to; - mach_msg_type_name_t reply_to_type; +memory_object_lock_request( + vm_object_t object, + vm_offset_t offset, + vm_size_t size, + memory_object_return_t should_return, + boolean_t should_flush, + vm_prot_t prot, + ipc_port_t reply_to, + mach_msg_type_name_t reply_to_type) { - register vm_page_t m; + vm_page_t m; vm_offset_t original_offset = offset; vm_size_t original_size = size; vm_offset_t paging_offset = 0; @@ -725,32 +689,21 @@ memory_object_lock_request(object, offse #define PAGEOUT_PAGES \ MACRO_BEGIN \ vm_map_copy_t copy; \ - register int i; \ - register vm_page_t hp; \ + unsigned i; \ + vm_page_t hp; \ \ vm_object_unlock(object); \ \ (void) vm_map_copyin_object(new_object, 0, new_offset, ©); \ \ - if (object->use_old_pageout) { \ - assert(pageout_action == MEMORY_OBJECT_LOCK_RESULT_MUST_CLEAN); \ - (void) memory_object_data_write( \ - object->pager, \ - object->pager_request, \ - paging_offset, \ - (pointer_t) copy, \ - new_offset); \ - } \ - else { \ - (void) memory_object_data_return( \ - object->pager, \ - object->pager_request, \ - paging_offset, \ - (pointer_t) copy, \ - new_offset, \ + (void) memory_object_data_return( \ + object->pager, \ + object->pager_request, \ + paging_offset, \ + (pointer_t) copy, \ + new_offset, \ (pageout_action == MEMORY_OBJECT_LOCK_RESULT_MUST_CLEAN), \ - !should_flush); \ - } \ + !should_flush); \ \ vm_object_lock(object); \ \ @@ -896,44 +849,11 @@ MACRO_END return (KERN_SUCCESS); } -#if !NORMA_VM -/* - * Old version of memory_object_lock_request. - */ -kern_return_t -xxx_memory_object_lock_request(object, offset, size, - should_clean, should_flush, prot, - reply_to, reply_to_type) - register vm_object_t object; - register vm_offset_t offset; - register vm_size_t size; - boolean_t should_clean; - boolean_t should_flush; - vm_prot_t prot; - ipc_port_t reply_to; - mach_msg_type_name_t reply_to_type; -{ - register int should_return; - - if (should_clean) - should_return = MEMORY_OBJECT_RETURN_DIRTY; - else - should_return = MEMORY_OBJECT_RETURN_NONE; - - return(memory_object_lock_request(object,offset,size, - should_return, should_flush, prot, - reply_to, reply_to_type)); -} -#endif /* !NORMA_VM */ - -kern_return_t -memory_object_set_attributes_common(object, object_ready, may_cache, - copy_strategy, use_old_pageout) - vm_object_t object; - boolean_t object_ready; - boolean_t may_cache; - memory_object_copy_strategy_t copy_strategy; - boolean_t use_old_pageout; +static kern_return_t +memory_object_set_attributes_common( + vm_object_t object, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy) { if (object == VM_OBJECT_NULL) return(KERN_INVALID_ARGUMENT); @@ -953,8 +873,6 @@ memory_object_set_attributes_common(obje return(KERN_INVALID_ARGUMENT); } - if (object_ready) - object_ready = TRUE; if (may_cache) may_cache = TRUE; @@ -965,8 +883,7 @@ memory_object_set_attributes_common(obje * to become asserted. */ - if (object_ready && !object->pager_ready) { - object->use_old_pageout = use_old_pageout; + if (!object->pager_ready) { vm_object_wakeup(object, VM_OBJECT_EVENT_PAGER_READY); } @@ -975,7 +892,7 @@ memory_object_set_attributes_common(obje */ object->can_persist = may_cache; - object->pager_ready = object_ready; + object->pager_ready = TRUE; if (copy_strategy == MEMORY_OBJECT_COPY_TEMPORARY) { object->temporary = TRUE; } else { @@ -989,20 +906,17 @@ memory_object_set_attributes_common(obje return(KERN_SUCCESS); } -#if !NORMA_VM - /* * XXX rpd claims that reply_to could be obviated in favor of a client * XXX stub that made change_attributes an RPC. Need investigation. */ -kern_return_t memory_object_change_attributes(object, may_cache, - copy_strategy, reply_to, reply_to_type) - vm_object_t object; - boolean_t may_cache; - memory_object_copy_strategy_t copy_strategy; - ipc_port_t reply_to; - mach_msg_type_name_t reply_to_type; +kern_return_t memory_object_change_attributes( + vm_object_t object, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy, + ipc_port_t reply_to, + mach_msg_type_name_t reply_to_type) { kern_return_t result; @@ -1016,9 +930,8 @@ kern_return_t memory_object_change_attri * XXX may_cache may become a tri-valued variable to handle * XXX uncache if not in use. */ - result = memory_object_set_attributes_common(object, TRUE, - may_cache, copy_strategy, - FALSE); + result = memory_object_set_attributes_common(object, may_cache, + copy_strategy); if (IP_VALID(reply_to)) { @@ -1031,35 +944,20 @@ kern_return_t memory_object_change_attri return(result); } -kern_return_t -memory_object_set_attributes(object, object_ready, may_cache, copy_strategy) - vm_object_t object; - boolean_t object_ready; - boolean_t may_cache; - memory_object_copy_strategy_t copy_strategy; -{ - return memory_object_set_attributes_common(object, object_ready, - may_cache, copy_strategy, - TRUE); -} - -kern_return_t memory_object_ready(object, may_cache, copy_strategy) - vm_object_t object; - boolean_t may_cache; - memory_object_copy_strategy_t copy_strategy; +kern_return_t memory_object_ready( + vm_object_t object, + boolean_t may_cache, + memory_object_copy_strategy_t copy_strategy) { - return memory_object_set_attributes_common(object, TRUE, - may_cache, copy_strategy, - FALSE); + return memory_object_set_attributes_common(object, may_cache, + copy_strategy); } -#endif /* !NORMA_VM */ -kern_return_t memory_object_get_attributes(object, object_ready, - may_cache, copy_strategy) - vm_object_t object; - boolean_t *object_ready; - boolean_t *may_cache; - memory_object_copy_strategy_t *copy_strategy; +kern_return_t memory_object_get_attributes( + vm_object_t object, + boolean_t *object_ready, + boolean_t *may_cache, + memory_object_copy_strategy_t *copy_strategy) { if (object == VM_OBJECT_NULL) return(KERN_INVALID_ARGUMENT); @@ -1079,7 +977,7 @@ kern_return_t memory_object_get_attribut * If successful, consumes the supplied naked send right. */ kern_return_t vm_set_default_memory_manager(host, default_manager) - host_t host; + const host_t host; ipc_port_t *default_manager; { ipc_port_t current_manager; @@ -1131,7 +1029,7 @@ kern_return_t vm_set_default_memory_mana * valid (not IP_NULL or IP_DEAD). */ -ipc_port_t memory_manager_default_reference() +ipc_port_t memory_manager_default_reference(void) { ipc_port_t current_manager; @@ -1161,7 +1059,7 @@ ipc_port_t memory_manager_default_refere */ boolean_t memory_manager_default_port(port) - ipc_port_t port; + const ipc_port_t port; { ipc_port_t current; boolean_t result; @@ -1184,7 +1082,7 @@ boolean_t memory_manager_default_port(po return result; } -void memory_manager_default_init() +void memory_manager_default_init(void) { memory_manager_default = IP_NULL; simple_lock_init(&memory_manager_default_lock);