diff options
Diffstat (limited to 'serverboot/wiring.c')
-rw-r--r-- | serverboot/wiring.c | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/serverboot/wiring.c b/serverboot/wiring.c deleted file mode 100644 index 585a3075..00000000 --- a/serverboot/wiring.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Package to wire current task's memory. - */ -#include <mach.h> -#include <mach_init.h> -#include <mach/machine/vm_param.h> - -mach_port_t this_task; /* our task */ -mach_port_t priv_host_port = MACH_PORT_NULL; - /* the privileged host port */ - -void -wire_setup(host_priv) - mach_port_t host_priv; -{ - priv_host_port = host_priv; - this_task = mach_task_self(); -} - -void -wire_memory(start, size, prot) - vm_address_t start; - vm_size_t size; - vm_prot_t prot; -{ - kern_return_t kr; - - if (priv_host_port == MACH_PORT_NULL) - return; - - kr = vm_wire(priv_host_port, - this_task, - start, size, prot); - if (kr != KERN_SUCCESS) - panic("mem_wire: %d", kr); -} - -void -wire_thread() -{ - kern_return_t kr; - - if (priv_host_port == MACH_PORT_NULL) - return; - - kr = thread_wire(priv_host_port, - mach_thread_self(), - TRUE); - if (kr != KERN_SUCCESS) - panic("wire_thread: %d", kr); -} - -void -wire_all_memory() -{ - register kern_return_t kr; - vm_offset_t address; - vm_size_t size; - vm_prot_t protection; - vm_prot_t max_protection; - vm_inherit_t inheritance; - boolean_t is_shared; - memory_object_name_t object; - vm_offset_t offset; - - if (priv_host_port == MACH_PORT_NULL) - return; - - /* iterate thru all regions, wiring */ - address = 0; - while ( - (kr = vm_region(this_task, &address, - &size, - &protection, - &max_protection, - &inheritance, - &is_shared, - &object, - &offset)) - == KERN_SUCCESS) - { - if (MACH_PORT_VALID(object)) - (void) mach_port_deallocate(this_task, object); - if (protection != VM_PROT_NONE) - { - /* The VM system cannot cope with a COW fault on another - unrelated virtual copy happening later when we have - wired down the original page. So we must touch all our - pages before wiring to make sure that only we will ever - use them. */ - void *page; - if (!(protection & VM_PROT_WRITE)) - { - kr = vm_protect(this_task, address, size, - 0, max_protection); - } - for (page = (void *) address; - page < (void *) (address + size); - page += vm_page_size) - *(volatile int *) page = *(int *) page; - - wire_memory(address, size, protection); - - if (!(protection & VM_PROT_WRITE)) - { - kr = vm_protect(this_task, address, size, - 0, protection); - } - } - address += size; - } -} - -/* - * Alias for vm_allocate to return wired memory. - */ -kern_return_t -vm_allocate(task, address, size, anywhere) - task_t task; - vm_address_t *address; - vm_size_t size; - boolean_t anywhere; -{ - kern_return_t kr; - - if (anywhere) - *address = VM_MIN_ADDRESS; - kr = vm_map(task, - address, size, (vm_offset_t) 0, anywhere, - MEMORY_OBJECT_NULL, (vm_offset_t)0, FALSE, - VM_PROT_DEFAULT, VM_PROT_ALL, VM_INHERIT_DEFAULT); - if (kr != KERN_SUCCESS) - return kr; - - if (task == this_task) - (void) vm_wire(priv_host_port, task, *address, size, - VM_PROT_DEFAULT); - return KERN_SUCCESS; -} - -/* Other versions of this function in libc... */ -kern_return_t -__vm_allocate (task, address, size, anywhere) - task_t task; - vm_address_t *address; - vm_size_t size; - boolean_t anywhere; -{ - return vm_allocate (task, address, size, anywhere); -} |