summaryrefslogtreecommitdiff
path: root/drivers/dahdi/wct4xxp
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2009-01-26 19:44:36 +0000
committerShaun Ruffell <sruffell@digium.com>2009-01-26 19:44:36 +0000
commitb19785437da38b006e18c54cfe03e3930f0ea19c (patch)
treea20affbdb276a90ffdba354caf4c65130589553a /drivers/dahdi/wct4xxp
parentefc6334542ec679ce5c169b3fd0e3a6532ff53f9 (diff)
Manipulate the REGISTERED flag with atomic bitops now since the bit is set
outside the protection of any locks. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@5819 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/wct4xxp')
-rw-r--r--drivers/dahdi/wct4xxp/base.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/dahdi/wct4xxp/base.c b/drivers/dahdi/wct4xxp/base.c
index 83dd28d..19f3d00 100644
--- a/drivers/dahdi/wct4xxp/base.c
+++ b/drivers/dahdi/wct4xxp/base.c
@@ -3441,7 +3441,7 @@ static int __devinit t4_launch(struct t4 *wc)
{
int x;
unsigned long flags;
- if (wc->tspans[0]->span.flags & DAHDI_FLAG_REGISTERED)
+ if (test_bit(DAHDI_FLAGBIT_REGISTERED, &wc->tspans[0]->span.flags))
return 0;
printk(KERN_INFO "TE%dXXP: Launching card: %d\n", wc->numspans, wc->order);
@@ -3726,6 +3726,8 @@ static int t4_hardware_stop(struct t4 *wc)
static void __devexit t4_remove_one(struct pci_dev *pdev)
{
struct t4 *wc = pci_get_drvdata(pdev);
+ struct dahdi_span *span;
+ int i;
if (!wc) {
return;
@@ -3739,15 +3741,11 @@ static void __devexit t4_remove_one(struct pci_dev *pdev)
release_vpm450m(wc->vpm450m);
wc->vpm450m = NULL;
/* Unregister spans */
- if (wc->tspans[0]->span.flags & DAHDI_FLAG_REGISTERED)
- dahdi_unregister(&wc->tspans[0]->span);
- if (wc->tspans[1]->span.flags & DAHDI_FLAG_REGISTERED)
- dahdi_unregister(&wc->tspans[1]->span);
- if (wc->numspans == 4) {
- if (wc->tspans[2]->span.flags & DAHDI_FLAG_REGISTERED)
- dahdi_unregister(&wc->tspans[2]->span);
- if (wc->tspans[3]->span.flags & DAHDI_FLAG_REGISTERED)
- dahdi_unregister(&wc->tspans[3]->span);
+
+ for (i = 0; i < wc->numspans; ++i) {
+ span = &wc->tspans[i]->span;
+ if (test_bit(DAHDI_FLAGBIT_REGISTERED, &span->flags))
+ dahdi_unregister(span);
}
#ifdef ENABLE_WORKQUEUES
if (wc->workq) {