summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-04 18:47:15 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-04 18:47:15 +0100
commit510cc18a43c9d44cc27c1affe2a4b429aa1f8cb1 (patch)
treee3c87056697a98e7246a2b2420b060b2a9b8a3c5 /debian
parent5deebffd1785db0b9964b945cfd697cb01c0d1e0 (diff)
add patch series
Diffstat (limited to 'debian')
-rw-r--r--debian/patches/0001-kern-new-task-notifications.patch158
-rw-r--r--debian/patches/series1
2 files changed, 159 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..b50c36b
--- /dev/null
+++ b/debian/patches/0001-kern-new-task-notifications.patch
@@ -0,0 +1,158 @@
+From 97383f0938eaa311be3d0dac788195e2690fd3d3 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 | 26 ++++++++++++++++++++++++++
+ kern/task_notify.cli | 7 +++++++
+ 5 files changed, 68 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..90a0559 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,19 @@ task_ras_control(
+ #endif /* FAST_TAS */
+ return ret;
+ }
++
++/* XXX */
++kern_return_t
++register_new_task_notification(
++ host_t host,
++ ipc_port_t notification)
++{
++ if (host == HOST_NULL)
++ return KERN_INVALID_ARGUMENT;
++
++ 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/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