From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759456AbcIPI4F (ORCPT ); Fri, 16 Sep 2016 04:56:05 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39690 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755244AbcIPIvt (ORCPT ); Fri, 16 Sep 2016 04:51:49 -0400 From: Alexander Gordeev To: linux-kernel@vger.kernel.org Cc: Alexander Gordeev , Jens Axboe , linux-nvme@lists.infradead.org Subject: [PATCH 04/21] blk-mq: Do not limit number of queues to 'nr_cpu_ids' in allocations Date: Fri, 16 Sep 2016 10:51:15 +0200 Message-Id: <4d6909298a94c3d7e7c7ab87eaec097d7ffdc8bd.1474014910.git.agordeev@redhat.com> In-Reply-To: References: X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 16 Sep 2016 08:51:43 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently maximum number of used hardware queues is limited to number of CPUs in the system. However, using 'nr_cpu_ids' as the limit for (de-)allocations of data structures instead of existing data structures' counters (a) worsens readability and (b) leads to unused memory when number of hardware queues is less than number of CPUs. CC: Jens Axboe CC: linux-nvme@lists.infradead.org Signed-off-by: Alexander Gordeev --- block/blk-mq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index b6a7dee..0f0a01a 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2064,8 +2064,8 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, if (!q->queue_ctx) goto err_exit; - q->queue_hw_ctx = kzalloc_node(nr_cpu_ids * sizeof(*(q->queue_hw_ctx)), - GFP_KERNEL, set->numa_node); + q->queue_hw_ctx = kzalloc_node(set->nr_hw_queues * + sizeof(*(q->queue_hw_ctx)), GFP_KERNEL, set->numa_node); if (!q->queue_hw_ctx) goto err_percpu; @@ -2339,7 +2339,7 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set) if (set->nr_hw_queues > nr_cpu_ids) set->nr_hw_queues = nr_cpu_ids; - set->tags = kzalloc_node(nr_cpu_ids * sizeof(struct blk_mq_tags *), + set->tags = kzalloc_node(set->nr_hw_queues * sizeof(*set->tags), GFP_KERNEL, set->numa_node); if (!set->tags) return -ENOMEM; @@ -2362,7 +2362,7 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) { int i; - for (i = 0; i < nr_cpu_ids; i++) { + for (i = 0; i < set->nr_hw_queues; i++) { if (set->tags[i]) blk_mq_free_rq_map(set, set->tags[i], i); } -- 1.8.3.1