use mutex instead of binary semaphore in FORE Systems 200E-series driver for ATM
PATCH 1/1 use mutex instead of binary semaphore in FORE Systems 200E-series driver for ATM
use mutex instead of binary semaphore in FORE Systems 200E-series driver for ATM
Signed-off-by Matthias Kaehlcke <[email protected]>
---
drivers/atm/fore200e.c +9 -9
@@ -1502,9 +1502,9 @@ fore200e_open(struct atm_vcc *vcc)/* pseudo-CBR bandwidth requested? */ if ((vcc->qos.txtp.traffic_class ==ATM_CBR ) && (vcc->qos.txtp.max_pcr >0 )) { -down (&fore200e->rate_sf); +mutex_lock (&fore200e->rate_mtx);if (fore200e->available_cell_rate < vcc->qos.txtp.max_pcr) { -up (&fore200e->rate_sf); +mutex_unlock (&fore200e->rate_mtx);kfree (fore200e_vcc); vc_map->vcc =NULL ;
@@ -1513,7 +1513,7 @@ fore200e_open(struct atm_vcc *vcc)/* reserve bandwidth */ fore200e->available_cell_rate -= vcc->qos.txtp.max_pcr; -up (&fore200e->rate_sf); +mutex_unlock (&fore200e->rate_mtx); } vcc->itf = vcc->dev->number;
@@ -1599,9 +1599,9 @@ fore200e_close(struct atm_vcc* vcc)/* release reserved bandwidth, if any */ if ((vcc->qos.txtp.traffic_class ==ATM_CBR ) && (vcc->qos.txtp.max_pcr >0 )) { -down (&fore200e->rate_sf); +mutex_lock (&fore200e->rate_mtx); fore200e->available_cell_rate += vcc->qos.txtp.max_pcr; -up (&fore200e->rate_sf); +mutex_unlock (&fore200e->rate_mtx);clear_bit (ATM_VF_HASQOS , &vcc->flags); }
@@ -2064,16 +2064,16 @@ fore200e_change_qos(struct atm_vcc* vcc,struct atm_qos* qos, int flags)if ((qos->txtp.traffic_class ==ATM_CBR ) && (qos->txtp.max_pcr >0 )) { -down (&fore200e->rate_sf); +mutex_lock (&fore200e->rate_mtx);if (fore200e->available_cell_rate + vcc->qos.txtp.max_pcr < qos->txtp.max_pcr) { -up (&fore200e->rate_sf); +mutex_unlock (&fore200e->rate_mtx);return -EAGAIN ; } fore200e->available_cell_rate += vcc->qos.txtp.max_pcr; fore200e->available_cell_rate -= qos->txtp.max_pcr; -up (&fore200e->rate_sf); +mutex_unlock (&fore200e->rate_mtx);memcpy (&vcc->qos, qos,sizeof (struct atm_qos ));
@@ -2459,7 +2459,7 @@ fore200e_initialize(struct fore200e* fore200e)DPRINTK (2 ,"device %s being initialized\n" , fore200e->name); -init_MUTEX (&fore200e->rate_sf); +mutex_init (&fore200e->rate_mtx);spin_lock_init (&fore200e->q_lock); cpq = fore200e->cp_queues = fore200e->virt_base +FORE200E_CP_QUEUES_OFFSET ;
drivers/atm/fore200e.h +1 -1
@@ -869,7 +869,7 @@ typedef struct fore200e {struct stats * stats;/* last snapshot of the stats */ -struct semaphore rate_sf;/* protects rate reservation ops */ +struct mutex rate_mtx;/* protects rate reservation ops */ spinlock_t q_lock;/* protects queue ops */ #ifdef FORE200E_USE_TASKLET struct tasklet_struct tx_tasklet;/* performs tx interrupt work */
Signature · 11 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
You can chain me, you can torture me, you can even
destroy this body, but you will never imprison my mind
(Mahatma Gandhi)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-