Merge tag 'arm64-mmiowb' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull mmiowb removal from Will Deacon: "Remove Mysterious Macro Intended to Obscure Weird Behaviours (mmiowb()) Remove mmiowb() from the kernel memory barrier API and instead, for architectures that need it, hide the barrier inside spin_unlock() when MMIO has been performed inside the critical section. The only relatively recent changes have been addressing review comments on the documentation, which is in a much better shape thanks to the efforts of Ben and Ingo. I was initially planning to split this into two pull requests so that you could run the coccinelle script yourself, however it's been plain sailing in linux-next so I've just included the whole lot here to keep things simple" * tag 'arm64-mmiowb' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (23 commits) docs/memory-barriers.txt: Update I/O section to be clearer about CPU vs thread docs/memory-barriers.txt: Fix style, spacing and grammar in I/O section arch: Remove dummy mmiowb() definitions from arch code net/ethernet/silan/sc92031: Remove stale comment about mmiowb() i40iw: Redefine i40iw_mmiowb() to do nothing scsi/qla1280: Remove stale comment about mmiowb() drivers: Remove explicit invocations of mmiowb() drivers: Remove useless trailing comments from mmiowb() invocations Documentation: Kill all references to mmiowb() riscv/mmiowb: Hook up mmwiob() implementation to asm-generic code powerpc/mmiowb: Hook up mmwiob() implementation to asm-generic code ia64/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() mips/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() sh/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() m68k/io: Remove useless definition of mmiowb() nds32/io: Remove useless definition of mmiowb() x86/io: Remove useless definition of mmiowb() arm64/io: Remove useless definition of mmiowb() ARM/io: Remove useless definition of mmiowb() mmiowb: Hook up mmiowb helpers to spinlocks and generic I/O accessors ...
This commit is contained in:
@@ -837,7 +837,6 @@ ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf,
|
||||
|
||||
txq->link = &ds->ds_link;
|
||||
ath5k_hw_start_tx_dma(ah, txq->qnum);
|
||||
mmiowb();
|
||||
spin_unlock_bh(&txq->lock);
|
||||
|
||||
return 0;
|
||||
@@ -2174,7 +2173,6 @@ ath5k_beacon_config(struct ath5k_hw *ah)
|
||||
}
|
||||
|
||||
ath5k_hw_set_imr(ah, ah->imask);
|
||||
mmiowb();
|
||||
spin_unlock_bh(&ah->block);
|
||||
}
|
||||
|
||||
@@ -2779,7 +2777,6 @@ int ath5k_start(struct ieee80211_hw *hw)
|
||||
|
||||
ret = 0;
|
||||
done:
|
||||
mmiowb();
|
||||
mutex_unlock(&ah->lock);
|
||||
|
||||
set_bit(ATH_STAT_STARTED, ah->status);
|
||||
@@ -2839,7 +2836,6 @@ void ath5k_stop(struct ieee80211_hw *hw)
|
||||
"putting device to sleep\n");
|
||||
}
|
||||
|
||||
mmiowb();
|
||||
mutex_unlock(&ah->lock);
|
||||
|
||||
ath5k_stop_tasklets(ah);
|
||||
|
@@ -263,7 +263,6 @@ ath5k_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
|
||||
common->curaid = 0;
|
||||
ath5k_hw_set_bssid(ah);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
if (changes & BSS_CHANGED_BEACON_INT)
|
||||
@@ -528,7 +527,6 @@ ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
mmiowb();
|
||||
mutex_unlock(&ah->lock);
|
||||
return ret;
|
||||
}
|
||||
|
@@ -485,7 +485,6 @@ static void b43_ram_write(struct b43_wldev *dev, u16 offset, u32 val)
|
||||
val = swab32(val);
|
||||
|
||||
b43_write32(dev, B43_MMIO_RAM_CONTROL, offset);
|
||||
mmiowb();
|
||||
b43_write32(dev, B43_MMIO_RAM_DATA, val);
|
||||
}
|
||||
|
||||
@@ -656,9 +655,7 @@ static void b43_tsf_write_locked(struct b43_wldev *dev, u64 tsf)
|
||||
/* The hardware guarantees us an atomic write, if we
|
||||
* write the low register first. */
|
||||
b43_write32(dev, B43_MMIO_REV3PLUS_TSF_LOW, low);
|
||||
mmiowb();
|
||||
b43_write32(dev, B43_MMIO_REV3PLUS_TSF_HIGH, high);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
void b43_tsf_write(struct b43_wldev *dev, u64 tsf)
|
||||
@@ -1822,11 +1819,9 @@ static void b43_beacon_update_trigger_work(struct work_struct *work)
|
||||
if (b43_bus_host_is_sdio(dev->dev)) {
|
||||
/* wl->mutex is enough. */
|
||||
b43_do_beacon_update_trigger_work(dev);
|
||||
mmiowb();
|
||||
} else {
|
||||
spin_lock_irq(&wl->hardirq_lock);
|
||||
b43_do_beacon_update_trigger_work(dev);
|
||||
mmiowb();
|
||||
spin_unlock_irq(&wl->hardirq_lock);
|
||||
}
|
||||
}
|
||||
@@ -2078,7 +2073,6 @@ static irqreturn_t b43_interrupt_thread_handler(int irq, void *dev_id)
|
||||
|
||||
mutex_lock(&dev->wl->mutex);
|
||||
b43_do_interrupt_thread(dev);
|
||||
mmiowb();
|
||||
mutex_unlock(&dev->wl->mutex);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
@@ -2143,7 +2137,6 @@ static irqreturn_t b43_interrupt_handler(int irq, void *dev_id)
|
||||
|
||||
spin_lock(&dev->wl->hardirq_lock);
|
||||
ret = b43_do_interrupt(dev);
|
||||
mmiowb();
|
||||
spin_unlock(&dev->wl->hardirq_lock);
|
||||
|
||||
return ret;
|
||||
|
@@ -129,7 +129,6 @@ static ssize_t b43_attr_interfmode_store(struct device *dev,
|
||||
} else
|
||||
err = -ENOSYS;
|
||||
|
||||
mmiowb();
|
||||
mutex_unlock(&wldev->wl->mutex);
|
||||
|
||||
return err ? err : count;
|
||||
|
@@ -315,14 +315,12 @@ const u16 b43legacy_ilt_sigmasqr2[B43legacy_ILT_SIGMASQR_SIZE] = {
|
||||
void b43legacy_ilt_write(struct b43legacy_wldev *dev, u16 offset, u16 val)
|
||||
{
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_ILT_G_CTRL, offset);
|
||||
mmiowb();
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_ILT_G_DATA1, val);
|
||||
}
|
||||
|
||||
void b43legacy_ilt_write32(struct b43legacy_wldev *dev, u16 offset, u32 val)
|
||||
{
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_ILT_G_CTRL, offset);
|
||||
mmiowb();
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_ILT_G_DATA2,
|
||||
(val & 0xFFFF0000) >> 16);
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_ILT_G_DATA1,
|
||||
|
@@ -264,7 +264,6 @@ static void b43legacy_ram_write(struct b43legacy_wldev *dev, u16 offset,
|
||||
val = swab32(val);
|
||||
|
||||
b43legacy_write32(dev, B43legacy_MMIO_RAM_CONTROL, offset);
|
||||
mmiowb();
|
||||
b43legacy_write32(dev, B43legacy_MMIO_RAM_DATA, val);
|
||||
}
|
||||
|
||||
@@ -341,14 +340,11 @@ void b43legacy_shm_write32(struct b43legacy_wldev *dev,
|
||||
if (offset & 0x0003) {
|
||||
/* Unaligned access */
|
||||
b43legacy_shm_control_word(dev, routing, offset >> 2);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev,
|
||||
B43legacy_MMIO_SHM_DATA_UNALIGNED,
|
||||
(value >> 16) & 0xffff);
|
||||
mmiowb();
|
||||
b43legacy_shm_control_word(dev, routing,
|
||||
(offset >> 2) + 1);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_SHM_DATA,
|
||||
value & 0xffff);
|
||||
return;
|
||||
@@ -356,7 +352,6 @@ void b43legacy_shm_write32(struct b43legacy_wldev *dev,
|
||||
offset >>= 2;
|
||||
}
|
||||
b43legacy_shm_control_word(dev, routing, offset);
|
||||
mmiowb();
|
||||
b43legacy_write32(dev, B43legacy_MMIO_SHM_DATA, value);
|
||||
}
|
||||
|
||||
@@ -368,7 +363,6 @@ void b43legacy_shm_write16(struct b43legacy_wldev *dev, u16 routing, u16 offset,
|
||||
if (offset & 0x0003) {
|
||||
/* Unaligned access */
|
||||
b43legacy_shm_control_word(dev, routing, offset >> 2);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev,
|
||||
B43legacy_MMIO_SHM_DATA_UNALIGNED,
|
||||
value);
|
||||
@@ -377,7 +371,6 @@ void b43legacy_shm_write16(struct b43legacy_wldev *dev, u16 routing, u16 offset,
|
||||
offset >>= 2;
|
||||
}
|
||||
b43legacy_shm_control_word(dev, routing, offset);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_SHM_DATA, value);
|
||||
}
|
||||
|
||||
@@ -471,7 +464,6 @@ static void b43legacy_time_lock(struct b43legacy_wldev *dev)
|
||||
status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL);
|
||||
status |= B43legacy_MACCTL_TBTTHOLD;
|
||||
b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static void b43legacy_time_unlock(struct b43legacy_wldev *dev)
|
||||
@@ -494,10 +486,8 @@ static void b43legacy_tsf_write_locked(struct b43legacy_wldev *dev, u64 tsf)
|
||||
u32 hi = (tsf & 0xFFFFFFFF00000000ULL) >> 32;
|
||||
|
||||
b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_LOW, 0);
|
||||
mmiowb();
|
||||
b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_HIGH,
|
||||
hi);
|
||||
mmiowb();
|
||||
b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_LOW,
|
||||
lo);
|
||||
} else {
|
||||
@@ -507,13 +497,9 @@ static void b43legacy_tsf_write_locked(struct b43legacy_wldev *dev, u64 tsf)
|
||||
u16 v3 = (tsf & 0xFFFF000000000000ULL) >> 48;
|
||||
|
||||
b43legacy_write16(dev, B43legacy_MMIO_TSF_0, 0);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_TSF_3, v3);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_TSF_2, v2);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_TSF_1, v1);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_TSF_0, v0);
|
||||
}
|
||||
}
|
||||
@@ -1250,7 +1236,6 @@ static void b43legacy_beacon_update_trigger_work(struct work_struct *work)
|
||||
/* The handler might have updated the IRQ mask. */
|
||||
b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK,
|
||||
dev->irq_mask);
|
||||
mmiowb();
|
||||
spin_unlock_irq(&wl->irq_lock);
|
||||
}
|
||||
mutex_unlock(&wl->mutex);
|
||||
@@ -1346,7 +1331,6 @@ static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev)
|
||||
dma_reason[2], dma_reason[3],
|
||||
dma_reason[4], dma_reason[5]);
|
||||
b43legacy_controller_restart(dev, "DMA error");
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&dev->wl->irq_lock, flags);
|
||||
return;
|
||||
}
|
||||
@@ -1396,7 +1380,6 @@ static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev)
|
||||
handle_irq_transmit_status(dev);
|
||||
|
||||
b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask);
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&dev->wl->irq_lock, flags);
|
||||
}
|
||||
|
||||
@@ -1488,7 +1471,6 @@ static irqreturn_t b43legacy_interrupt_handler(int irq, void *dev_id)
|
||||
dev->irq_reason = reason;
|
||||
tasklet_schedule(&dev->isr_tasklet);
|
||||
out:
|
||||
mmiowb();
|
||||
spin_unlock(&dev->wl->irq_lock);
|
||||
|
||||
return ret;
|
||||
@@ -2781,7 +2763,6 @@ static int b43legacy_op_dev_config(struct ieee80211_hw *hw,
|
||||
|
||||
spin_lock_irqsave(&wl->irq_lock, flags);
|
||||
b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask);
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&wl->irq_lock, flags);
|
||||
out_unlock_mutex:
|
||||
mutex_unlock(&wl->mutex);
|
||||
@@ -2900,7 +2881,6 @@ static void b43legacy_op_bss_info_changed(struct ieee80211_hw *hw,
|
||||
spin_lock_irqsave(&wl->irq_lock, flags);
|
||||
b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask);
|
||||
/* XXX: why? */
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&wl->irq_lock, flags);
|
||||
out_unlock_mutex:
|
||||
mutex_unlock(&wl->mutex);
|
||||
|
@@ -134,7 +134,6 @@ u16 b43legacy_phy_read(struct b43legacy_wldev *dev, u16 offset)
|
||||
void b43legacy_phy_write(struct b43legacy_wldev *dev, u16 offset, u16 val)
|
||||
{
|
||||
b43legacy_write16(dev, B43legacy_MMIO_PHY_CONTROL, offset);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_PHY_DATA, val);
|
||||
}
|
||||
|
||||
|
@@ -92,7 +92,6 @@ void b43legacy_pio_write(struct b43legacy_pioqueue *queue,
|
||||
u16 offset, u16 value)
|
||||
{
|
||||
b43legacy_write16(queue->dev, queue->mmio_base + offset, value);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
|
||||
|
@@ -95,7 +95,6 @@ void b43legacy_radio_lock(struct b43legacy_wldev *dev)
|
||||
B43legacy_WARN_ON(status & B43legacy_MACCTL_RADIOLOCK);
|
||||
status |= B43legacy_MACCTL_RADIOLOCK;
|
||||
b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status);
|
||||
mmiowb();
|
||||
udelay(10);
|
||||
}
|
||||
|
||||
@@ -108,7 +107,6 @@ void b43legacy_radio_unlock(struct b43legacy_wldev *dev)
|
||||
B43legacy_WARN_ON(!(status & B43legacy_MACCTL_RADIOLOCK));
|
||||
status &= ~B43legacy_MACCTL_RADIOLOCK;
|
||||
b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
u16 b43legacy_radio_read16(struct b43legacy_wldev *dev, u16 offset)
|
||||
@@ -141,7 +139,6 @@ u16 b43legacy_radio_read16(struct b43legacy_wldev *dev, u16 offset)
|
||||
void b43legacy_radio_write16(struct b43legacy_wldev *dev, u16 offset, u16 val)
|
||||
{
|
||||
b43legacy_write16(dev, B43legacy_MMIO_RADIO_CONTROL, offset);
|
||||
mmiowb();
|
||||
b43legacy_write16(dev, B43legacy_MMIO_RADIO_DATA_LOW, val);
|
||||
}
|
||||
|
||||
@@ -333,7 +330,6 @@ u8 b43legacy_radio_aci_scan(struct b43legacy_wldev *dev)
|
||||
void b43legacy_nrssi_hw_write(struct b43legacy_wldev *dev, u16 offset, s16 val)
|
||||
{
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_NRSSILT_CTRL, offset);
|
||||
mmiowb();
|
||||
b43legacy_phy_write(dev, B43legacy_PHY_NRSSILT_DATA, (u16)val);
|
||||
}
|
||||
|
||||
|
@@ -143,7 +143,6 @@ static ssize_t b43legacy_attr_interfmode_store(struct device *dev,
|
||||
if (err)
|
||||
b43legacyerr(wldev->wl, "Interference Mitigation not "
|
||||
"supported by device\n");
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&wldev->wl->irq_lock, flags);
|
||||
mutex_unlock(&wldev->wl->mutex);
|
||||
|
||||
|
@@ -2030,13 +2030,6 @@ static inline void
|
||||
_il_release_nic_access(struct il_priv *il)
|
||||
{
|
||||
_il_clear_bit(il, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
|
||||
/*
|
||||
* In above we are reading CSR_GP_CNTRL register, what will flush any
|
||||
* previous writes, but still want write, which clear MAC_ACCESS_REQ
|
||||
* bit, be performed on PCI bus before any other writes scheduled on
|
||||
* different CPUs (after we drop reg_lock).
|
||||
*/
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static inline u32
|
||||
|
@@ -2067,7 +2067,6 @@ static void iwl_trans_pcie_release_nic_access(struct iwl_trans *trans,
|
||||
* MAC_ACCESS_REQ bit to be performed before any other writes
|
||||
* scheduled on different CPUs (after we drop reg_lock).
|
||||
*/
|
||||
mmiowb();
|
||||
out:
|
||||
spin_unlock_irqrestore(&trans_pcie->reg_lock, *flags);
|
||||
}
|
||||
|
Reference in New Issue
Block a user