diff options
Diffstat (limited to 'debian/patches/upstreamme0009-vm-object-use-a-general-lock-to-protect-vm-objects.patch')
-rw-r--r-- | debian/patches/upstreamme0009-vm-object-use-a-general-lock-to-protect-vm-objects.patch | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/debian/patches/upstreamme0009-vm-object-use-a-general-lock-to-protect-vm-objects.patch b/debian/patches/upstreamme0009-vm-object-use-a-general-lock-to-protect-vm-objects.patch new file mode 100644 index 0000000..f03a998 --- /dev/null +++ b/debian/patches/upstreamme0009-vm-object-use-a-general-lock-to-protect-vm-objects.patch @@ -0,0 +1,86 @@ +From bcef2e3112634dd780b9d694fcc3b266d45a203f Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sat, 25 Jul 2015 02:26:36 +0200 +Subject: [PATCH gnumach 09/10] vm/object: use a general lock to protect vm + objects + +* vm/vm_object.h (struct vm_object): Use a general lock, adapt macros. +--- + vm/vm_object.h | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +diff --git a/vm/vm_object.h b/vm/vm_object.h +index 3bfc67a..3c9055f 100644 +--- a/vm/vm_object.h ++++ b/vm/vm_object.h +@@ -63,7 +63,7 @@ typedef struct ipc_port * pager_request_t; + + struct vm_object { + queue_chain_t memq; /* Resident memory */ +- decl_simple_lock_data(, Lock) /* Synchronization */ ++ struct lock Lock; /* Synchronization */ + #if VM_OBJECT_DEBUG + thread_t LockHolder; /* Thread holding Lock */ + #endif /* VM_OBJECT_DEBUG */ +@@ -336,14 +336,15 @@ vm_object_t vm_object_copy_delayed( + */ + + #if VM_OBJECT_DEBUG ++ + #define vm_object_lock_init(object) \ + MACRO_BEGIN \ +- simple_lock_init(&(object)->Lock); \ ++ lock_init(&(object)->Lock, TRUE); \ + (object)->LockHolder = 0; \ + MACRO_END + #define vm_object_lock(object) \ + MACRO_BEGIN \ +- simple_lock(&(object)->Lock); \ ++ lock_write(&(object)->Lock); \ + (object)->LockHolder = current_thread(); \ + MACRO_END + #define vm_object_unlock(object) \ +@@ -351,10 +352,10 @@ MACRO_BEGIN \ + if ((object)->LockHolder != current_thread()) \ + panic("vm_object_unlock 0x%x", (object)); \ + (object)->LockHolder = 0; \ +- simple_unlock(&(object)->Lock); \ ++ lock_done(&(object)->Lock); \ + MACRO_END + #define vm_object_lock_try(object) \ +- (simple_lock_try(&(object)->Lock) \ ++ (lock_try_write(&(object)->Lock) \ + ? ( ((object)->LockHolder = current_thread()) , TRUE) \ + : FALSE) + #define vm_object_sleep(event, object, interruptible) \ +@@ -362,20 +363,20 @@ MACRO_BEGIN \ + if ((object)->LockHolder != current_thread()) \ + panic("vm_object_sleep %#x", (object)); \ + (object)->LockHolder = 0; \ +- thread_sleep((event_t)(event), simple_lock_addr((object)->Lock), \ ++ thread_sleep_lock((event_t)(event), &(object)->Lock, \ + (interruptible)); \ + MACRO_END + #define vm_object_lock_taken(object) \ + ((object)->LockHolder == current_thread()) + #else /* VM_OBJECT_DEBUG */ +-#define vm_object_lock_init(object) simple_lock_init(&(object)->Lock) +-#define vm_object_lock(object) simple_lock(&(object)->Lock) +-#define vm_object_unlock(object) simple_unlock(&(object)->Lock) +-#define vm_object_lock_try(object) simple_lock_try(&(object)->Lock) ++#define vm_object_lock_init(object) lock_init(&(object)->Lock, TRUE) ++#define vm_object_lock(object) lock_write(&(object)->Lock) ++#define vm_object_unlock(object) lock_done(&(object)->Lock) ++#define vm_object_lock_try(object) lock_try_write(&(object)->Lock) + #define vm_object_sleep(event, object, interruptible) \ +- thread_sleep((event_t)(event), simple_lock_addr((object)->Lock), \ ++ thread_sleep_lock((event_t)(event), &(object)->Lock, \ + (interruptible)) +-#define vm_object_lock_taken(object) simple_lock_taken(&(object)->Lock) ++#define vm_object_lock_taken(object) lock_taken(&(object)->Lock) + #endif /* VM_OBJECT_DEBUG */ + + /* +-- +2.1.4 + |