/* * Copyright (C) 2012 Free Software Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ subsystem #if KERNEL_SERVER KernelServer #endif /* KERNEL_SERVER */ #if KERNEL_USER KernelUser #endif /* KERNEL_USER */ gnumach 4200; #include #include #include #ifdef GNUMACH_IMPORTS GNUMACH_IMPORTS #endif type vm_cache_statistics_data_t = struct[11] of integer_t; /* * Return page cache statistics for the host on which the target task * resides. */ routine vm_cache_statistics( target_task : vm_task_t; out vm_cache_stats : vm_cache_statistics_data_t); /* * Terminate a thread and release rights and memory. * * Intended to be used by threading libraries to provide a clean way for * threads to terminate themselves. The resources a thread wouldn't be able * to release without this call when terminating itself are its * last reference to its kernel port, its reply port, and its stack. * * This call is semantically equivalent to : * - mach_port_deallocate(task, thread_name); * - if (reply_port != MACH_PORT_NULL) * mach_port_destroy(task, reply_port); * - if ((address != 0) || (size != 0)) * vm_deallocate(task, address, size) * - thread_terminate(thread) * * Implemented as a simple routine so a reply port isn't required. */ simpleroutine thread_terminate_release( thread : thread_t; task : task_t; thread_name : mach_port_name_t; reply_port : mach_port_name_t; address : vm_address_t; size : vm_size_t); /* * Set the name of task TASK to NAME. This is a debugging aid. * NAME will be used in error messages printed by the kernel. */ simpleroutine task_set_name( task : task_t; name : kernel_debug_name_t); /* * Register a port to which a notification about newly created tasks * are sent. */ routine register_new_task_notification( host_priv : host_priv_t; notification : mach_port_send_t);