diff options
author | Shaun Ruffell <sruffell@digium.com> | 2009-01-26 19:44:36 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2009-01-26 19:44:36 +0000 |
commit | b19785437da38b006e18c54cfe03e3930f0ea19c (patch) | |
tree | a20affbdb276a90ffdba354caf4c65130589553a /drivers/dahdi/wct4xxp/base.c | |
parent | efc6334542ec679ce5c169b3fd0e3a6532ff53f9 (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/base.c')
-rw-r--r-- | drivers/dahdi/wct4xxp/base.c | 18 |
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) { |