All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chaitanya Kulkarni <Chaitanya.Kulkarni@wdc.com>
To: Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@fb.com>,
	Keith Busch <keith.busch@intel.com>,
	Sagi Grimberg <sagi@grimberg.me>
Cc: "linux-nvme@lists.infradead.org" <linux-nvme@lists.infradead.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>
Subject: Re: [PATCH 14/15] nvme-pci: optimize mapping single segment requests using SGLs
Date: Mon, 25 Mar 2019 05:39:35 +0000	[thread overview]
Message-ID: <SN6PR04MB45274160A60B0803B41190A3865E0@SN6PR04MB4527.namprd04.prod.outlook.com> (raw)
In-Reply-To: 20190321231037.25104-15-hch@lst.de

On 3/21/19 4:12 PM, Christoph Hellwig wrote:
> If the controller supports SGLs we can take another short cut for single
> segment request, given that we can always map those without another
> indirection structure, and thus don't need to create a scatterlist
> structure.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   drivers/nvme/host/pci.c | 22 ++++++++++++++++++++++
>   1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
> index 47fc4d653961..38869f59c296 100644
> --- a/drivers/nvme/host/pci.c
> +++ b/drivers/nvme/host/pci.c
> @@ -819,6 +819,23 @@ static blk_status_t nvme_setup_prp_simple(struct nvme_dev *dev,
>   	return 0;
>   }
>   
> +static blk_status_t nvme_setup_sgl_simple(struct nvme_dev *dev,
> +		struct request *req, struct nvme_rw_command *cmnd,
> +		struct bio_vec *bv)
> +{
> +	struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
> +
> +	iod->first_dma = dma_map_bvec(dev->dev, bv, rq_dma_dir(req), 0);
> +	if (dma_mapping_error(dev->dev, iod->first_dma))
> +		return BLK_STS_RESOURCE;
> +	iod->dma_len = bv->bv_len;
> +
> +	cmnd->dptr.sgl.addr = cpu_to_le64(iod->first_dma);
> +	cmnd->dptr.sgl.length = cpu_to_le32(iod->dma_len);
> +	cmnd->dptr.sgl.type = NVME_SGL_FMT_DATA_DESC << 4;
> +	return 0;
> +}
> +
>   static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
>   		struct nvme_command *cmnd)
>   {
> @@ -836,6 +853,11 @@ static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
>   			if (bv.bv_offset + bv.bv_len <= dev->ctrl.page_size * 2)
>   				return nvme_setup_prp_simple(dev, req,
>   							     &cmnd->rw, &bv);
> +
> +			if (iod->nvmeq->qid &&
> +			    dev->ctrl.sgls & ((1 << 0) | (1 << 1)))
> +				return nvme_setup_sgl_simple(dev, req,
> +							     &cmnd->rw, &bv);
>   		}
>   	}
>   
> 

Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>

WARNING: multiple messages have this Message-ID (diff)
From: Chaitanya.Kulkarni@wdc.com (Chaitanya Kulkarni)
Subject: [PATCH 14/15] nvme-pci: optimize mapping single segment requests using SGLs
Date: Mon, 25 Mar 2019 05:39:35 +0000	[thread overview]
Message-ID: <SN6PR04MB45274160A60B0803B41190A3865E0@SN6PR04MB4527.namprd04.prod.outlook.com> (raw)
In-Reply-To: 20190321231037.25104-15-hch@lst.de

On 3/21/19 4:12 PM, Christoph Hellwig wrote:
> If the controller supports SGLs we can take another short cut for single
> segment request, given that we can always map those without another
> indirection structure, and thus don't need to create a scatterlist
> structure.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   drivers/nvme/host/pci.c | 22 ++++++++++++++++++++++
>   1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
> index 47fc4d653961..38869f59c296 100644
> --- a/drivers/nvme/host/pci.c
> +++ b/drivers/nvme/host/pci.c
> @@ -819,6 +819,23 @@ static blk_status_t nvme_setup_prp_simple(struct nvme_dev *dev,
>   	return 0;
>   }
>   
> +static blk_status_t nvme_setup_sgl_simple(struct nvme_dev *dev,
> +		struct request *req, struct nvme_rw_command *cmnd,
> +		struct bio_vec *bv)
> +{
> +	struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
> +
> +	iod->first_dma = dma_map_bvec(dev->dev, bv, rq_dma_dir(req), 0);
> +	if (dma_mapping_error(dev->dev, iod->first_dma))
> +		return BLK_STS_RESOURCE;
> +	iod->dma_len = bv->bv_len;
> +
> +	cmnd->dptr.sgl.addr = cpu_to_le64(iod->first_dma);
> +	cmnd->dptr.sgl.length = cpu_to_le32(iod->dma_len);
> +	cmnd->dptr.sgl.type = NVME_SGL_FMT_DATA_DESC << 4;
> +	return 0;
> +}
> +
>   static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
>   		struct nvme_command *cmnd)
>   {
> @@ -836,6 +853,11 @@ static blk_status_t nvme_map_data(struct nvme_dev *dev, struct request *req,
>   			if (bv.bv_offset + bv.bv_len <= dev->ctrl.page_size * 2)
>   				return nvme_setup_prp_simple(dev, req,
>   							     &cmnd->rw, &bv);
> +
> +			if (iod->nvmeq->qid &&
> +			    dev->ctrl.sgls & ((1 << 0) | (1 << 1)))
> +				return nvme_setup_sgl_simple(dev, req,
> +							     &cmnd->rw, &bv);
>   		}
>   	}
>   
> 

Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni at wdc.com>

  reply	other threads:[~2019-03-25  5:39 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-21 23:10 [RFC] optimize nvme single segment I/O Christoph Hellwig
2019-03-21 23:10 ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 01/15] block: add a req_bvec helper Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:07   ` Chaitanya Kulkarni
2019-03-25  5:07     ` Chaitanya Kulkarni
2019-03-27 14:16     ` Christoph Hellwig
2019-03-27 14:16       ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 02/15] block: add a rq_integrity_vec helper Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:10   ` Chaitanya Kulkarni
2019-03-25  5:10     ` Chaitanya Kulkarni
2019-03-27 14:19     ` Christoph Hellwig
2019-03-27 14:19       ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 03/15] block: add a rq_dma_dir helper Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-22 13:06   ` Johannes Thumshirn
2019-03-22 13:06     ` Johannes Thumshirn
2019-03-27 14:20     ` Christoph Hellwig
2019-03-27 14:20       ` Christoph Hellwig
2019-03-28 10:26       ` Johannes Thumshirn
2019-03-28 10:26         ` Johannes Thumshirn
2019-03-25  5:11   ` Chaitanya Kulkarni
2019-03-25  5:11     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 04/15] block: add dma_map_bvec helper Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:13   ` Chaitanya Kulkarni
2019-03-25  5:13     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 05/15] nvme-pci: remove the unused iod->length field Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:14   ` Chaitanya Kulkarni
2019-03-25  5:14     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 06/15] nvme-pci: remove nvme_init_iod Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:19   ` Chaitanya Kulkarni
2019-03-25  5:19     ` Chaitanya Kulkarni
2019-03-27 14:21     ` Christoph Hellwig
2019-03-27 14:21       ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 07/15] nvme-pci: move the call to nvme_cleanup_cmd out of nvme_unmap_data Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:21   ` Chaitanya Kulkarni
2019-03-25  5:21     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 08/15] nvme-pci: merge nvme_free_iod into nvme_unmap_data Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:22   ` Chaitanya Kulkarni
2019-03-25  5:22     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 09/15] nvme-pci: only call nvme_unmap_data for requests transferring data Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:23   ` Chaitanya Kulkarni
2019-03-25  5:23     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 10/15] nvme-pci: do not build a scatterlist to map metadata Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:27   ` Chaitanya Kulkarni
2019-03-25  5:27     ` Chaitanya Kulkarni
2019-08-28  9:20   ` Ming Lei
2019-09-12  1:02     ` Ming Lei
2019-09-12  1:02       ` Ming Lei
2019-09-12  8:20       ` Christoph Hellwig
2019-09-12  8:20         ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 11/15] nvme-pci: split metadata handling from nvme_map_data / nvme_unmap_data Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:29   ` Chaitanya Kulkarni
2019-03-25  5:29     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 12/15] nvme-pci: remove the inline scatterlist optimization Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:30   ` Chaitanya Kulkarni
2019-03-25  5:30     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 13/15] nvme-pci: optimize mapping of small single segment requests Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:36   ` Chaitanya Kulkarni
2019-03-25  5:36     ` Chaitanya Kulkarni
2019-03-21 23:10 ` [PATCH 14/15] nvme-pci: optimize mapping single segment requests using SGLs Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:39   ` Chaitanya Kulkarni [this message]
2019-03-25  5:39     ` Chaitanya Kulkarni
2019-04-30 14:17   ` Klaus Birkelund
2019-04-30 14:17     ` Klaus Birkelund
2019-04-30 14:32     ` Christoph Hellwig
2019-04-30 14:32       ` Christoph Hellwig
2019-03-21 23:10 ` [PATCH 15/15] nvme-pci: tidy up nvme_map_data Christoph Hellwig
2019-03-21 23:10   ` Christoph Hellwig
2019-03-25  5:40   ` Chaitanya Kulkarni
2019-03-25  5:40     ` Chaitanya Kulkarni
2019-03-22 15:44 ` [RFC] optimize nvme single segment I/O Jens Axboe
2019-03-22 15:44   ` Jens Axboe
2019-03-27 14:24   ` Christoph Hellwig
2019-03-27 14:24     ` Christoph Hellwig
2019-03-22 17:37 ` Keith Busch
2019-03-22 17:37   ` Keith Busch
2019-03-22 18:55 ` Sagi Grimberg
2019-03-22 18:55   ` Sagi Grimberg

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=SN6PR04MB45274160A60B0803B41190A3865E0@SN6PR04MB4527.namprd04.prod.outlook.com \
    --to=chaitanya.kulkarni@wdc.com \
    --cc=axboe@fb.com \
    --cc=hch@lst.de \
    --cc=keith.busch@intel.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /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.