diff --git a/drivers/dahdi/wcaxx-base.c b/drivers/dahdi/wcaxx-base.c index 2d2904b..3d3329f 100644 --- a/drivers/dahdi/wcaxx-base.c +++ b/drivers/dahdi/wcaxx-base.c @@ -3823,7 +3823,7 @@ static void wcaxx_back_out_gracefully(struct wcaxx *wc) unsigned long flags; clear_bit(INITIALIZED, &wc->bit_flags); - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); /* Make sure we're not on the card list anymore. */ mutex_lock(&card_list_lock); diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index 0da767f..2fe74bc 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -2110,7 +2110,7 @@ static int t1xxp_set_linemode(struct dahdi_span *span, enum spantypes linemode) * them. */ clear_bit(INITIALIZED, &wc->bit_flags); synchronize_irq(wc->vb.pdev->irq); - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); del_timer_sync(&wc->timer); flush_workqueue(wc->wq); @@ -3076,7 +3076,7 @@ static void __devexit te12xp_remove_one(struct pci_dev *pdev) remove_sysfs_files(wc); clear_bit(INITIALIZED, &wc->bit_flags); - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); del_timer_sync(&wc->timer); flush_workqueue(wc->wq); diff --git a/drivers/dahdi/wcte13xp-base.c b/drivers/dahdi/wcte13xp-base.c index c061975..1917583 100644 --- a/drivers/dahdi/wcte13xp-base.c +++ b/drivers/dahdi/wcte13xp-base.c @@ -1849,7 +1849,7 @@ static int t13x_set_linemode(struct dahdi_span *span, enum spantypes linemode) clear_bit(INITIALIZED, &wc->bit_flags); disable_irq(wc->xb.pdev->irq); - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); del_timer_sync(&wc->timer); flush_workqueue(wc->wq); @@ -2725,7 +2725,7 @@ static void __devexit te13xp_remove_one(struct pci_dev *pdev) return; clear_bit(INITIALIZED, &wc->bit_flags); - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); /* Quiesce DMA engine interrupts */ wcxb_stop(&wc->xb); diff --git a/drivers/dahdi/wcte43x-base.c b/drivers/dahdi/wcte43x-base.c index dee0574..a718393 100644 --- a/drivers/dahdi/wcte43x-base.c +++ b/drivers/dahdi/wcte43x-base.c @@ -3581,7 +3581,7 @@ static void __devexit t43x_remove_one(struct pci_dev *pdev) return; wc->not_ready = 1; - smp_mb__after_clear_bit(); + smp_mb__after_atomic(); /* Stop everything */ wcxb_stop(&wc->xb); diff --git a/include/dahdi/kernel.h b/include/dahdi/kernel.h index 831ea5f..365801d 100644 --- a/include/dahdi/kernel.h +++ b/include/dahdi/kernel.h @@ -1408,6 +1408,17 @@ static inline short dahdi_txtone_nextsample(struct dahdi_chan *ss) /*! Maximum audio mask */ #define DAHDI_FORMAT_AUDIO_MASK ((1 << 16) - 1) +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 16, 0) + +/* DAHDI only was using the xxx_clear_bit variants. */ +#ifndef smp_mb__before_atomic +#define smp_mb__before_atomic smp_mb__before_clear_bit +#endif + +#ifndef smp_mb__after_atomic +#define smp_mb__after_atomic smp_mb__after_clear_bit +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) #ifdef RHEL_RELEASE_VERSION #if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(6, 5) @@ -1523,6 +1534,7 @@ static inline int strcasecmp(const char *s1, const char *s2) #endif /* 2.6.27 */ #endif /* 2.6.31 */ #endif /* 3.10.0 */ +#endif /* 3.16.0 */ #ifndef DEFINE_SPINLOCK #define DEFINE_SPINLOCK(x) spinlock_t x = SPIN_LOCK_UNLOCKED