summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-25 02:42:21 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-25 02:42:21 +0200
commit334e3507a9dae1dd0c0d856afa18563bb1154ed1 (patch)
tree78aa7f4a925c40e2051979ad9ddcb03d31a2aa2f /debian
parentde5476a59f5669694ff6da85e17ce93de52f7bb7 (diff)
add patch series
Diffstat (limited to 'debian')
-rw-r--r--debian/patches/series7
-rw-r--r--debian/patches/upstreamme0001-kern-bootstrap-deallocate-task.patch25
-rw-r--r--debian/patches/upstreamme0002-kern-bootstrap-deallocate-thread.patch28
-rw-r--r--debian/patches/upstreamme0003-Make-sure-the-field-offsets-are-updated-if-needed.patch26
-rw-r--r--debian/patches/upstreamme0004-ipc-space-inline-reference-counting.patch28
-rw-r--r--debian/patches/upstreamme0005-Disable-the-kernel-tracing-system-XPR.patch26
-rw-r--r--debian/patches/upstreamme0006-kern-lock-make-sure-the-macros-are-only-used-on-simp.patch99
-rw-r--r--debian/patches/upstreamme0007-kern-new-function-thread_sleep_lock.patch59
8 files changed, 298 insertions, 0 deletions
diff --git a/debian/patches/series b/debian/patches/series
index e532dda..75115f5 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -13,3 +13,10 @@ vm-cache-policy0001-VM-cache-policy-change.patch
vm-cache-policy0002-vm-keep-track-of-clean-pages.patch
vm-cache-policy0003-vm-evict-clean-pages-first.patch
+upstreamme0001-kern-bootstrap-deallocate-task.patch
+upstreamme0002-kern-bootstrap-deallocate-thread.patch
+upstreamme0003-Make-sure-the-field-offsets-are-updated-if-needed.patch
+upstreamme0004-ipc-space-inline-reference-counting.patch
+upstreamme0005-Disable-the-kernel-tracing-system-XPR.patch
+upstreamme0006-kern-lock-make-sure-the-macros-are-only-used-on-simp.patch
+upstreamme0007-kern-new-function-thread_sleep_lock.patch
diff --git a/debian/patches/upstreamme0001-kern-bootstrap-deallocate-task.patch b/debian/patches/upstreamme0001-kern-bootstrap-deallocate-task.patch
new file mode 100644
index 0000000..23892b3
--- /dev/null
+++ b/debian/patches/upstreamme0001-kern-bootstrap-deallocate-task.patch
@@ -0,0 +1,25 @@
+From 890a2f6228b479fd0a0084d6f7b0d36f43f28b74 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sun, 19 Jul 2015 18:50:29 +0200
+Subject: [PATCH gnumach 1/7] kern/bootstrap: deallocate task
+
+* kern/bootstrap.c (boot_script_free_task): Deallocate task.
+---
+ kern/bootstrap.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/kern/bootstrap.c b/kern/bootstrap.c
+index 50388ad..03f4f0f 100644
+--- a/kern/bootstrap.c
++++ b/kern/bootstrap.c
+@@ -836,6 +836,7 @@ boot_script_free_task (task_t task, int aborting)
+ {
+ if (aborting)
+ task_terminate (task);
++ task_deallocate (task);
+ }
+
+ int
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0002-kern-bootstrap-deallocate-thread.patch b/debian/patches/upstreamme0002-kern-bootstrap-deallocate-thread.patch
new file mode 100644
index 0000000..02854af
--- /dev/null
+++ b/debian/patches/upstreamme0002-kern-bootstrap-deallocate-thread.patch
@@ -0,0 +1,28 @@
+From b96414a4edc81821f84ead68cb936a6315c37a2d Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Mon, 20 Jul 2015 20:23:46 +0200
+Subject: [PATCH gnumach 2/7] kern/bootstrap: deallocate thread
+
+Previously, killing the thread would fail because of the extra
+reference, making task_terminate loop forever.
+
+* kern/bootstrap.c (boot_script_exec_command): Deallocate thread.
+---
+ kern/bootstrap.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/kern/bootstrap.c b/kern/bootstrap.c
+index 03f4f0f..cb0f976 100644
+--- a/kern/bootstrap.c
++++ b/kern/bootstrap.c
+@@ -736,6 +736,7 @@ boot_script_exec_cmd (void *hook, task_t task, char *path, int argc,
+ simple_lock (&info.lock);
+ }
+ simple_unlock (&info.lock);
++ thread_deallocate (thread);
+ printf ("\n");
+ }
+
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0003-Make-sure-the-field-offsets-are-updated-if-needed.patch b/debian/patches/upstreamme0003-Make-sure-the-field-offsets-are-updated-if-needed.patch
new file mode 100644
index 0000000..53af98d
--- /dev/null
+++ b/debian/patches/upstreamme0003-Make-sure-the-field-offsets-are-updated-if-needed.patch
@@ -0,0 +1,26 @@
+From fe214c07526a2138cf5f38f6826e6dd82dbc9af8 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Mon, 20 Jul 2015 20:26:29 +0200
+Subject: [PATCH gnumach 3/7] Make sure the field offsets are updated if needed
+
+* Makerules.am: Make sure the field offsets are updated if needed.
+---
+ Makerules.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makerules.am b/Makerules.am
+index b1f17d1..5106fef 100644
+--- a/Makerules.am
++++ b/Makerules.am
+@@ -21,7 +21,7 @@ EXTRA_DIST += \
+ gensym.awk
+ %.symc: %.sym gensym.awk
+ $(AWK_V) $(AWK) -f $(word 2,$^) $< > $@
+-%.symc.o: %.symc
++%.symc.o: %.symc config.h
+ $(AM_V_CC) $(COMPILE) -S -x c -o $@ $<
+ %.h: %.symc.o
+ $(AM_V_GEN) sed < $< > $@ \
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0004-ipc-space-inline-reference-counting.patch b/debian/patches/upstreamme0004-ipc-space-inline-reference-counting.patch
new file mode 100644
index 0000000..651cdd7
--- /dev/null
+++ b/debian/patches/upstreamme0004-ipc-space-inline-reference-counting.patch
@@ -0,0 +1,28 @@
+From 48c553a7c0d4cb629ad8198e501959e3e7592309 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Mon, 20 Jul 2015 21:16:27 +0200
+Subject: [PATCH gnumach 4/7] ipc/space: inline reference counting
+
+* ipc/ipc_space.h (is_{reference,release}): Use the macro variant.
+---
+ ipc/ipc_space.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ipc/ipc_space.h b/ipc/ipc_space.h
+index 73c90ef..a2aac40 100644
+--- a/ipc/ipc_space.h
++++ b/ipc/ipc_space.h
+@@ -121,8 +121,8 @@ MACRO_END
+ extern void ipc_space_reference(struct ipc_space *space);
+ extern void ipc_space_release(struct ipc_space *space);
+
+-#define is_reference(is) ipc_space_reference(is)
+-#define is_release(is) ipc_space_release(is)
++#define is_reference(is) ipc_space_reference_macro(is)
++#define is_release(is) ipc_space_release_macro(is)
+
+ kern_return_t ipc_space_create(ipc_space_t *);
+ kern_return_t ipc_space_create_special(struct ipc_space **);
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0005-Disable-the-kernel-tracing-system-XPR.patch b/debian/patches/upstreamme0005-Disable-the-kernel-tracing-system-XPR.patch
new file mode 100644
index 0000000..e543000
--- /dev/null
+++ b/debian/patches/upstreamme0005-Disable-the-kernel-tracing-system-XPR.patch
@@ -0,0 +1,26 @@
+From 45096a75e86dafba5647291b065d44b78bd11f9f Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Tue, 21 Jul 2015 19:29:44 +0200
+Subject: [PATCH gnumach 5/7] Disable the kernel tracing system XPR
+
+* configfrag.ac (XPR_DEBUG): Disable tracing system.
+---
+ configfrag.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configfrag.ac b/configfrag.ac
+index 5df6239..e41a3a1 100644
+--- a/configfrag.ac
++++ b/configfrag.ac
+@@ -101,7 +101,7 @@ AC_DEFINE([SIMPLE_CLOCK], [0], [SIMPLE_CLOCK])
+ AC_DEFINE([STAT_TIME], [1], [STAT_TIME])
+
+ # Kernel tracing.
+-AC_DEFINE([XPR_DEBUG], [1], [XPR_DEBUG])
++AC_DEFINE([XPR_DEBUG], [0], [XPR_DEBUG])
+
+ # Slab allocator debugging facilities.
+ AC_DEFINE([SLAB_VERIFY], [0], [SLAB_VERIFY])
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0006-kern-lock-make-sure-the-macros-are-only-used-on-simp.patch b/debian/patches/upstreamme0006-kern-lock-make-sure-the-macros-are-only-used-on-simp.patch
new file mode 100644
index 0000000..6d1112d
--- /dev/null
+++ b/debian/patches/upstreamme0006-kern-lock-make-sure-the-macros-are-only-used-on-simp.patch
@@ -0,0 +1,99 @@
+From 08a14e0f6c0e93ee5e72b6892683582facfd231e Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sat, 25 Jul 2015 00:53:44 +0200
+Subject: [PATCH gnumach 6/7] kern/lock: make sure the macros are only used on
+ simple locks
+
+* kern/lock.h (struct slock, simple_lock_data_empty): Add field
+`is_a_simple_lock'.
+(simple_lock_assert): New macro that tests for `is_a_simple_lock'.
+Use this macro to assert that the argument to various other macros are
+indeed simple locks.
+---
+ kern/lock.h | 35 ++++++++++++++++++++++++-----------
+ 1 file changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/kern/lock.h b/kern/lock.h
+index a6d286a..435ee1d 100644
+--- a/kern/lock.h
++++ b/kern/lock.h
+@@ -49,8 +49,15 @@
+
+ struct slock {
+ volatile natural_t lock_data; /* in general 1 bit is sufficient */
++ struct {} is_a_simple_lock;
+ };
+
++/*
++ * Used by macros to assert that the given argument is a simple
++ * lock.
++ */
++#define simple_lock_assert(l) (void) &(l)->is_a_simple_lock
++
+ typedef struct slock simple_lock_data_t;
+ typedef struct slock *simple_lock_t;
+
+@@ -62,7 +69,8 @@ typedef struct slock *simple_lock_t;
+ #define decl_simple_lock_data(class,name) \
+ class simple_lock_data_t name;
+
+-#define simple_lock_addr(lock) (&(lock))
++#define simple_lock_addr(lock) (simple_lock_assert(&(lock)), \
++ &(lock))
+
+ #if (NCPUS > 1)
+
+@@ -70,7 +78,8 @@ class simple_lock_data_t name;
+ * The single-CPU debugging routines are not valid
+ * on a multiprocessor.
+ */
+-#define simple_lock_taken(lock) (1) /* always succeeds */
++#define simple_lock_taken(lock) (simple_lock_assert(lock), \
++ 1) /* always succeeds */
+ #define check_simple_locks()
+
+ #else /* NCPUS > 1 */
+@@ -84,7 +93,8 @@ extern void simple_unlock(simple_lock_t);
+ extern boolean_t simple_lock_try(simple_lock_t);
+
+ #define simple_lock_pause()
+-#define simple_lock_taken(lock) ((lock)->lock_data)
++#define simple_lock_taken(lock) (simple_lock_assert(lock), \
++ (lock)->lock_data)
+
+ extern void check_simple_locks(void);
+
+@@ -94,19 +104,22 @@ extern void check_simple_locks(void);
+ /*
+ * Do not allocate storage for locks if not needed.
+ */
+-struct simple_lock_data_empty {};
+-#define decl_simple_lock_data(class,name) \
++struct simple_lock_data_empty { struct {} is_a_simple_lock; };
++#define decl_simple_lock_data(class,name) \
+ class struct simple_lock_data_empty name;
+-#define simple_lock_addr(lock) ((simple_lock_t)0)
++#define simple_lock_addr(lock) (simple_lock_assert(&(lock)), \
++ (simple_lock_t)0)
+
+ /*
+ * No multiprocessor locking is necessary.
+ */
+-#define simple_lock_init(l)
+-#define simple_lock(l)
+-#define simple_unlock(l) ((void)(l))
+-#define simple_lock_try(l) (TRUE) /* always succeeds */
+-#define simple_lock_taken(l) (1) /* always succeeds */
++#define simple_lock_init(l) simple_lock_assert(l)
++#define simple_lock(l) simple_lock_assert(l)
++#define simple_unlock(l) simple_lock_assert(l)
++#define simple_lock_try(l) (simple_lock_assert(l), \
++ TRUE) /* always succeeds */
++#define simple_lock_taken(l) (simple_lock_assert(l), \
++ 1) /* always succeeds */
+ #define check_simple_locks()
+ #define simple_lock_pause()
+
+--
+2.1.4
+
diff --git a/debian/patches/upstreamme0007-kern-new-function-thread_sleep_lock.patch b/debian/patches/upstreamme0007-kern-new-function-thread_sleep_lock.patch
new file mode 100644
index 0000000..5497650
--- /dev/null
+++ b/debian/patches/upstreamme0007-kern-new-function-thread_sleep_lock.patch
@@ -0,0 +1,59 @@
+From b19e79ad919eb62aefba7372b37267feffbbeeaf Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sat, 25 Jul 2015 01:46:53 +0200
+Subject: [PATCH gnumach 7/7] kern: new function `thread_sleep_lock'
+
+* kern/sched_prim.c (thread_sleep_lock): New function.
+* kern/sched_prim.h (thread_sleep_lock): New delcaration.
+---
+ kern/sched_prim.c | 18 ++++++++++++++++++
+ kern/sched_prim.h | 4 ++++
+ 2 files changed, 22 insertions(+)
+
+diff --git a/kern/sched_prim.c b/kern/sched_prim.c
+index e8f260e..e354a21 100644
+--- a/kern/sched_prim.c
++++ b/kern/sched_prim.c
+@@ -458,6 +458,24 @@ void thread_sleep(
+ }
+
+ /*
++ * thread_sleep_lock:
++ *
++ * Cause the current thread to wait until the specified event
++ * occurs. The specified lock is unlocked before releasing
++ * the cpu. (This is a convenient way to sleep without manually
++ * calling assert_wait).
++ */
++void thread_sleep_lock(
++ event_t event,
++ lock_t lock,
++ boolean_t interruptible)
++{
++ assert_wait(event, interruptible); /* assert event */
++ lock_done(lock); /* release the lock */
++ thread_block((void (*)()) 0); /* block ourselves */
++}
++
++/*
+ * thread_bind:
+ *
+ * Force a thread to execute on the specified processor.
+diff --git a/kern/sched_prim.h b/kern/sched_prim.h
+index 62698dc..83d4594 100644
+--- a/kern/sched_prim.h
++++ b/kern/sched_prim.h
+@@ -69,6 +69,10 @@ extern void thread_sleep(
+ event_t event,
+ simple_lock_t lock,
+ boolean_t interruptible);
++extern void thread_sleep_lock(
++ event_t event,
++ lock_t lock,
++ boolean_t interruptible);
+ extern void thread_wakeup(void); /* for function pointers */
+ extern void thread_wakeup_prim(
+ event_t event,
+--
+2.1.4
+