All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sagi Grimberg <sagi@grimberg.me>
To: Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@fb.com>,
	Keith Busch <keith.busch@intel.com>
Cc: Max Gurtovoy <maxg@mellanox.com>,
	linux-nvme@lists.infradead.org, linux-block@vger.kernel.org
Subject: Re: [PATCH 01/13] block: move queues types to the block layer
Date: Mon, 3 Dec 2018 16:49:56 -0800	[thread overview]
Message-ID: <5a1cd7aa-8937-ae23-c9ae-c8ddaf525080@grimberg.me> (raw)
In-Reply-To: <20181202164628.1116-2-hch@lst.de>



On 12/2/18 8:46 AM, Christoph Hellwig wrote:
> Having another indirect all in the fast path doesn't really help
> in our post-spectre world.  Also having too many queue type is just
> going to create confusion, so I'd rather manage them centrally.
> 
> Note that the queue type naming and ordering changes a bit - the
> first index now is the default queue for everything not explicitly
> marked, the optional ones are read and poll queues.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   block/blk-mq-sysfs.c    |  9 +++++-
>   block/blk-mq.h          | 21 +++++++------
>   drivers/nvme/host/pci.c | 68 +++++++++++++++--------------------------
>   include/linux/blk-mq.h  | 15 ++++-----
>   4 files changed, 51 insertions(+), 62 deletions(-)
> 
> diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
> index 6efef1f679f0..9c2df137256a 100644
> --- a/block/blk-mq-sysfs.c
> +++ b/block/blk-mq-sysfs.c
> @@ -173,9 +173,16 @@ static ssize_t blk_mq_hw_sysfs_cpus_show(struct blk_mq_hw_ctx *hctx, char *page)
>   	return ret;
>   }
>   
> +static const char *const hctx_types[] = {
> +	[HCTX_TYPE_DEFAULT]	= "default",
> +	[HCTX_TYPE_READ]	= "read",
> +	[HCTX_TYPE_POLL]	= "poll",
> +};
> +
>   static ssize_t blk_mq_hw_sysfs_type_show(struct blk_mq_hw_ctx *hctx, char *page)
>   {
> -	return sprintf(page, "%u\n", hctx->type);
> +	BUILD_BUG_ON(ARRAY_SIZE(hctx_types) != HCTX_MAX_TYPES);
> +	return sprintf(page, "%s\n", hctx_types[hctx->type]);
>   }
>   
>   static struct attribute *default_ctx_attrs[] = {
> diff --git a/block/blk-mq.h b/block/blk-mq.h
> index 7291e5379358..a664ea44ffd4 100644
> --- a/block/blk-mq.h
> +++ b/block/blk-mq.h
> @@ -81,16 +81,14 @@ extern int blk_mq_hw_queue_to_node(struct blk_mq_queue_map *qmap, unsigned int);
>   /*
>    * blk_mq_map_queue_type() - map (hctx_type,cpu) to hardware queue
>    * @q: request queue
> - * @hctx_type: the hctx type index
> + * @type: the hctx type index
>    * @cpu: CPU
>    */
>   static inline struct blk_mq_hw_ctx *blk_mq_map_queue_type(struct request_queue *q,
> -							  unsigned int hctx_type,
> +							  enum hctx_type type,
>   							  unsigned int cpu)
>   {
> -	struct blk_mq_tag_set *set = q->tag_set;
> -
> -	return q->queue_hw_ctx[set->map[hctx_type].mq_map[cpu]];
> +	return q->queue_hw_ctx[q->tag_set->map[type].mq_map[cpu]];
>   }
>   
>   /*
> @@ -103,12 +101,17 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
>   						     unsigned int flags,
>   						     unsigned int cpu)
>   {
> -	int hctx_type = 0;
> +	enum hctx_type type = HCTX_TYPE_DEFAULT;
> +
> +	if (q->tag_set->nr_maps > HCTX_TYPE_POLL &&
> +	    ((flags & REQ_HIPRI) && test_bit(QUEUE_FLAG_POLL, &q->queue_flags)))
> +		type = HCTX_TYPE_POLL;
>   
> -	if (q->mq_ops->rq_flags_to_type)
> -		hctx_type = q->mq_ops->rq_flags_to_type(q, flags);
> +	else if (q->tag_set->nr_maps > HCTX_TYPE_READ &&
> +		 ((flags & REQ_OP_MASK) == REQ_OP_READ))
> +		type = HCTX_TYPE_READ;

Nit, there seems to be an extra newline that can be omitted here before
the else if statement (if I'm reading this correctly)...

Otherwise looks good,

Reviewed-by: Sagi Grimberg <sagi@grimberg.me>

WARNING: multiple messages have this Message-ID (diff)
From: sagi@grimberg.me (Sagi Grimberg)
Subject: [PATCH 01/13] block: move queues types to the block layer
Date: Mon, 3 Dec 2018 16:49:56 -0800	[thread overview]
Message-ID: <5a1cd7aa-8937-ae23-c9ae-c8ddaf525080@grimberg.me> (raw)
In-Reply-To: <20181202164628.1116-2-hch@lst.de>



On 12/2/18 8:46 AM, Christoph Hellwig wrote:
> Having another indirect all in the fast path doesn't really help
> in our post-spectre world.  Also having too many queue type is just
> going to create confusion, so I'd rather manage them centrally.
> 
> Note that the queue type naming and ordering changes a bit - the
> first index now is the default queue for everything not explicitly
> marked, the optional ones are read and poll queues.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   block/blk-mq-sysfs.c    |  9 +++++-
>   block/blk-mq.h          | 21 +++++++------
>   drivers/nvme/host/pci.c | 68 +++++++++++++++--------------------------
>   include/linux/blk-mq.h  | 15 ++++-----
>   4 files changed, 51 insertions(+), 62 deletions(-)
> 
> diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
> index 6efef1f679f0..9c2df137256a 100644
> --- a/block/blk-mq-sysfs.c
> +++ b/block/blk-mq-sysfs.c
> @@ -173,9 +173,16 @@ static ssize_t blk_mq_hw_sysfs_cpus_show(struct blk_mq_hw_ctx *hctx, char *page)
>   	return ret;
>   }
>   
> +static const char *const hctx_types[] = {
> +	[HCTX_TYPE_DEFAULT]	= "default",
> +	[HCTX_TYPE_READ]	= "read",
> +	[HCTX_TYPE_POLL]	= "poll",
> +};
> +
>   static ssize_t blk_mq_hw_sysfs_type_show(struct blk_mq_hw_ctx *hctx, char *page)
>   {
> -	return sprintf(page, "%u\n", hctx->type);
> +	BUILD_BUG_ON(ARRAY_SIZE(hctx_types) != HCTX_MAX_TYPES);
> +	return sprintf(page, "%s\n", hctx_types[hctx->type]);
>   }
>   
>   static struct attribute *default_ctx_attrs[] = {
> diff --git a/block/blk-mq.h b/block/blk-mq.h
> index 7291e5379358..a664ea44ffd4 100644
> --- a/block/blk-mq.h
> +++ b/block/blk-mq.h
> @@ -81,16 +81,14 @@ extern int blk_mq_hw_queue_to_node(struct blk_mq_queue_map *qmap, unsigned int);
>   /*
>    * blk_mq_map_queue_type() - map (hctx_type,cpu) to hardware queue
>    * @q: request queue
> - * @hctx_type: the hctx type index
> + * @type: the hctx type index
>    * @cpu: CPU
>    */
>   static inline struct blk_mq_hw_ctx *blk_mq_map_queue_type(struct request_queue *q,
> -							  unsigned int hctx_type,
> +							  enum hctx_type type,
>   							  unsigned int cpu)
>   {
> -	struct blk_mq_tag_set *set = q->tag_set;
> -
> -	return q->queue_hw_ctx[set->map[hctx_type].mq_map[cpu]];
> +	return q->queue_hw_ctx[q->tag_set->map[type].mq_map[cpu]];
>   }
>   
>   /*
> @@ -103,12 +101,17 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q,
>   						     unsigned int flags,
>   						     unsigned int cpu)
>   {
> -	int hctx_type = 0;
> +	enum hctx_type type = HCTX_TYPE_DEFAULT;
> +
> +	if (q->tag_set->nr_maps > HCTX_TYPE_POLL &&
> +	    ((flags & REQ_HIPRI) && test_bit(QUEUE_FLAG_POLL, &q->queue_flags)))
> +		type = HCTX_TYPE_POLL;
>   
> -	if (q->mq_ops->rq_flags_to_type)
> -		hctx_type = q->mq_ops->rq_flags_to_type(q, flags);
> +	else if (q->tag_set->nr_maps > HCTX_TYPE_READ &&
> +		 ((flags & REQ_OP_MASK) == REQ_OP_READ))
> +		type = HCTX_TYPE_READ;

Nit, there seems to be an extra newline that can be omitted here before
the else if statement (if I'm reading this correctly)...

Otherwise looks good,

Reviewed-by: Sagi Grimberg <sagi at grimberg.me>

  reply	other threads:[~2018-12-04  0:50 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-02 16:46 block and nvme polling improvements V3 Christoph Hellwig
2018-12-02 16:46 ` Christoph Hellwig
2018-12-02 16:46 ` [PATCH 01/13] block: move queues types to the block layer Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  0:49   ` Sagi Grimberg [this message]
2018-12-04  0:49     ` Sagi Grimberg
2018-12-04 15:00     ` Christoph Hellwig
2018-12-04 15:00       ` Christoph Hellwig
2018-12-04 17:08       ` Sagi Grimberg
2018-12-04 17:08         ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 02/13] nvme-pci: use atomic bitops to mark a queue enabled Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  0:54   ` Sagi Grimberg
2018-12-04  0:54     ` Sagi Grimberg
2018-12-04 15:04     ` Christoph Hellwig
2018-12-04 15:04       ` Christoph Hellwig
2018-12-04 17:11       ` Sagi Grimberg
2018-12-04 17:11         ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 03/13] nvme-pci: cleanup SQ allocation a bit Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  0:55   ` Sagi Grimberg
2018-12-04  0:55     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 04/13] nvme-pci: only allow polling with separate poll queues Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-03 18:23   ` Keith Busch
2018-12-03 18:23     ` Keith Busch
2018-12-04  0:56   ` Sagi Grimberg
2018-12-04  0:56     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 05/13] nvme-pci: consolidate code for polling non-dedicated queues Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  0:58   ` Sagi Grimberg
2018-12-04  0:58     ` Sagi Grimberg
2018-12-04 15:04     ` Christoph Hellwig
2018-12-04 15:04       ` Christoph Hellwig
2018-12-04 17:13       ` Sagi Grimberg
2018-12-04 17:13         ` Sagi Grimberg
2018-12-04 18:19         ` Jens Axboe
2018-12-04 18:19           ` Jens Axboe
2018-12-02 16:46 ` [PATCH 06/13] nvme-pci: refactor nvme_disable_io_queues Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  1:00   ` Sagi Grimberg
2018-12-04  1:00     ` Sagi Grimberg
2018-12-04 15:05     ` Christoph Hellwig
2018-12-04 15:05       ` Christoph Hellwig
2018-12-04 18:19       ` Jens Axboe
2018-12-04 18:19         ` Jens Axboe
2018-12-02 16:46 ` [PATCH 07/13] nvme-pci: don't poll from irq context when deleting queues Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-03 18:15   ` Keith Busch
2018-12-03 18:15     ` Keith Busch
2018-12-04  1:05   ` Sagi Grimberg
2018-12-04  1:05     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 08/13] nvme-pci: remove the CQ lock for interrupt driven queues Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  1:08   ` Sagi Grimberg
2018-12-04  1:08     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 09/13] nvme-rdma: remove I/O polling support Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-02 16:46 ` [PATCH 10/13] nvme-mpath: " Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-03 18:22   ` Keith Busch
2018-12-03 18:22     ` Keith Busch
2018-12-04  1:11   ` Sagi Grimberg
2018-12-04  1:11     ` Sagi Grimberg
2018-12-04 15:07     ` Christoph Hellwig
2018-12-04 15:07       ` Christoph Hellwig
2018-12-04 17:18       ` Sagi Grimberg
2018-12-04 17:18         ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 11/13] block: remove ->poll_fn Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  1:11   ` Sagi Grimberg
2018-12-04  1:11     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 12/13] block: only allow polling if a poll queue_map exists Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  1:14   ` Sagi Grimberg
2018-12-04  1:14     ` Sagi Grimberg
2018-12-02 16:46 ` [PATCH 13/13] block: enable polling by default if a poll map is initalized Christoph Hellwig
2018-12-02 16:46   ` Christoph Hellwig
2018-12-04  1:14   ` Sagi Grimberg
2018-12-04  1:14     ` Sagi Grimberg
2018-12-04 18:40 ` block and nvme polling improvements V3 Jens Axboe
2018-12-04 18:40   ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2018-11-29 19:12 block and nvme polling improvements V2 Christoph Hellwig
2018-11-29 19:12 ` [PATCH 01/13] block: move queues types to the block layer Christoph Hellwig
2018-11-29 19:12   ` Christoph Hellwig
2018-11-29 19:50   ` Jens Axboe
2018-11-29 19:50     ` Jens Axboe
2018-11-30  7:56     ` Christoph Hellwig
2018-11-30  7:56       ` Christoph Hellwig
2018-11-30 15:20       ` Jens Axboe
2018-11-30 15:20         ` Jens Axboe
2018-11-30 15:21         ` Christoph Hellwig
2018-11-30 15:21           ` Christoph Hellwig
2018-11-29 20:19   ` Keith Busch
2018-11-29 20:19     ` Keith Busch
2018-11-29 20:25     ` Jens Axboe
2018-11-29 20:25       ` Jens Axboe
2018-11-30  8:00     ` Christoph Hellwig
2018-11-30  8:00       ` Christoph Hellwig
2018-11-30 14:40       ` Keith Busch
2018-11-30 14:40         ` Keith Busch
2018-11-30 15:20       ` Jens Axboe
2018-11-30 15:20         ` Jens Axboe
2018-11-21 16:23 block and nvme polling improvements Christoph Hellwig
2018-11-21 16:23 ` [PATCH 01/13] block: move queues types to the block layer Christoph Hellwig
2018-11-21 16:23   ` Christoph Hellwig

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=5a1cd7aa-8937-ae23-c9ae-c8ddaf525080@grimberg.me \
    --to=sagi@grimberg.me \
    --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=maxg@mellanox.com \
    /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.