diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:45:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:45:48 -0400 |
commit | 95dfec6ae1cb8c03406aac612a5642cbddb676b3 (patch) | |
tree | 978de715f45de94a8e79eb08a08ca5fb9dfd9dea /drivers/atm/ambassador.c | |
parent | ae3a0064e6d69068b1c9fd075095da062430bda9 (diff) | |
parent | 159131149c2f56c1da5ae5e23ab9d5acef4916d1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (53 commits)
tcp: Overflow bug in Vegas
[IPv4] UFO: prevent generation of chained skb destined to UFO device
iwlwifi: move the selects to the tristate drivers
ipv4: annotate a few functions __init in ipconfig.c
atm: ambassador: vcc_sf semaphore to mutex
MAINTAINERS: The socketcan-core list is subscribers-only.
netfilter: nf_conntrack: padding breaks conntrack hash on ARM
ipv4: Update MTU to all related cache entries in ip_rt_frag_needed()
sch_sfq: use del_timer_sync() in sfq_destroy()
net: Add compat support for getsockopt (MCAST_MSFILTER)
net: Several cleanups for the setsockopt compat support.
ipvs: fix oops in backup for fwmark conn templates
bridge: kernel panic when unloading bridge module
bridge: fix error handling in br_add_if()
netfilter: {nfnetlink,ip,ip6}_queue: fix skb_over_panic when enlarging packets
netfilter: x_tables: fix net namespace leak when reading /proc/net/xxx_tables_names
netfilter: xt_TCPOPTSTRIP: signed tcphoff for ipv6_skip_exthdr() retval
tcp: Limit cwnd growth when deferring for GSO
tcp: Allow send-limited cwnd to grow up to max_burst when gso disabled
[netdrvr] gianfar: Determine TBIPA value dynamically
...
Diffstat (limited to 'drivers/atm/ambassador.c')
-rw-r--r-- | drivers/atm/ambassador.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index 5aa12b011a9a..6adb72a2f876 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/poison.h> | 34 | #include <linux/poison.h> |
35 | #include <linux/bitrev.h> | 35 | #include <linux/bitrev.h> |
36 | #include <linux/mutex.h> | ||
36 | 37 | ||
37 | #include <asm/atomic.h> | 38 | #include <asm/atomic.h> |
38 | #include <asm/io.h> | 39 | #include <asm/io.h> |
@@ -1177,7 +1178,7 @@ static int amb_open (struct atm_vcc * atm_vcc) | |||
1177 | 1178 | ||
1178 | vcc->tx_frame_bits = tx_frame_bits; | 1179 | vcc->tx_frame_bits = tx_frame_bits; |
1179 | 1180 | ||
1180 | down (&dev->vcc_sf); | 1181 | mutex_lock(&dev->vcc_sf); |
1181 | if (dev->rxer[vci]) { | 1182 | if (dev->rxer[vci]) { |
1182 | // RXer on the channel already, just modify rate... | 1183 | // RXer on the channel already, just modify rate... |
1183 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); | 1184 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); |
@@ -1203,7 +1204,7 @@ static int amb_open (struct atm_vcc * atm_vcc) | |||
1203 | schedule(); | 1204 | schedule(); |
1204 | } | 1205 | } |
1205 | dev->txer[vci].tx_present = 1; | 1206 | dev->txer[vci].tx_present = 1; |
1206 | up (&dev->vcc_sf); | 1207 | mutex_unlock(&dev->vcc_sf); |
1207 | } | 1208 | } |
1208 | 1209 | ||
1209 | if (rxtp->traffic_class != ATM_NONE) { | 1210 | if (rxtp->traffic_class != ATM_NONE) { |
@@ -1211,7 +1212,7 @@ static int amb_open (struct atm_vcc * atm_vcc) | |||
1211 | 1212 | ||
1212 | vcc->rx_info.pool = pool; | 1213 | vcc->rx_info.pool = pool; |
1213 | 1214 | ||
1214 | down (&dev->vcc_sf); | 1215 | mutex_lock(&dev->vcc_sf); |
1215 | /* grow RX buffer pool */ | 1216 | /* grow RX buffer pool */ |
1216 | if (!dev->rxq[pool].buffers_wanted) | 1217 | if (!dev->rxq[pool].buffers_wanted) |
1217 | dev->rxq[pool].buffers_wanted = rx_lats; | 1218 | dev->rxq[pool].buffers_wanted = rx_lats; |
@@ -1237,7 +1238,7 @@ static int amb_open (struct atm_vcc * atm_vcc) | |||
1237 | schedule(); | 1238 | schedule(); |
1238 | // this link allows RX frames through | 1239 | // this link allows RX frames through |
1239 | dev->rxer[vci] = atm_vcc; | 1240 | dev->rxer[vci] = atm_vcc; |
1240 | up (&dev->vcc_sf); | 1241 | mutex_unlock(&dev->vcc_sf); |
1241 | } | 1242 | } |
1242 | 1243 | ||
1243 | // indicate readiness | 1244 | // indicate readiness |
@@ -1262,7 +1263,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { | |||
1262 | if (atm_vcc->qos.txtp.traffic_class != ATM_NONE) { | 1263 | if (atm_vcc->qos.txtp.traffic_class != ATM_NONE) { |
1263 | command cmd; | 1264 | command cmd; |
1264 | 1265 | ||
1265 | down (&dev->vcc_sf); | 1266 | mutex_lock(&dev->vcc_sf); |
1266 | if (dev->rxer[vci]) { | 1267 | if (dev->rxer[vci]) { |
1267 | // RXer still on the channel, just modify rate... XXX not really needed | 1268 | // RXer still on the channel, just modify rate... XXX not really needed |
1268 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); | 1269 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); |
@@ -1277,7 +1278,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { | |||
1277 | dev->txer[vci].tx_present = 0; | 1278 | dev->txer[vci].tx_present = 0; |
1278 | while (command_do (dev, &cmd)) | 1279 | while (command_do (dev, &cmd)) |
1279 | schedule(); | 1280 | schedule(); |
1280 | up (&dev->vcc_sf); | 1281 | mutex_unlock(&dev->vcc_sf); |
1281 | } | 1282 | } |
1282 | 1283 | ||
1283 | // disable RXing | 1284 | // disable RXing |
@@ -1287,7 +1288,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { | |||
1287 | // this is (the?) one reason why we need the amb_vcc struct | 1288 | // this is (the?) one reason why we need the amb_vcc struct |
1288 | unsigned char pool = vcc->rx_info.pool; | 1289 | unsigned char pool = vcc->rx_info.pool; |
1289 | 1290 | ||
1290 | down (&dev->vcc_sf); | 1291 | mutex_lock(&dev->vcc_sf); |
1291 | if (dev->txer[vci].tx_present) { | 1292 | if (dev->txer[vci].tx_present) { |
1292 | // TXer still on the channel, just go to pool zero XXX not really needed | 1293 | // TXer still on the channel, just go to pool zero XXX not really needed |
1293 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_FLAGS); | 1294 | cmd.request = cpu_to_be32 (SRB_MODIFY_VC_FLAGS); |
@@ -1314,7 +1315,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { | |||
1314 | dev->rxq[pool].buffers_wanted = 0; | 1315 | dev->rxq[pool].buffers_wanted = 0; |
1315 | drain_rx_pool (dev, pool); | 1316 | drain_rx_pool (dev, pool); |
1316 | } | 1317 | } |
1317 | up (&dev->vcc_sf); | 1318 | mutex_unlock(&dev->vcc_sf); |
1318 | } | 1319 | } |
1319 | 1320 | ||
1320 | // free our structure | 1321 | // free our structure |
@@ -2188,7 +2189,7 @@ static void setup_dev(amb_dev *dev, struct pci_dev *pci_dev) | |||
2188 | 2189 | ||
2189 | // semaphore for txer/rxer modifications - we cannot use a | 2190 | // semaphore for txer/rxer modifications - we cannot use a |
2190 | // spinlock as the critical region needs to switch processes | 2191 | // spinlock as the critical region needs to switch processes |
2191 | init_MUTEX (&dev->vcc_sf); | 2192 | mutex_init(&dev->vcc_sf); |
2192 | // queue manipulation spinlocks; we want atomic reads and | 2193 | // queue manipulation spinlocks; we want atomic reads and |
2193 | // writes to the queue descriptors (handles IRQ and SMP) | 2194 | // writes to the queue descriptors (handles IRQ and SMP) |
2194 | // consider replacing "int pending" -> "atomic_t available" | 2195 | // consider replacing "int pending" -> "atomic_t available" |