diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/series | 1 | ||||
-rw-r--r-- | debian/patches/try-fence0001-kern-use-proper-memory-fences-when-handling-the-mapp.patch | 105 |
2 files changed, 0 insertions, 106 deletions
diff --git a/debian/patches/series b/debian/patches/series index e1f462d..c8a3f31 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -16,4 +16,3 @@ fix-locking0005-ipc-fix-locking-issues.patch 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 -try-fence0001-kern-use-proper-memory-fences-when-handling-the-mapp.patch diff --git a/debian/patches/try-fence0001-kern-use-proper-memory-fences-when-handling-the-mapp.patch b/debian/patches/try-fence0001-kern-use-proper-memory-fences-when-handling-the-mapp.patch deleted file mode 100644 index 6a8e85c..0000000 --- a/debian/patches/try-fence0001-kern-use-proper-memory-fences-when-handling-the-mapp.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 81747ac6d3e846d1955edaa94dee9065e541b7d8 Mon Sep 17 00:00:00 2001 -From: Justus Winter <4winter@informatik.uni-hamburg.de> -Date: Mon, 7 Sep 2015 13:04:39 +0200 -Subject: [PATCH gnumach] kern: use proper memory fences when handling the - mapped time - -* include/mach/time_value.h (struct mapped_time_value): Adjust comment. -* kern/mach_clock.c (mtime): Likewise. Also make it volatile. -(update_mapped_time): Use full hardware barriers. -(read_mapped_time): New macro with proper fences. -(record_time_stamp, host_get_time): Use the new macro. ---- - include/mach/time_value.h | 2 ++ - kern/mach_clock.c | 33 ++++++++++++++++++--------------- - 2 files changed, 20 insertions(+), 15 deletions(-) - -diff --git a/include/mach/time_value.h b/include/mach/time_value.h -index 61be581..0dfe382 100644 ---- a/include/mach/time_value.h -+++ b/include/mach/time_value.h -@@ -84,7 +84,9 @@ typedef struct time_value time_value_t; - * Read this mapped value with - * do { - * secs = mtime->seconds; -+ * __sync_synchronize(); - * usecs = mtime->microseconds; -+ * __sync_synchronize(); - * } while (secs != mtime->check_seconds); - */ - -diff --git a/kern/mach_clock.c b/kern/mach_clock.c -index 2bcd232..dba2320 100644 ---- a/kern/mach_clock.c -+++ b/kern/mach_clock.c -@@ -85,26 +85,36 @@ int bigadj = 1000000; /* adjust 10*tickadj if adjustment - * This update protocol, with a check value, allows - * do { - * secs = mtime->seconds; -+ * __sync_synchronize(); - * usecs = mtime->microseconds; -+ * __sync_synchronize(); - * } while (secs != mtime->check_seconds); -- * to read the time correctly. (On a multiprocessor this assumes -- * that processors see each other's writes in the correct order. -- * We have to insert write fence operations.) FIXME -+ * to read the time correctly. - */ - --mapped_time_value_t *mtime = 0; -+volatile mapped_time_value_t *mtime = 0; - - #define update_mapped_time(time) \ - MACRO_BEGIN \ - if (mtime != 0) { \ - mtime->check_seconds = (time)->seconds; \ -- asm volatile("":::"memory"); \ -+ __sync_synchronize(); \ - mtime->microseconds = (time)->microseconds; \ -- asm volatile("":::"memory"); \ -+ __sync_synchronize(); \ - mtime->seconds = (time)->seconds; \ - } \ - MACRO_END - -+#define read_mapped_time(time) \ -+MACRO_BEGIN \ -+ do { \ -+ time->seconds = mtime->seconds; \ -+ __sync_synchronize(); \ -+ time->microseconds = mtime->microseconds; \ -+ __sync_synchronize(); \ -+ } while (time->seconds != mtime->check_seconds); \ -+MACRO_END -+ - decl_simple_lock_data(, timer_lock) /* lock for ... */ - timer_elt_data_t timer_head; /* ordered list of timeouts */ - /* (doubles as end-of-list) */ -@@ -395,10 +405,7 @@ clock_boottime_update(struct time_value *new_time) - void - record_time_stamp (time_value_t *stamp) - { -- do { -- stamp->seconds = mtime->seconds; -- stamp->microseconds = mtime->microseconds; -- } while (stamp->seconds != mtime->check_seconds); -+ read_mapped_time(stamp); - time_value_add(stamp, &clock_boottime_offset); - } - -@@ -425,11 +432,7 @@ host_get_time(host, current_time) - if (host == HOST_NULL) - return(KERN_INVALID_HOST); - -- do { -- current_time->seconds = access_once(mtime->seconds); -- current_time->microseconds = access_once(mtime->microseconds); -- } while (current_time->seconds != access_once(mtime->check_seconds)); -- -+ read_mapped_time(current_time); - return (KERN_SUCCESS); - } - --- -2.1.4 - |