X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/de355530ae67247cbd0da700edb3a2a1dae884c2..8ad349bb6ed4a0be06e34c92be0d98b92e078db4:/osfmk/default_pager/default_pager.c diff --git a/osfmk/default_pager/default_pager.c b/osfmk/default_pager/default_pager.c index 864b9eabd..812b5fe2f 100644 --- a/osfmk/default_pager/default_pager.c +++ b/osfmk/default_pager/default_pager.c @@ -1,23 +1,31 @@ /* - * Copyright (c) 2001, 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the + * License may not be used to create, or enable the creation or + * redistribution of, unlawful or unlicensed copies of an Apple operating + * system, or to circumvent, violate, or enable the circumvention or + * violation of, any terms of an Apple operating system software license + * agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -55,11 +63,16 @@ */ #include "default_pager_internal.h" +#include #include #include #include +#include +#include #include #include +#include +#include char my_name[] = "(default pager): "; @@ -98,9 +111,9 @@ MACH_PORT_FACE default_pager_external_set; /* Port set for external objects. */ /* Memory created by default_pager_object_create should mostly be resident. */ #define DEFAULT_PAGER_EXTERNAL_COUNT (2) -unsigned int default_pager_internal_count = DEFAULT_PAGER_INTERNAL_COUNT; +int default_pager_internal_count = DEFAULT_PAGER_INTERNAL_COUNT; /* Number of "internal" threads. */ -unsigned int default_pager_external_count = DEFAULT_PAGER_EXTERNAL_COUNT; +int default_pager_external_count = DEFAULT_PAGER_EXTERNAL_COUNT; /* Number of "external" threads. */ /* @@ -116,9 +129,9 @@ default_pager_thread_t *start_default_pager_thread(int, boolean_t); void default_pager(void); void default_pager_thread(void *); void default_pager_initialize(void); -void default_pager_set_policy(MACH_PORT_FACE); boolean_t dp_parse_argument(char *); /* forward; */ unsigned int d_to_i(char *); /* forward; */ +boolean_t strprefix(register const char *s1, register const char *s2); extern int vstruct_def_clshift; @@ -131,8 +144,7 @@ void default_pager(void) { int i, id; - static char here[] = "default_pager"; - mach_msg_options_t server_options; + __unused static char here[] = "default_pager"; default_pager_thread_t dpt; kern_return_t kr; @@ -164,7 +176,7 @@ default_pager(void) if (dpt_array[id] == NULL) Panic("alloc pager thread"); kr = vm_allocate(kernel_map, &((dpt_array[id])->dpt_buffer), - vm_page_size << vstruct_def_clshift, TRUE); + vm_page_size << vstruct_def_clshift, VM_FLAGS_ANYWHERE); if (kr != KERN_SUCCESS) Panic("alloc thread buffer"); kr = vm_map_wire(kernel_map, (dpt_array[id])->dpt_buffer, @@ -233,7 +245,7 @@ d_to_i(char * arg) boolean_t dp_parse_argument(char *av) { char *rhs = av; - static char here[] = "dp_parse_argument"; + __unused static char here[] = "dp_parse_argument"; /* Check for '-v' flag */ @@ -264,19 +276,17 @@ boolean_t dp_parse_argument(char *av) } int -start_def_pager(char *bs_device) +start_def_pager( __unused char *bs_device ) { - int my_node; /* MACH_PORT_FACE master_device_port; */ - MACH_PORT_FACE security_port; /* + MACH_PORT_FACE security_port; MACH_PORT_FACE root_ledger_wired; MACH_PORT_FACE root_ledger_paged; */ - static char here[] = "main"; - int need_dp_init = 1; + __unused static char here[] = "main"; @@ -285,8 +295,8 @@ start_def_pager(char *bs_device) master_device_port = ipc_port_make_send(master_device_port); root_ledger_wired = ipc_port_make_send(root_wired_ledger_port); root_ledger_paged = ipc_port_make_send(root_paged_ledger_port); -*/ security_port = ipc_port_make_send(realhost.host_security_self); +*/ #if NORMA_VM @@ -299,6 +309,13 @@ start_def_pager(char *bs_device) /* setup read buffers, etc */ default_pager_initialize(); default_pager(); + + /* start the backing store monitor, it runs on a callout thread */ + default_pager_backing_store_monitor_callout = + thread_call_allocate(default_pager_backing_store_monitor, NULL); + if (!default_pager_backing_store_monitor_callout) + panic("can't start backing store monitor thread"); + thread_call_enter(default_pager_backing_store_monitor_callout); } /* @@ -329,9 +346,33 @@ default_pager_info( bs_global_info(&pages_total, &pages_free); - infop->dpi_total_space = ptoa(pages_total); - infop->dpi_free_space = ptoa(pages_free); + infop->dpi_total_space = ptoa_32(pages_total); + infop->dpi_free_space = ptoa_32(pages_free); + infop->dpi_page_size = vm_page_size; + + return KERN_SUCCESS; +} + + +kern_return_t +default_pager_info_64( + memory_object_default_t pager, + default_pager_info_64_t *infop) +{ + vm_size_t pages_total, pages_free; + + if (pager != default_pager_object) + return KERN_INVALID_ARGUMENT; + + bs_global_info(&pages_total, &pages_free); + + infop->dpi_total_space = ptoa_64(pages_total); + infop->dpi_free_space = ptoa_64(pages_free); infop->dpi_page_size = vm_page_size; + infop->dpi_flags = 0; + if (dp_encryption_inited && dp_encryption == TRUE) { + infop->dpi_flags |= DPI_ENCRYPTED; + } return KERN_SUCCESS; } @@ -341,7 +382,7 @@ void default_pager_initialize() { kern_return_t kr; - static char here[] = "default_pager_initialize"; + __unused static char here[] = "default_pager_initialize"; /*