]>
Commit | Line | Data |
---|---|---|
b5a39c4d JR |
1 | |
2 | [PATCH][2.4] convert atm_dev_lock from spinlock to semaphore | |
3 | ||
4 | From: chas williams (chas@locutus.cmf.nrl.navy.mil) | |
5 | Date: Tue Feb 18 2003 - 16:31:55 EST | |
6 | ||
7 | same as the 2.5 patch just for 2.4 kernels. | |
8 | ||
9 | Index: linux/net/atm/addr.c | |
10 | =================================================================== | |
11 | RCS file: /afs/cmf/project/cvsroot/linux/net/atm/addr.c,v | |
12 | retrieving revision 1.2 | |
13 | retrieving revision 1.3 | |
14 | diff -u -d -b -w -r1.2 -r1.3 | |
15 | --- linux/net/atm/addr.c 5 Mar 2002 13:41:26 -0000 1.2 | |
16 | +++ linux/net/atm/addr.c 14 Feb 2003 17:02:40 -0000 1.3 | |
17 | @@ -42,7 +42,6 @@ | |
18 | */ | |
19 | ||
20 | static DECLARE_MUTEX(local_lock); | |
21 | -extern spinlock_t atm_dev_lock; | |
22 | ||
23 | static void notify_sigd(struct atm_dev *dev) | |
24 | { | |
25 | Index: linux/net/atm/common.c | |
26 | =================================================================== | |
27 | RCS file: /afs/cmf/project/cvsroot/linux/net/atm/common.c,v | |
28 | retrieving revision 1.5 | |
29 | retrieving revision 1.6 | |
30 | diff -u -d -b -w -r1.5 -r1.6 | |
31 | --- linux/net/atm/common.c 14 Feb 2003 16:59:38 -0000 1.5 | |
32 | +++ linux/net/atm/common.c 14 Feb 2003 17:02:40 -0000 1.6 | |
33 | @@ -18,6 +18,7 @@ | |
34 | #include <linux/capability.h> | |
35 | #include <linux/mm.h> /* verify_area */ | |
36 | #include <linux/sched.h> | |
37 | +#include <linux/sem.h> | |
38 | #include <linux/time.h> /* struct timeval */ | |
39 | #include <linux/skbuff.h> | |
40 | #include <linux/bitops.h> | |
41 | @@ -27,6 +28,7 @@ | |
42 | #include <asm/atomic.h> | |
43 | #include <asm/poll.h> | |
44 | #include <asm/ioctls.h> | |
45 | +#include <asm/semaphore.h> | |
46 | ||
47 | #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) | |
48 | #include <linux/atmlec.h> | |
49 | @@ -86,7 +88,7 @@ | |
50 | #define DPRINTK(format,args...) | |
51 | #endif | |
52 | ||
53 | -spinlock_t atm_dev_lock = SPIN_LOCK_UNLOCKED; | |
54 | +DECLARE_MUTEX(atm_dev_sem); | |
55 | ||
56 | static struct sk_buff *alloc_tx(struct atm_vcc *vcc,unsigned int size) | |
57 | { | |
58 | @@ -154,7 +156,7 @@ | |
59 | vcc->dev->ops->free_rx_skb(vcc,skb); | |
60 | else kfree_skb(skb); | |
61 | } | |
62 | - spin_lock (&atm_dev_lock); | |
63 | + down(&atm_dev_sem); | |
64 | fops_put (vcc->dev->ops); | |
65 | if (atomic_read(&vcc->rx_inuse)) | |
66 | printk(KERN_WARNING "atm_release_vcc: strange ... " | |
67 | @@ -162,11 +164,11 @@ | |
68 | atomic_read(&vcc->rx_inuse)); | |
69 | bind_vcc(vcc,NULL); | |
70 | } else | |
71 | - spin_lock (&atm_dev_lock); | |
72 | + down(&atm_dev_sem); | |
73 | ||
74 | if (free_sk) free_atm_vcc_sk(sk); | |
75 | ||
76 | - spin_unlock (&atm_dev_lock); | |
77 | + up(&atm_dev_sem); | |
78 | } | |
79 | ||
80 | ||
81 | @@ -277,14 +279,14 @@ | |
82 | struct atm_dev *dev; | |
83 | int return_val; | |
84 | ||
85 | - spin_lock (&atm_dev_lock); | |
86 | + down(&atm_dev_sem); | |
87 | dev = atm_find_dev(itf); | |
88 | if (!dev) | |
89 | return_val = -ENODEV; | |
90 | else | |
91 | return_val = atm_do_connect_dev(vcc,dev,vpi,vci); | |
92 | ||
93 | - spin_unlock (&atm_dev_lock); | |
94 | + up(&atm_dev_sem); | |
95 | ||
96 | return return_val; | |
97 | } | |
98 | @@ -316,10 +318,10 @@ | |
99 | else { | |
100 | struct atm_dev *dev; | |
101 | ||
102 | - spin_lock (&atm_dev_lock); | |
103 | + down(&atm_dev_sem); | |
104 | for (dev = atm_devs; dev; dev = dev->next) | |
105 | if (!atm_do_connect_dev(vcc,dev,vpi,vci)) break; | |
106 | - spin_unlock (&atm_dev_lock); | |
107 | + up(&atm_dev_sem); | |
108 | if (!dev) return -ENODEV; | |
109 | } | |
110 | if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC) | |
111 | @@ -561,7 +563,7 @@ | |
112 | int error,len,size,number, ret_val; | |
113 | ||
114 | ret_val = 0; | |
115 | - spin_lock (&atm_dev_lock); | |
116 | + down(&atm_dev_sem); | |
117 | vcc = ATM_SD(sock); | |
118 | switch (cmd) { | |
119 | case SIOCOUTQ: | |
120 | @@ -961,7 +963,7 @@ | |
121 | ret_val = 0; | |
122 | ||
123 | done: | |
124 | - spin_unlock (&atm_dev_lock); | |
125 | + up(&atm_dev_sem); | |
126 | return ret_val; | |
127 | } | |
128 | ||
129 | Index: linux/net/atm/resources.c | |
130 | =================================================================== | |
131 | RCS file: /afs/cmf/project/cvsroot/linux/net/atm/resources.c,v | |
132 | retrieving revision 1.2 | |
133 | retrieving revision 1.3 | |
134 | diff -u -d -b -w -r1.2 -r1.3 | |
135 | --- linux/net/atm/resources.c 2 May 2002 16:56:23 -0000 1.2 | |
136 | +++ linux/net/atm/resources.c 14 Feb 2003 17:02:40 -0000 1.3 | |
137 | @@ -25,7 +25,7 @@ | |
138 | struct atm_dev *atm_devs = NULL; | |
139 | static struct atm_dev *last_dev = NULL; | |
140 | struct atm_vcc *nodev_vccs = NULL; | |
141 | -extern spinlock_t atm_dev_lock; | |
142 | +extern struct semaphore atm_dev_sem; | |
143 | ||
144 | ||
145 | static struct atm_dev *alloc_atm_dev(const char *type) | |
146 | @@ -72,7 +72,7 @@ | |
147 | { | |
148 | struct atm_dev *dev = NULL; | |
149 | ||
150 | - spin_lock(&atm_dev_lock); | |
151 | + down(&atm_dev_sem); | |
152 | ||
153 | dev = alloc_atm_dev(type); | |
154 | if (!dev) { | |
155 | @@ -110,7 +110,7 @@ | |
156 | #endif | |
157 | ||
158 | done: | |
159 | - spin_unlock(&atm_dev_lock); | |
160 | + up(&atm_dev_sem); | |
161 | return dev; | |
162 | } | |
163 | ||
164 | @@ -120,9 +120,9 @@ | |
165 | #ifdef CONFIG_PROC_FS | |
166 | if (dev->ops->proc_read) atm_proc_dev_deregister(dev); | |
167 | #endif | |
168 | - spin_lock(&atm_dev_lock); | |
169 | + down(&atm_dev_sem); | |
170 | __free_atm_dev(dev); | |
171 | - spin_unlock(&atm_dev_lock); | |
172 | + up(&atm_dev_sem); | |
173 | } | |
174 | ||
175 | void shutdown_atm_dev(struct atm_dev *dev) | |
176 | Index: linux/net/atm/signaling.c | |
177 | =================================================================== | |
178 | RCS file: /afs/cmf/project/cvsroot/linux/net/atm/signaling.c,v | |
179 | retrieving revision 1.2 | |
180 | retrieving revision 1.3 | |
181 | diff -u -d -b -w -r1.2 -r1.3 | |
182 | --- linux/net/atm/signaling.c 12 Feb 2003 20:57:47 -0000 1.2 | |
183 | +++ linux/net/atm/signaling.c 14 Feb 2003 17:02:40 -0000 1.3 | |
184 | @@ -33,7 +33,7 @@ | |
185 | struct atm_vcc *sigd = NULL; | |
186 | static DECLARE_WAIT_QUEUE_HEAD(sigd_sleep); | |
187 | ||
188 | -extern spinlock_t atm_dev_lock; | |
189 | +extern struct semaphore atm_dev_sem; | |
190 | ||
191 | static void sigd_put_skb(struct sk_buff *skb) | |
192 | { | |
193 | @@ -220,9 +220,9 @@ | |
194 | skb_queue_purge(&vcc->recvq); | |
195 | purge_vccs(nodev_vccs); | |
196 | ||
197 | - spin_lock (&atm_dev_lock); | |
198 | + down(&atm_dev_sem); | |
199 | for (dev = atm_devs; dev; dev = dev->next) purge_vccs(dev->vccs); | |
200 | - spin_unlock (&atm_dev_lock); | |
201 | + up(&atm_dev_sem); | |
202 | } | |
203 | ||
204 | ||
205 | To unsubscribe from this list: send the line "unsubscribe | |
206 | linux-kernel" in | |
207 | the body of a message to [8]majordomo@vger.kernel.org | |
208 | More majordomo info at [9]http://vger.kernel.org/majordomo-info.html | |
209 | Please read the FAQ at [10]http://www.tux.org/lkml/ |