Patch "nvmet-rdma: Fix missing dma sync to nvme data structures" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
nvmet-rdma: Fix missing dma sync to nvme data structures
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nvmet-rdma-fix-missing-dma-sync-to-nvme-data-structures.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 15 15:00:53 CEST 2017
From: Parav Pandit <[email protected]>
Date: Thu, 19 Jan 2017 09:55:08 -0600
Subject: nvmet-rdma: Fix missing dma sync to nvme data structures
From: Parav Pandit <[email protected]>
[ Upstream commit 748ff8408f8e208f279ba221e5c12612fbb4dddb ]
This patch performs dma sync operations on nvme_command and nvme_completion.
nvme_command is synced
(a) on receiving of the recv queue completion for cpu access.
(b) before posting recv wqe back to rdma adapter for device access.
nvme_completion is synced
(a) on receiving of the recv queue completion of associated nvme_command for cpu access.
(b) before posting send wqe to rdma adapter for device access.
This patch is generated for git://git.infradead.org/nvme-fabrics.git
Branch: nvmf-4.10
--- drivers/nvme/target/rdma.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
drivers/nvme/target/rdma.c +17 -0
@@ -438,6 +438,10 @@ static int nvmet_rdma_post_recv(struct n {struct ib_recv_wr *bad_wr; +ib_dma_sync_single_for_device (ndev->device, + cmd->sge[0 ].addr, cmd->sge[0 ].length, +DMA_FROM_DEVICE ); +if (ndev->srq)return ib_post_srq_recv (ndev->srq, &cmd->wr, &bad_wr);return ib_post_recv (cmd->queue->cm_id->qp, &cmd->wr, &bad_wr);
@@ -538,6 +542,11 @@ static void nvmet_rdma_queue_response(st first_wr = &rsp->send_wr;nvmet_rdma_post_recv (rsp->queue->dev, rsp->cmd); + +ib_dma_sync_single_for_device (rsp->queue->dev->device, + rsp->send_sge.addr, rsp->send_sge.length, +DMA_TO_DEVICE ); +if (ib_post_send (cm_id->qp, first_wr, &bad_wr)) {pr_err ("sending cmd response failed\n" );nvmet_rdma_release_rsp (rsp);
@@ -698,6 +707,14 @@ static void nvmet_rdma_handle_command(st cmd->n_rdma =0 ; cmd->req.port = queue->port; + +ib_dma_sync_single_for_cpu (queue->dev->device, + cmd->cmd->sge[0 ].addr, cmd->cmd->sge[0 ].length, +DMA_FROM_DEVICE ); +ib_dma_sync_single_for_cpu (queue->dev->device, + cmd->send_sge.addr, cmd->send_sge.length, +DMA_TO_DEVICE ); +if (!nvmet_req_init (&cmd->req, &queue->nvme_cq, &queue->nvme_sq, &nvmet_rdma_ops))return ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/nvmet-rdma-fix-missing-dma-sync-to-nvme-data-structures.patch