summaryrefslogtreecommitdiff
path: root/debian/patches/upstreamme0004-device-use-general-lock-for-mach_device.patch
blob: 768b3cb72813deaff159631d3e26e5abae5d86bc (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
From 7e6ed5d82d5941e9f59ae2d4be06d3129d1d236e Mon Sep 17 00:00:00 2001
From: Justus Winter <4winter@informatik.uni-hamburg.de>
Date: Sat, 25 Jul 2015 01:47:54 +0200
Subject: [PATCH gnumach 04/10] device: use general lock for `mach_device'

* device/dev_hdr.h (struct mach_device): Turn lock into a general lock.
(device_lock_init): New macro.
(device_lock, device_unlock): Adapt accordingly.
* device/dev_lookup.c (device_lookup): Use `device_lock_init'.
* device/ds_routines.c (device_open): Adapt accordingly.
---
 device/dev_hdr.h     | 7 ++++---
 device/dev_lookup.c  | 2 +-
 device/ds_routines.c | 2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/device/dev_hdr.h b/device/dev_hdr.h
index ff7d2ef..5f80d4a 100644
--- a/device/dev_hdr.h
+++ b/device/dev_hdr.h
@@ -82,7 +82,7 @@ typedef struct device *device_t;
 struct mach_device {
 	decl_simple_lock_data(,ref_lock)/* lock for reference count */
 	int		ref_count;	/* reference count */
-	decl_simple_lock_data(, lock)	/* lock for rest of state */
+	struct lock	lock;		/* lock for rest of state */
 	short		state;		/* state: */
 #define	DEV_STATE_INIT		0	/* not open  */
 #define	DEV_STATE_OPENING	1	/* being opened */
@@ -127,8 +127,9 @@ boolean_t	dev_map(boolean_t (*)(), mach_port_t);
 /*
  * To lock and unlock state and open-count
  */
-#define	device_lock(device)	simple_lock(&(device)->lock)
-#define	device_unlock(device)	simple_unlock(&(device)->lock)
+#define	device_lock_init(device)	lock_init(&(device)->lock, FALSE)
+#define	device_lock(device)		lock_write(&(device)->lock)
+#define	device_unlock(device)		lock_write_done(&(device)->lock)
 
 /*
  * device name lookup
diff --git a/device/dev_lookup.c b/device/dev_lookup.c
index a80830c..297dcde 100644
--- a/device/dev_lookup.c
+++ b/device/dev_lookup.c
@@ -154,7 +154,7 @@ device_lookup(char *name)
 	    new_device = (mach_device_t) kmem_cache_alloc(&dev_hdr_cache);
 	    simple_lock_init(&new_device->ref_lock);
 	    new_device->ref_count = 1;
-	    simple_lock_init(&new_device->lock);
+	    device_lock_init(new_device);
 	    new_device->state = DEV_STATE_INIT;
 	    new_device->flag = 0;
 	    new_device->open_count = 0;
diff --git a/device/ds_routines.c b/device/ds_routines.c
index 43ed5b5..33cfd89 100644
--- a/device/ds_routines.c
+++ b/device/ds_routines.c
@@ -443,7 +443,7 @@ device_open(const ipc_port_t	reply_port,
 	while (device->state == DEV_STATE_OPENING ||
 		device->state == DEV_STATE_CLOSING) {
 	    device->io_wait = TRUE;
-	    thread_sleep((event_t)device, simple_lock_addr(device->lock), TRUE);
+	    thread_sleep_lock((event_t)device, &device->lock, TRUE);
 	    device_lock(device);
 	}
 
-- 
2.1.4