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
|