diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-25 02:42:21 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-25 02:42:21 +0200 |
commit | 334e3507a9dae1dd0c0d856afa18563bb1154ed1 (patch) | |
tree | 78aa7f4a925c40e2051979ad9ddcb03d31a2aa2f /debian | |
parent | de5476a59f5669694ff6da85e17ce93de52f7bb7 (diff) |
add patch series
Diffstat (limited to 'debian')
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 + |