Looks good! Acked-By: Devesh Sharma <devesh.sharma@xxxxxxxxxxxx> On Fri, Feb 17, 2017 at 12:53 AM, Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx> wrote: > Move the barriers closer to the actual action being protected eg > put udma_to_device_barrier in ocrdma_ring_*. > > Add a wc_wmb() barrier before starting WC writes for consistency > with other drivers. > > Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx> > --- > providers/ocrdma/ocrdma_verbs.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/providers/ocrdma/ocrdma_verbs.c b/providers/ocrdma/ocrdma_verbs.c > index 7fc841a194127d..3725d63a9b88f3 100644 > --- a/providers/ocrdma/ocrdma_verbs.c > +++ b/providers/ocrdma/ocrdma_verbs.c > @@ -1111,18 +1111,24 @@ int ocrdma_destroy_qp(struct ibv_qp *ibqp) > static void ocrdma_ring_sq_db(struct ocrdma_qp *qp) > { > uint32_t db_val = ocrdma_cpu_to_le((qp->sq.dbid | (1 << 16))); > + > + udma_to_device_barrier(); > *(uint32_t *) (((uint8_t *) qp->db_sq_va)) = db_val; > } > > static void ocrdma_ring_rq_db(struct ocrdma_qp *qp) > { > uint32_t db_val = ocrdma_cpu_to_le((qp->rq.dbid | (1 << qp->db_shift))); > + > + udma_to_device_barrier(); > *(uint32_t *) ((uint8_t *) qp->db_rq_va) = db_val; > } > > static void ocrdma_ring_srq_db(struct ocrdma_srq *srq) > { > uint32_t db_val = ocrdma_cpu_to_le(srq->rq.dbid | (1 << srq->db_shift)); > + > + udma_to_device_barrier(); > *(uint32_t *) (srq->db_va) = db_val; > } > > @@ -1141,6 +1147,7 @@ static void ocrdma_ring_cq_db(struct ocrdma_cq *cq, uint32_t armed, > val |= (1 << OCRDMA_DB_CQ_SOLICIT_SHIFT); > val |= (num_cqe << OCRDMA_DB_CQ_NUM_POPPED_SHIFT); > > + udma_to_device_barrier(); > *(uint32_t *) ((uint8_t *) (cq->db_va) + OCRDMA_DB_CQ_OFFSET) = > ocrdma_cpu_to_le(val); > } > @@ -1322,6 +1329,9 @@ static void ocrdma_build_dpp_wqe(void *va, struct ocrdma_hdr_wqe *wqe, > { > uint32_t pyld_len = (wqe->cw >> OCRDMA_WQE_SIZE_SHIFT) * 2; > uint32_t i = 0; > + > + mmio_wc_start(); > + > /* convert WQE header to LE format */ > for (; i < hdr_len; i++) > *((uint32_t *) va + i) = > @@ -1329,7 +1339,8 @@ static void ocrdma_build_dpp_wqe(void *va, struct ocrdma_hdr_wqe *wqe, > /* Convertion of data is done in HW */ > for (; i < pyld_len; i++) > *((uint32_t *) va + i) = (*((uint32_t *) wqe + i)); > - wc_wmb(); > + > + mmio_flush_writes(); > } > > static void ocrdma_post_dpp_wqe(struct ocrdma_qp *qp, > @@ -1439,7 +1450,6 @@ int ocrdma_post_send(struct ibv_qp *ib_qp, struct ibv_send_wr *wr, > OCRDMA_WQE_SIZE_MASK) * > OCRDMA_WQE_STRIDE); > > - wmb(); > ocrdma_ring_sq_db(qp); > > /* update pointer, counter for next wr */ > @@ -1501,7 +1511,6 @@ int ocrdma_post_recv(struct ibv_qp *ibqp, struct ibv_recv_wr *wr, > rqe = ocrdma_hwq_head(&qp->rq); > ocrdma_build_rqe(rqe, wr, 0); > qp->rqe_wr_id_tbl[qp->rq.head] = wr->wr_id; > - wmb(); > ocrdma_ring_rq_db(qp); > > /* update pointer, counter for next wr */ > @@ -2082,7 +2091,6 @@ int ocrdma_post_srq_recv(struct ibv_srq *ibsrq, struct ibv_recv_wr *wr, > ocrdma_build_rqe(rqe, wr, tag); > srq->rqe_wr_id_tbl[tag] = wr->wr_id; > > - wmb(); > ocrdma_ring_srq_db(srq); > > /* update pointer, counter for next wr */ > -- > 2.7.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html