summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch')
-rw-r--r--debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch b/debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch
new file mode 100644
index 0000000..3a46e18
--- /dev/null
+++ b/debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch
@@ -0,0 +1,102 @@
+From c77bee5ce27603a1825b5799c16576d1fdcb8173 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Sat, 25 Jul 2015 02:13:17 +0200
+Subject: [PATCH gnumach 06/10] vm: use a general lock to protect the default
+ memory manager
+
+* vm/memory_object.c: Use a general lock to protect the default memory
+manager.
+---
+ vm/memory_object.c | 29 ++++++++++++++++++-----------
+ 1 file changed, 18 insertions(+), 11 deletions(-)
+
+diff --git a/vm/memory_object.c b/vm/memory_object.c
+index 097ed23..eeba168 100644
+--- a/vm/memory_object.c
++++ b/vm/memory_object.c
+@@ -73,8 +73,15 @@ typedef int memory_object_lock_result_t; /* moved from below */
+
+
+ ipc_port_t memory_manager_default = IP_NULL;
+-decl_simple_lock_data(,memory_manager_default_lock)
+
++struct lock default_memory_manager_lock_data;
++
++#define default_memory_manager_lock_init() \
++ lock_init(&default_memory_manager_lock_data, FALSE)
++#define default_memory_manager_lock() \
++ lock_write(&default_memory_manager_lock_data)
++#define default_memory_manager_unlock() \
++ lock_write_done(&default_memory_manager_lock_data)
+ /*
+ * Important note:
+ * All of these routines gain a reference to the
+@@ -1033,7 +1040,7 @@ kern_return_t vm_set_default_memory_manager(host, default_manager)
+ return(KERN_INVALID_HOST);
+
+ new_manager = *default_manager;
+- simple_lock(&memory_manager_default_lock);
++ default_memory_manager_lock();
+ current_manager = memory_manager_default;
+
+ if (new_manager == IP_NULL) {
+@@ -1060,7 +1067,7 @@ kern_return_t vm_set_default_memory_manager(host, default_manager)
+ thread_wakeup((event_t) &memory_manager_default);
+ }
+
+- simple_unlock(&memory_manager_default_lock);
++ default_memory_manager_unlock();
+
+ *default_manager = returned_manager;
+ return(KERN_SUCCESS);
+@@ -1078,17 +1085,17 @@ ipc_port_t memory_manager_default_reference(void)
+ {
+ ipc_port_t current_manager;
+
+- simple_lock(&memory_manager_default_lock);
++ default_memory_manager_lock();
+
+ while (current_manager = ipc_port_copy_send(memory_manager_default),
+ !IP_VALID(current_manager)) {
+- thread_sleep((event_t) &memory_manager_default,
+- simple_lock_addr(memory_manager_default_lock),
++ thread_sleep_lock((event_t) &memory_manager_default,
++ &default_memory_manager_lock_data,
+ FALSE);
+- simple_lock(&memory_manager_default_lock);
++ default_memory_manager_lock();
+ }
+
+- simple_unlock(&memory_manager_default_lock);
++ default_memory_manager_unlock();
+
+ return current_manager;
+ }
+@@ -1109,7 +1116,7 @@ boolean_t memory_manager_default_port(port)
+ ipc_port_t current;
+ boolean_t result;
+
+- simple_lock(&memory_manager_default_lock);
++ default_memory_manager_lock();
+ current = memory_manager_default;
+ if (IP_VALID(current)) {
+ /*
+@@ -1122,7 +1129,7 @@ boolean_t memory_manager_default_port(port)
+ result = port->ip_receiver == current->ip_receiver;
+ } else
+ result = FALSE;
+- simple_unlock(&memory_manager_default_lock);
++ default_memory_manager_unlock();
+
+ return result;
+ }
+@@ -1130,5 +1137,5 @@ boolean_t memory_manager_default_port(port)
+ void memory_manager_default_init(void)
+ {
+ memory_manager_default = IP_NULL;
+- simple_lock_init(&memory_manager_default_lock);
++ default_memory_manager_lock_init();
+ }
+--
+2.1.4
+