mirror of https://gitee.com/openkylin/linux.git
svcrdma: DMA-sync the receive buffer in svc_rdma_recvfrom()
The Receive completion handler doesn't look at the contents of the Receive buffer. The DMA sync isn't terribly expensive but it's one less thing that needs to be done by the Receive completion handler, which is single-threaded (per svc_xprt). This helps scalability. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
43042b90ca
commit
dd2d055b27
|
@ -342,9 +342,6 @@ static void svc_rdma_wc_receive(struct ib_cq *cq, struct ib_wc *wc)
|
|||
|
||||
/* All wc fields are now known to be valid */
|
||||
ctxt->rc_byte_len = wc->byte_len;
|
||||
ib_dma_sync_single_for_cpu(rdma->sc_pd->device,
|
||||
ctxt->rc_recv_sge.addr,
|
||||
wc->byte_len, DMA_FROM_DEVICE);
|
||||
|
||||
spin_lock(&rdma->sc_rq_dto_lock);
|
||||
list_add_tail(&ctxt->rc_list, &rdma->sc_rq_dto_q);
|
||||
|
@ -851,6 +848,9 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
|
|||
spin_unlock(&rdma_xprt->sc_rq_dto_lock);
|
||||
percpu_counter_inc(&svcrdma_stat_recv);
|
||||
|
||||
ib_dma_sync_single_for_cpu(rdma_xprt->sc_pd->device,
|
||||
ctxt->rc_recv_sge.addr, ctxt->rc_byte_len,
|
||||
DMA_FROM_DEVICE);
|
||||
svc_rdma_build_arg_xdr(rqstp, ctxt);
|
||||
|
||||
/* Prevent svc_xprt_release from releasing pages in rq_pages
|
||||
|
|
Loading…
Reference in New Issue