diff options
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-.patch | 102 |
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 + |