2 [PATCH][2.4] convert atm_dev_lock from spinlock to semaphore
4 From: chas williams (chas@locutus.cmf.nrl.navy.mil)
5 Date: Tue Feb 18 2003 - 16:31:55 EST
7 same as the 2.5 patch just for 2.4 kernels.
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
20 static DECLARE_MUTEX(local_lock);
21 -extern spinlock_t atm_dev_lock;
23 static void notify_sigd(struct atm_dev *dev)
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
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>
42 #include <asm/atomic.h>
44 #include <asm/ioctls.h>
45 +#include <asm/semaphore.h>
47 #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
48 #include <linux/atmlec.h>
50 #define DPRINTK(format,args...)
53 -spinlock_t atm_dev_lock = SPIN_LOCK_UNLOCKED;
54 +DECLARE_MUTEX(atm_dev_sem);
56 static struct sk_buff *alloc_tx(struct atm_vcc *vcc,unsigned int size)
59 vcc->dev->ops->free_rx_skb(vcc,skb);
62 - spin_lock (&atm_dev_lock);
64 fops_put (vcc->dev->ops);
65 if (atomic_read(&vcc->rx_inuse))
66 printk(KERN_WARNING "atm_release_vcc: strange ... "
68 atomic_read(&vcc->rx_inuse));
71 - spin_lock (&atm_dev_lock);
74 if (free_sk) free_atm_vcc_sk(sk);
76 - spin_unlock (&atm_dev_lock);
85 - spin_lock (&atm_dev_lock);
87 dev = atm_find_dev(itf);
91 return_val = atm_do_connect_dev(vcc,dev,vpi,vci);
93 - spin_unlock (&atm_dev_lock);
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);
108 if (!dev) return -ENODEV;
110 if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC)
112 int error,len,size,number, ret_val;
115 - spin_lock (&atm_dev_lock);
116 + down(&atm_dev_sem);
124 - spin_unlock (&atm_dev_lock);
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
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;
145 static struct atm_dev *alloc_atm_dev(const char *type)
148 struct atm_dev *dev = NULL;
150 - spin_lock(&atm_dev_lock);
151 + down(&atm_dev_sem);
153 dev = alloc_atm_dev(type);
159 - spin_unlock(&atm_dev_lock);
165 #ifdef CONFIG_PROC_FS
166 if (dev->ops->proc_read) atm_proc_dev_deregister(dev);
168 - spin_lock(&atm_dev_lock);
169 + down(&atm_dev_sem);
171 - spin_unlock(&atm_dev_lock);
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
185 struct atm_vcc *sigd = NULL;
186 static DECLARE_WAIT_QUEUE_HEAD(sigd_sleep);
188 -extern spinlock_t atm_dev_lock;
189 +extern struct semaphore atm_dev_sem;
191 static void sigd_put_skb(struct sk_buff *skb)
194 skb_queue_purge(&vcc->recvq);
195 purge_vccs(nodev_vccs);
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);
205 To unsubscribe from this list: send the line "unsubscribe
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/