All of lore.kernel.org
 help / color / mirror / Atom feed
From: hch@lst.de (Christoph Hellwig)
Subject: [PATCHv3] nvmet-rdma: Fix missing dma sync to nvme data structures
Date: Thu, 19 Jan 2017 16:22:40 +0100	[thread overview]
Message-ID: <20170119152240.GA32400@lst.de> (raw)
In-Reply-To: <1484785346-2991-1-git-send-email-parav@mellanox.com>

On Wed, Jan 18, 2017@06:22:26PM -0600, Parav Pandit wrote:
> 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
> 
> Signed-off-by: Parav Pandit <parav at mellanox.com>
> Reviewed-by: Max Gurtovoy <maxg at mellanox.com>
> ---
>  drivers/nvme/target/rdma.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
> index 6c1c368..0599217 100644
> --- a/drivers/nvme/target/rdma.c
> +++ b/drivers/nvme/target/rdma.c
> @@ -438,6 +438,10 @@ static int nvmet_rdma_post_recv(struct nvmet_rdma_device *ndev,
>  {
>  	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(struct nvmet_req *req)
>  		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,13 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue,
>  	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);

Why the different indentation here?  Both one or two tab indents
look fine to me in this context, but don't mix them.

Except for that this looks fine:

Reviewed-by: Christoph Hellwig <hch at lst.de>

WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
To: Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Cc: hch-jcswGhMUV9g@public.gmane.org,
	sagi-NQWnxTmZq1alnMjI0IkVqw@public.gmane.org,
	linux-nvme-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCHv3] nvmet-rdma: Fix missing dma sync to nvme data structures
Date: Thu, 19 Jan 2017 16:22:40 +0100	[thread overview]
Message-ID: <20170119152240.GA32400@lst.de> (raw)
In-Reply-To: <1484785346-2991-1-git-send-email-parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

On Wed, Jan 18, 2017 at 06:22:26PM -0600, Parav Pandit wrote:
> 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
> 
> Signed-off-by: Parav Pandit <parav-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Max Gurtovoy <maxg-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
> ---
>  drivers/nvme/target/rdma.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
> index 6c1c368..0599217 100644
> --- a/drivers/nvme/target/rdma.c
> +++ b/drivers/nvme/target/rdma.c
> @@ -438,6 +438,10 @@ static int nvmet_rdma_post_recv(struct nvmet_rdma_device *ndev,
>  {
>  	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(struct nvmet_req *req)
>  		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,13 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue,
>  	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);

Why the different indentation here?  Both one or two tab indents
look fine to me in this context, but don't mix them.

Except for that this looks fine:

Reviewed-by: Christoph Hellwig <hch-jcswGhMUV9g@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-01-19 15:22 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-19  0:22 [PATCHv3] nvmet-rdma: Fix missing dma sync to nvme data structures Parav Pandit
2017-01-19  0:22 ` Parav Pandit
2017-01-19  7:42 ` Sagi Grimberg
2017-01-19  7:42   ` Sagi Grimberg
2017-01-19 15:22 ` Christoph Hellwig [this message]
2017-01-19 15:22   ` Christoph Hellwig
2017-01-19 15:45   ` Parav Pandit
2017-01-19 15:45     ` Parav Pandit
2017-01-19 15:46     ` Christoph Hellwig
2017-01-19 15:46       ` Christoph Hellwig
2017-01-19 15:51       ` Parav Pandit
2017-01-19 15:51         ` Parav Pandit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170119152240.GA32400@lst.de \
    --to=hch@lst.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.