diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-04 19:07:58 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-04 19:07:58 +0100 |
commit | 1bf280c049b6ccf20679fa472da889272c7ccd5f (patch) | |
tree | 3d01f8234d0c6ed11fa3f591a6a0741729b68cc1 /debian | |
parent | b238a6dc8f0dac0a1c90f6ea48f450a62388ed56 (diff) |
add patch series
Diffstat (limited to 'debian')
-rw-r--r-- | debian/patches/0001-kern-new-task-notifications.patch | 159 | ||||
-rw-r--r-- | debian/patches/series | 1 |
2 files changed, 160 insertions, 0 deletions
diff --git a/debian/patches/0001-kern-new-task-notifications.patch b/debian/patches/0001-kern-new-task-notifications.patch new file mode 100644 index 0000000..b06dbab --- /dev/null +++ b/debian/patches/0001-kern-new-task-notifications.patch @@ -0,0 +1,159 @@ +From 40102c51796c27e50c6f2b15e43929401a3f3c6c 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] kern: new task notifications + +* 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 | 19 +++++++++++++++++++ + kern/task.c | 27 +++++++++++++++++++++++++++ + kern/task_notify.cli | 7 +++++++ + 5 files changed, 69 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..0775d00 +--- /dev/null ++++ b/include/mach/task_notify.defs +@@ -0,0 +1,19 @@ ++/* XXX */ ++ ++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> ++ ++/* XXX */ ++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..e3aa92e 100644 +--- a/kern/task.c ++++ b/kern/task.c +@@ -50,11 +50,13 @@ + #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; ++ipc_port_t new_task_notification = NULL; + + void task_init(void) + { +@@ -169,6 +171,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 +1240,20 @@ task_ras_control( + #endif /* FAST_TAS */ + return ret; + } ++ ++/* XXX */ ++kern_return_t ++register_new_task_notification( ++ const host_t host, ++ ipc_port_t notification) ++{ ++ if (host == HOST_NULL) ++ return KERN_INVALID_ARGUMENT; ++ ++ if (new_task_notification != NULL) ++ return KERN_NO_ACCESS; ++ ++ // XXX: deallocate if valid ++ 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/series b/debian/patches/series index 52021c2..a8368d4 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -6,3 +6,4 @@ Add-some-padding-to-make-objects-fit-a-single-cache-.patch vm_cache_policy.patch +0001-kern-new-task-notifications.patch |