diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-12 16:34:22 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-12 16:34:22 +0100 |
commit | 48329b96fbca1f0398717b3b444fe40456b28287 (patch) | |
tree | d3fae3447d2c9b551e9deeb4a6296682b5e592f0 /debian | |
parent | 5f135815002e23e77f9735139193304d5cb5deb2 (diff) |
add patch series
Diffstat (limited to 'debian')
-rw-r--r-- | debian/patches/0001-kern-provide-notifications-about-new-tasks.patch | 187 | ||||
-rw-r--r-- | debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch | 64 | ||||
-rw-r--r-- | debian/patches/series | 2 |
3 files changed, 253 insertions, 0 deletions
diff --git a/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch b/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch new file mode 100644 index 0000000..dec19b7 --- /dev/null +++ b/debian/patches/0001-kern-provide-notifications-about-new-tasks.patch @@ -0,0 +1,187 @@ +From 19c34e37ddc72850b097fbb46823d108dbb984bb Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Tue, 4 Nov 2014 18:46:42 +0100 +Subject: [PATCH gnumach 1/2] kern: provide notifications about new tasks + +These notifications are sent to the port registered via +`register_new_task_notification' and provide a robust parental +relation between tasks to a userspace server. + +* Makefrag.am: Add task_notify.defs. +* include/mach/gnumach.defs: Add register_new_task_notification. +* include/mach/task_notify.defs: New file. +* kern/task.c (new_task_notification): New variable. +(task_create): Send new task notifications. +(register_new_task_notification): Add server function. +* kern/task_notify.cli: New file. +--- + Makefrag.am | 8 ++++++++ + include/mach/gnumach.defs | 8 ++++++++ + include/mach/task_notify.defs | 36 ++++++++++++++++++++++++++++++++++++ + kern/task.c | 33 +++++++++++++++++++++++++++++++++ + kern/task_notify.cli | 7 +++++++ + 5 files changed, 92 insertions(+) + create mode 100644 include/mach/task_notify.defs + create mode 100644 kern/task_notify.cli + +diff --git a/Makefrag.am b/Makefrag.am +index 5e98b21..410f56d 100644 +--- a/Makefrag.am ++++ b/Makefrag.am +@@ -364,6 +364,7 @@ include_mach_HEADERS = \ + include/mach/mach.defs \ + include/mach/mach4.defs \ + include/mach/gnumach.defs \ ++ include/mach/task_notify.defs \ + include/mach/mach_host.defs \ + include/mach/mach_port.defs \ + include/mach/mach_types.defs \ +@@ -488,6 +489,13 @@ nodist_libkernel_a_SOURCES += \ + # device/device_reply.user.defs + # device/memory_object_reply.user.defs + ++nodist_lib_dep_tr_for_defs_a_SOURCES += \ ++ kern/task_notify.user.defs.c ++nodist_libkernel_a_SOURCES += \ ++ kern/task_notify.user.h \ ++ kern/task_notify.user.c \ ++ kern/task_notify.user.msgids ++ + # Server stubs. + nodist_lib_dep_tr_for_defs_a_SOURCES += \ + device/device.server.defs.c \ +diff --git a/include/mach/gnumach.defs b/include/mach/gnumach.defs +index 6cfbb0d..bac3b09 100644 +--- a/include/mach/gnumach.defs ++++ b/include/mach/gnumach.defs +@@ -72,3 +72,11 @@ simpleroutine thread_terminate_release( + 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); +diff --git a/include/mach/task_notify.defs b/include/mach/task_notify.defs +new file mode 100644 +index 0000000..5485d4e +--- /dev/null ++++ b/include/mach/task_notify.defs +@@ -0,0 +1,36 @@ ++/* ++ * Copyright (C) 2014 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, see <http://www.gnu.org/licenses/>. ++ */ ++ ++subsystem ++#if KERNEL_SERVER ++ KernelServer ++#endif /* KERNEL_SERVER */ ++#if KERNEL_USER ++ KernelUser ++#endif /* KERNEL_USER */ ++ task_notify 4400; ++ ++#include <mach/std_types.defs> ++#include <mach/mach_types.defs> ++ ++/* These notifications are sent to the port registered via ++ `register_new_task_notification' and provide a robust parental ++ relation between tasks. */ ++simpleroutine mach_notify_new_task( ++ notify : mach_port_t; ++ task : task_t; ++ parent : task_t); +diff --git a/kern/task.c b/kern/task.c +index 20acc6a..bcc2a4e 100644 +--- a/kern/task.c ++++ b/kern/task.c +@@ -50,12 +50,16 @@ + #include <kern/sched_prim.h> /* for thread_wakeup */ + #include <kern/ipc_tt.h> + #include <kern/syscall_emulation.h> ++#include <kern/task_notify.user.h> + #include <vm/vm_kern.h> /* for kernel_map, ipc_kernel_map */ + #include <machine/machspl.h> /* for splsched */ + + task_t kernel_task = TASK_NULL; + struct kmem_cache task_cache; + ++/* Where to send notifications about newly created tasks. */ ++ipc_port_t new_task_notification = NULL; ++ + void task_init(void) + { + kmem_cache_init(&task_cache, "task", sizeof(struct task), 0, +@@ -169,6 +173,14 @@ kern_return_t task_create( + + snprintf (new_task->name, sizeof new_task->name, "%p", new_task); + ++ if (new_task_notification != NULL) { ++ task_reference (new_task); ++ task_reference (parent_task); ++ mach_notify_new_task (new_task_notification, ++ convert_task_to_port (new_task), ++ convert_task_to_port (parent_task)); ++ } ++ + ipc_task_enable(new_task); + + *child_task = new_task; +@@ -1230,3 +1242,24 @@ task_ras_control( + #endif /* FAST_TAS */ + return ret; + } ++ ++/* ++ * register_new_task_notification ++ * ++ * Register a port to which a notification about newly created ++ * tasks are sent. ++ */ ++kern_return_t ++register_new_task_notification( ++ const host_t host, ++ ipc_port_t notification) ++{ ++ if (host == HOST_NULL) ++ return KERN_INVALID_HOST; ++ ++ if (new_task_notification != NULL) ++ return KERN_NO_ACCESS; ++ ++ new_task_notification = notification; ++ return KERN_SUCCESS; ++} +diff --git a/kern/task_notify.cli b/kern/task_notify.cli +new file mode 100644 +index 0000000..c6c85d9 +--- /dev/null ++++ b/kern/task_notify.cli +@@ -0,0 +1,7 @@ ++/* XXX */ ++ ++/* This is a client presentation file. */ ++ ++#define KERNEL_USER 1 ++ ++#include <mach/task_notify.defs> +-- +2.1.1 + diff --git a/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch b/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch new file mode 100644 index 0000000..e79ac54 --- /dev/null +++ b/debian/patches/0002-include-add-X_IMPORTS-to-ipc-definitions.patch @@ -0,0 +1,64 @@ +From 1f60234ceb8c3fa90333658528f24ae887ece6f8 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Thu, 6 Nov 2014 16:57:35 +0100 +Subject: [PATCH gnumach 2/2] include: add X_IMPORTS to ipc definitions + +This makes it possible to inject imports. + +* include/mach/gnumach.defs: Make it possible to inject imports. +* include/mach/mach.defs: Likewise. +* include/mach/mach_host.defs: Likewise. +--- + include/mach/gnumach.defs | 4 ++++ + include/mach/mach.defs | 4 ++++ + include/mach/mach_host.defs | 4 ++++ + 3 files changed, 12 insertions(+) + +diff --git a/include/mach/gnumach.defs b/include/mach/gnumach.defs +index bac3b09..dd4da87 100644 +--- a/include/mach/gnumach.defs ++++ b/include/mach/gnumach.defs +@@ -29,6 +29,10 @@ subsystem + #include <mach/mach_types.defs> + #include <mach_debug/mach_debug_types.defs> + ++#ifdef GNUMACH_IMPORTS ++GNUMACH_IMPORTS ++#endif ++ + type vm_cache_statistics_data_t = struct[11] of integer_t; + + /* +diff --git a/include/mach/mach.defs b/include/mach/mach.defs +index 5851080..3786f65 100644 +--- a/include/mach/mach.defs ++++ b/include/mach/mach.defs +@@ -46,6 +46,10 @@ userprefix r_; + #include <mach/std_types.defs> + #include <mach/mach_types.defs> + ++#ifdef MACH_IMPORTS ++MACH_IMPORTS ++#endif ++ + skip; /* old port_allocate */ + skip; /* old port_deallocate */ + skip; /* old port_enable */ +diff --git a/include/mach/mach_host.defs b/include/mach/mach_host.defs +index 2644146..6699a50 100644 +--- a/include/mach/mach_host.defs ++++ b/include/mach/mach_host.defs +@@ -47,6 +47,10 @@ subsystem + #include <mach/std_types.defs> + #include <mach/mach_types.defs> + ++#ifdef MACH_HOST_IMPORTS ++MACH_HOST_IMPORTS ++#endif ++ + /* + * Get list of processors on this host. + */ +-- +2.1.1 + diff --git a/debian/patches/series b/debian/patches/series index 52021c2..1b8569a 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -6,3 +6,5 @@ Add-some-padding-to-make-objects-fit-a-single-cache-.patch vm_cache_policy.patch +0001-kern-provide-notifications-about-new-tasks.patch +0002-include-add-X_IMPORTS-to-ipc-definitions.patch |