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:
@@ -8365,7 +8365,6 @@ static inline void clear_recv_intr(struct hfi1_ctxtdata *rcd)
|
||||
struct hfi1_devdata *dd = rcd->dd;
|
||||
u32 addr = CCE_INT_CLEAR + (8 * rcd->ireg);
|
||||
|
||||
mmiowb(); /* make sure everything before is written */
|
||||
write_csr(dd, addr, rcd->imask);
|
||||
/* force the above write on the chip and get a value back */
|
||||
(void)read_csr(dd, addr);
|
||||
@@ -11803,12 +11802,10 @@ void update_usrhead(struct hfi1_ctxtdata *rcd, u32 hd, u32 updegr, u32 egrhd,
|
||||
<< RCV_EGR_INDEX_HEAD_HEAD_SHIFT;
|
||||
write_uctxt_csr(dd, ctxt, RCV_EGR_INDEX_HEAD, reg);
|
||||
}
|
||||
mmiowb();
|
||||
reg = ((u64)rcv_intr_count << RCV_HDR_HEAD_COUNTER_SHIFT) |
|
||||
(((u64)hd & RCV_HDR_HEAD_HEAD_MASK)
|
||||
<< RCV_HDR_HEAD_HEAD_SHIFT);
|
||||
write_uctxt_csr(dd, ctxt, RCV_HDR_HEAD, reg);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
u32 hdrqempty(struct hfi1_ctxtdata *rcd)
|
||||
|
@@ -1578,7 +1578,6 @@ void hfi1_sc_wantpiobuf_intr(struct send_context *sc, u32 needint)
|
||||
sc_del_credit_return_intr(sc);
|
||||
trace_hfi1_wantpiointr(sc, needint, sc->credit_ctrl);
|
||||
if (needint) {
|
||||
mmiowb();
|
||||
sc_return_credits(sc);
|
||||
}
|
||||
}
|
||||
|
@@ -1750,8 +1750,6 @@ static int hns_roce_v1_post_mbox(struct hns_roce_dev *hr_dev, u64 in_param,
|
||||
|
||||
writel(val, hcr + 5);
|
||||
|
||||
mmiowb();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -211,7 +211,7 @@ enum i40iw_status_code i40iw_hw_manage_vf_pble_bp(struct i40iw_device *iwdev,
|
||||
struct i40iw_sc_vsi;
|
||||
void i40iw_hw_stats_start_timer(struct i40iw_sc_vsi *vsi);
|
||||
void i40iw_hw_stats_stop_timer(struct i40iw_sc_vsi *vsi);
|
||||
#define i40iw_mmiowb() mmiowb()
|
||||
#define i40iw_mmiowb() do { } while (0)
|
||||
void i40iw_wr32(struct i40iw_hw *hw, u32 reg, u32 value);
|
||||
u32 i40iw_rd32(struct i40iw_hw *hw, u32 reg);
|
||||
#endif /* _I40IW_OSDEP_H_ */
|
||||
|
@@ -3744,12 +3744,6 @@ out:
|
||||
writel_relaxed(qp->doorbell_qpn,
|
||||
to_mdev(ibqp->device)->uar_map + MLX4_SEND_DOORBELL);
|
||||
|
||||
/*
|
||||
* Make sure doorbells don't leak out of SQ spinlock
|
||||
* and reach the HCA out of order.
|
||||
*/
|
||||
mmiowb();
|
||||
|
||||
stamp_send_wqe(qp, ind + qp->sq_spare_wqes - 1);
|
||||
|
||||
qp->sq_next_wqe = ind;
|
||||
|
@@ -5126,7 +5126,6 @@ out:
|
||||
/* Make sure doorbells don't leak out of SQ spinlock
|
||||
* and reach the HCA out of order.
|
||||
*/
|
||||
mmiowb();
|
||||
bf->offset ^= bf->buf_size;
|
||||
}
|
||||
|
||||
|
@@ -292,12 +292,6 @@ static int mthca_cmd_post(struct mthca_dev *dev,
|
||||
err = mthca_cmd_post_hcr(dev, in_param, out_param, in_modifier,
|
||||
op_modifier, op, token, event);
|
||||
|
||||
/*
|
||||
* Make sure that our HCR writes don't get mixed in with
|
||||
* writes from another CPU starting a FW command.
|
||||
*/
|
||||
mmiowb();
|
||||
|
||||
mutex_unlock(&dev->cmd.hcr_mutex);
|
||||
return err;
|
||||
}
|
||||
|
@@ -211,11 +211,6 @@ static inline void update_cons_index(struct mthca_dev *dev, struct mthca_cq *cq,
|
||||
mthca_write64(MTHCA_TAVOR_CQ_DB_INC_CI | cq->cqn, incr - 1,
|
||||
dev->kar + MTHCA_CQ_DOORBELL,
|
||||
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
||||
/*
|
||||
* Make sure doorbells don't leak out of CQ spinlock
|
||||
* and reach the HCA out of order:
|
||||
*/
|
||||
mmiowb();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1809,11 +1809,6 @@ out:
|
||||
(qp->qpn << 8) | size0,
|
||||
dev->kar + MTHCA_SEND_DOORBELL,
|
||||
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
||||
/*
|
||||
* Make sure doorbells don't leak out of SQ spinlock
|
||||
* and reach the HCA out of order:
|
||||
*/
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
qp->sq.next_ind = ind;
|
||||
@@ -1924,12 +1919,6 @@ out:
|
||||
qp->rq.next_ind = ind;
|
||||
qp->rq.head += nreq;
|
||||
|
||||
/*
|
||||
* Make sure doorbells don't leak out of RQ spinlock and reach
|
||||
* the HCA out of order:
|
||||
*/
|
||||
mmiowb();
|
||||
|
||||
spin_unlock_irqrestore(&qp->rq.lock, flags);
|
||||
return err;
|
||||
}
|
||||
@@ -2164,12 +2153,6 @@ out:
|
||||
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure doorbells don't leak out of SQ spinlock and reach
|
||||
* the HCA out of order:
|
||||
*/
|
||||
mmiowb();
|
||||
|
||||
spin_unlock_irqrestore(&qp->sq.lock, flags);
|
||||
return err;
|
||||
}
|
||||
|
@@ -570,12 +570,6 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr,
|
||||
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure doorbells don't leak out of SRQ spinlock and
|
||||
* reach the HCA out of order:
|
||||
*/
|
||||
mmiowb();
|
||||
|
||||
spin_unlock_irqrestore(&srq->lock, flags);
|
||||
return err;
|
||||
}
|
||||
|
@@ -773,9 +773,6 @@ static void doorbell_cq(struct qedr_cq *cq, u32 cons, u8 flags)
|
||||
cq->db.data.agg_flags = flags;
|
||||
cq->db.data.value = cpu_to_le32(cons);
|
||||
writeq(cq->db.raw, cq->db_addr);
|
||||
|
||||
/* Make sure write would stick */
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
int qedr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
|
||||
@@ -2084,8 +2081,6 @@ static int qedr_update_qp_state(struct qedr_dev *dev,
|
||||
|
||||
if (rdma_protocol_roce(&dev->ibdev, 1)) {
|
||||
writel(qp->rq.db_data.raw, qp->rq.db);
|
||||
/* Make sure write takes effect */
|
||||
mmiowb();
|
||||
}
|
||||
break;
|
||||
case QED_ROCE_QP_STATE_ERR:
|
||||
@@ -3502,9 +3497,6 @@ int qedr_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
|
||||
smp_wmb();
|
||||
writel(qp->sq.db_data.raw, qp->sq.db);
|
||||
|
||||
/* Make sure write sticks */
|
||||
mmiowb();
|
||||
|
||||
spin_unlock_irqrestore(&qp->q_lock, flags);
|
||||
|
||||
return rc;
|
||||
@@ -3695,12 +3687,8 @@ int qedr_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
|
||||
|
||||
writel(qp->rq.db_data.raw, qp->rq.db);
|
||||
|
||||
/* Make sure write sticks */
|
||||
mmiowb();
|
||||
|
||||
if (rdma_protocol_iwarp(&dev->ibdev, 1)) {
|
||||
writel(qp->rq.iwarp_db2_data.raw, qp->rq.iwarp_db2);
|
||||
mmiowb(); /* for second doorbell */
|
||||
}
|
||||
|
||||
wr = wr->next;
|
||||
|
@@ -1884,7 +1884,6 @@ static void qib_6120_put_tid(struct qib_devdata *dd, u64 __iomem *tidptr,
|
||||
qib_write_kreg(dd, kr_scratch, 0xfeeddeaf);
|
||||
writel(pa, tidp32);
|
||||
qib_write_kreg(dd, kr_scratch, 0xdeadbeef);
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(tidlockp, flags);
|
||||
}
|
||||
|
||||
@@ -1928,7 +1927,6 @@ static void qib_6120_put_tid_2(struct qib_devdata *dd, u64 __iomem *tidptr,
|
||||
pa |= 2 << 29;
|
||||
}
|
||||
writel(pa, tidp32);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
|
||||
@@ -2053,9 +2051,7 @@ static void qib_update_6120_usrhead(struct qib_ctxtdata *rcd, u64 hd,
|
||||
{
|
||||
if (updegr)
|
||||
qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
|
||||
mmiowb();
|
||||
qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static u32 qib_6120_hdrqempty(struct qib_ctxtdata *rcd)
|
||||
|
@@ -2175,7 +2175,6 @@ static void qib_7220_put_tid(struct qib_devdata *dd, u64 __iomem *tidptr,
|
||||
pa = chippa;
|
||||
}
|
||||
writeq(pa, tidptr);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2704,9 +2703,7 @@ static void qib_update_7220_usrhead(struct qib_ctxtdata *rcd, u64 hd,
|
||||
{
|
||||
if (updegr)
|
||||
qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
|
||||
mmiowb();
|
||||
qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static u32 qib_7220_hdrqempty(struct qib_ctxtdata *rcd)
|
||||
|
@@ -3793,7 +3793,6 @@ static void qib_7322_put_tid(struct qib_devdata *dd, u64 __iomem *tidptr,
|
||||
pa = chippa;
|
||||
}
|
||||
writeq(pa, tidptr);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4440,10 +4439,8 @@ static void qib_update_7322_usrhead(struct qib_ctxtdata *rcd, u64 hd,
|
||||
adjust_rcv_timeout(rcd, npkts);
|
||||
if (updegr)
|
||||
qib_write_ureg(rcd->dd, ur_rcvegrindexhead, egrhd, rcd->ctxt);
|
||||
mmiowb();
|
||||
qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
|
||||
qib_write_ureg(rcd->dd, ur_rcvhdrhead, hd, rcd->ctxt);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static u32 qib_7322_hdrqempty(struct qib_ctxtdata *rcd)
|
||||
|
@@ -1068,7 +1068,6 @@ static int qib_sd_setvals(struct qib_devdata *dd)
|
||||
for (idx = 0; idx < NUM_DDS_REGS; ++idx) {
|
||||
data = ((dds_reg_map & 0xF) << 4) | TX_FAST_ELT;
|
||||
writeq(data, iaddr + idx);
|
||||
mmiowb();
|
||||
qib_read_kreg32(dd, kr_scratch);
|
||||
dds_reg_map >>= 4;
|
||||
for (midx = 0; midx < DDS_ROWS; ++midx) {
|
||||
@@ -1076,7 +1075,6 @@ static int qib_sd_setvals(struct qib_devdata *dd)
|
||||
|
||||
data = dds_init_vals[midx].reg_vals[idx];
|
||||
writeq(data, daddr);
|
||||
mmiowb();
|
||||
qib_read_kreg32(dd, kr_scratch);
|
||||
} /* End inner for (vals for this reg, each row) */
|
||||
} /* end outer for (regs to be stored) */
|
||||
@@ -1098,13 +1096,11 @@ static int qib_sd_setvals(struct qib_devdata *dd)
|
||||
didx = idx + min_idx;
|
||||
/* Store the next RXEQ register address */
|
||||
writeq(rxeq_init_vals[idx].rdesc, iaddr + didx);
|
||||
mmiowb();
|
||||
qib_read_kreg32(dd, kr_scratch);
|
||||
/* Iterate through RXEQ values */
|
||||
for (vidx = 0; vidx < 4; vidx++) {
|
||||
data = rxeq_init_vals[idx].rdata[vidx];
|
||||
writeq(data, taddr + (vidx << 6) + idx);
|
||||
mmiowb();
|
||||
qib_read_kreg32(dd, kr_scratch);
|
||||
}
|
||||
} /* end outer for (Reg-writes for RXEQ) */
|
||||
|
Reference in New Issue
Block a user