Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp3123874ybl; Mon, 19 Aug 2019 12:36:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqwXosMPjG//pnXe3kIBMOTt5VksyGqyqWGkG9m2ECTDO3ax7YdlOTI+/uVQzswXRAk4R4rE X-Received: by 2002:a65:68c9:: with SMTP id k9mr21043459pgt.17.1566243417103; Mon, 19 Aug 2019 12:36:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566243417; cv=none; d=google.com; s=arc-20160816; b=Brqn945WT0s4ayCAYBOQz97q8+tYrWFx6sLaA87aZg8DwuyFJrWKairlYWDiq8gQ/a 25fRSVZUhBnd6zexRjWyeNF/u08iKfBYhcHu7Lm2CVoy0WtQD5HG2k+suefVg/XEh+SN 1vt8ZjgA4SpOI7t3cq4BU/jLcCrX9LbB7XblbMY0htMFrFF/59C6+hZzojr3WdLfBHm9 0NLT/1ac3FxBrluUC4z9cqys4UnaC1pzJyqLRjK+bP4ojTpKXUqCEMNFENi3oTqQeo/S dagXMrjVjVkEW667ydo0gOiI8Vxh0dSVNhVger6c2t2p1ZYh83CLwEsBappB1Kp3PYOj GHiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=AWEcia4tfszUrPYI1tm9PW2DuitYh1vBatPMoqXQ3xQ=; b=WFuBa4nPcST7dX/BAVzv4rrccu214JpFnfvisyYEChONzaS+SjZMiQv54wrmmqR/wA 3xDqaeuJdJJ0A+9TRhkdm/Wfvxx/e14vtjZ29h1mT21s+YYegRcec0thrhZQKK8FrLhe x5w3XoJIK3W2AQOW0oShBxAI551Y4PpMtoBdhOSidFY+ypGcJIGZOrsq1PXQww3ZxpRw PVLAPEeaBKs5kMP82mYaB7l0QDHhWQpw0vkkF23oBSc/mO/5P3bnuE1qywnHRZLxzMbY 7VOMtIYhU/TtBuIzhxubpJe/0EqK1nzFtcjhpkVcWM25/OKdv9BNkY7ziwsgn1yRRNMn PkUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=Z6v20zJr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 59si10446899plp.331.2019.08.19.12.36.41; Mon, 19 Aug 2019 12:36:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=Z6v20zJr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728481AbfHSTfp (ORCPT + 99 others); Mon, 19 Aug 2019 15:35:45 -0400 Received: from linux.microsoft.com ([13.77.154.182]:33596 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728305AbfHSTfp (ORCPT ); Mon, 19 Aug 2019 15:35:45 -0400 Received: by linux.microsoft.com (Postfix, from userid 1004) id 4DA6E20B7188; Mon, 19 Aug 2019 12:35:44 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 4DA6E20B7188 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1566243344; bh=AWEcia4tfszUrPYI1tm9PW2DuitYh1vBatPMoqXQ3xQ=; h=From:To:Cc:Subject:Date:From; b=Z6v20zJrjqckfyfofVImX4AyfVdGBjNQWFT3upVlbKz0JK47KHzGmlip3OheHcI7w tqfz+BvbDeEDLBffQpqoX/klvC0PP3HKv7ulaP1HrvgDrvDPimUJw3Qz8ANBeadbvY CiGZXWmsA75iVzY2379siWB4mAs2TNu08I15JIp0= From: longli@linuxonhyperv.com To: "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Sasha Levin , "James E.J. Bottomley" , "Martin K. Petersen" , linux-hyperv@vger.kernel.org, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Long Li Subject: [PATCH] storvsc: setup 1:1 mapping between hardware queue and CPU queue Date: Mon, 19 Aug 2019 12:35:16 -0700 Message-Id: <1566243316-113690-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li storvsc doesn't use a dedicated hardware queue for a given CPU queue. When issuing I/O, it selects returning CPU (hardware queue) dynamically based on vmbus channel usage across all channels. This patch sets up a 1:1 mapping between hardware queue and CPU queue, thus avoiding unnecessary locking at upper layer when issuing I/O. Signed-off-by: Long Li --- drivers/scsi/storvsc_drv.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index b89269120a2d..26c16d40ec46 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -1682,6 +1682,18 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd) return 0; } +static int storvsc_map_queues(struct Scsi_Host *shost) +{ + unsigned int cpu; + struct blk_mq_queue_map *qmap = &shost->tag_set.map[HCTX_TYPE_DEFAULT]; + + for_each_possible_cpu(cpu) { + qmap->mq_map[cpu] = cpu; + } + + return 0; +} + static struct scsi_host_template scsi_driver = { .module = THIS_MODULE, .name = "storvsc_host_t", @@ -1697,6 +1709,7 @@ static struct scsi_host_template scsi_driver = { .this_id = -1, /* Make sure we dont get a sg segment crosses a page boundary */ .dma_boundary = PAGE_SIZE-1, + .map_queues = storvsc_map_queues, .no_write_same = 1, .track_queue_depth = 1, }; @@ -1836,8 +1849,7 @@ static int storvsc_probe(struct hv_device *device, /* * Set the number of HW queues we are supporting. */ - if (stor_device->num_sc != 0) - host->nr_hw_queues = stor_device->num_sc + 1; + host->nr_hw_queues = num_possible_cpus(); /* * Set the error handler work queue. -- 2.17.1