summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0006-vm-use-a-general-lock-to-protect-the-default-memory-.patch
blob: 3a46e18e746f2545c9f4c2e10f07a4fd7347382b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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