From patchwork Thu May 23 17:50:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 165043 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp2513899ili; Thu, 23 May 2019 10:51:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqwR4gM3h2grSwWGo4nAsrj0fkLRZ2KZLKkhfiqT2O0inCEuuqh5svSm8iTzJaN7T6kbn5pg X-Received: by 2002:a17:902:3103:: with SMTP id w3mr24590693plb.187.1558633887929; Thu, 23 May 2019 10:51:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558633887; cv=none; d=google.com; s=arc-20160816; b=wzRmODECCxqk931UGX8vtBtrtqIG9a5uLY7cRZFSNHUbFsOPPe12owmkNJ+y0l8gYR b7ohCoXCrEMOu/jLzDSWjiqkAsqo2LvvFIVwfXK+4r6dZiWPoD7OF9ekOmYZp8sLvJgZ /OHxpV3yQwTumgO0PUCLrSQPPtCazA+h7O6IkF+Gq/cCMvdiKf6At7CDB0IixuSOH+hh lrnGL4DiZ7R1L6Wuiix/XZEB12ity3O5aII4If0dIW86umW2yyuTVy5VB5AHyiQfEyb8 ZxfH/0qjGxlyXMWX91WADpF5izRZjh1AZZ7vuyCY29IKsCu4tiWf8ckKF2NjXpYXU8Y5 NRrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=Xgr0BODkjGlSqgZ08qPkt/K91xn6Axusz9u9zdX8Jz0=; b=epSuDS5xxka3nLPBQE3URCTPxF/in17Ok+vcE6lFI3SBIYyDwC/DXCj/O5Dl4ynty4 FVvjY7pq7vFHAU9jocRbprHb14Tc/2BR0kWKWssf8vJPW/qrRnTl5nDuDuYId1338Y3e yAz+BB1vABde4cCwNpA0sK1cu0TvYYcsQuYpLKy7a8UoI/oSoEVFwgxftU+9p9XmRTtV XtGbxuzJ7WgjcZG4jU8tly0TIC5MImbgrYn3/wWrf+Ep9gIutsBmyeykhTtAAe67QkLN YjI9vjwDmEhdGSjdE9kgBT2LueMK8vCE4DSGqHUzTdL3BEbIGB6ZMYJD/5WJSSEbuE3y Sz2Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-scsi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-scsi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i1si192995pld.344.2019.05.23.10.51.27; Thu, 23 May 2019 10:51:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-scsi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-scsi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-scsi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731226AbfEWRv0 (ORCPT + 1 other); Thu, 23 May 2019 13:51:26 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:17152 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730928AbfEWRv0 (ORCPT ); Thu, 23 May 2019 13:51:26 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 205B7EC5D3782C17FE42; Fri, 24 May 2019 01:51:24 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.439.0; Fri, 24 May 2019 01:51:15 +0800 From: John Garry To: CC: , Keith Busch , Don Brace , , , Jens Axboe Subject: [PATCH RFT plinth/v4.15 11/12] blk-mq: Allow PCI vector offset for mapping queues Date: Fri, 24 May 2019 01:50:21 +0800 Message-ID: <1558633822-186079-12-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1558633822-186079-1-git-send-email-john.garry@huawei.com> References: <1558633822-186079-1-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org From: Keith Busch The PCI interrupt vectors intended to be associated with a queue may not start at 0; a driver may allocate pre_vectors for special use. This patch adds an offset parameter so blk-mq may find the intended affinity mask and updates all drivers using this API accordingly. Cc: Don Brace Cc: Cc: Signed-off-by: Keith Busch Reviewed-by: Ming Lei Signed-off-by: Jens Axboe --- block/blk-mq-pci.c | 6 ++++-- drivers/nvme/host/pci.c | 2 +- drivers/scsi/qla2xxx/qla_os.c | 7 ++++++- drivers/scsi/smartpqi/smartpqi_init.c | 2 +- include/linux/blk-mq-pci.h | 3 ++- 5 files changed, 14 insertions(+), 6 deletions(-) -- 2.17.1 diff --git a/block/blk-mq-pci.c b/block/blk-mq-pci.c index 76944e3271bf..e233996bb76f 100644 --- a/block/blk-mq-pci.c +++ b/block/blk-mq-pci.c @@ -21,6 +21,7 @@ * blk_mq_pci_map_queues - provide a default queue mapping for PCI device * @set: tagset to provide the mapping for * @pdev: PCI device associated with @set. + * @offset: Offset to use for the pci irq vector * * This function assumes the PCI device @pdev has at least as many available * interrupt vectors as @set has queues. It will then query the vector @@ -28,13 +29,14 @@ * that maps a queue to the CPUs that have irq affinity for the corresponding * vector. */ -int blk_mq_pci_map_queues(struct blk_mq_tag_set *set, struct pci_dev *pdev) +int blk_mq_pci_map_queues(struct blk_mq_tag_set *set, struct pci_dev *pdev, + int offset) { const struct cpumask *mask; unsigned int queue, cpu; for (queue = 0; queue < set->nr_hw_queues; queue++) { - mask = pci_irq_get_affinity(pdev, queue); + mask = pci_irq_get_affinity(pdev, queue + offset); if (!mask) goto fallback; diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 4276ebfff22b..74de03782b93 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -414,7 +414,7 @@ static int nvme_pci_map_queues(struct blk_mq_tag_set *set) { struct nvme_dev *dev = set->driver_data; - return blk_mq_pci_map_queues(set, to_pci_dev(dev->dev)); + return blk_mq_pci_map_queues(set, to_pci_dev(dev->dev), 0); } /** diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 46f2d0cf7c0d..9f01fc56e40a 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -6609,8 +6609,13 @@ qla83xx_disable_laser(scsi_qla_host_t *vha) static int qla2xxx_map_queues(struct Scsi_Host *shost) { scsi_qla_host_t *vha = (scsi_qla_host_t *)shost->hostdata; + int rc; - return blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev); + if (USER_CTRL_IRQ(vha->hw)) + rc = blk_mq_map_queues(&shost->tag_set); + else + rc = blk_mq_pci_map_queues(&shost->tag_set, vha->hw->pdev, 0); + return rc; } static const struct pci_error_handlers qla2xxx_err_handler = { diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c index b2880c7709e6..10c94011c8a8 100644 --- a/drivers/scsi/smartpqi/smartpqi_init.c +++ b/drivers/scsi/smartpqi/smartpqi_init.c @@ -5348,7 +5348,7 @@ static int pqi_map_queues(struct Scsi_Host *shost) { struct pqi_ctrl_info *ctrl_info = shost_to_hba(shost); - return blk_mq_pci_map_queues(&shost->tag_set, ctrl_info->pci_dev); + return blk_mq_pci_map_queues(&shost->tag_set, ctrl_info->pci_dev, 0); } static int pqi_getpciinfo_ioctl(struct pqi_ctrl_info *ctrl_info, diff --git a/include/linux/blk-mq-pci.h b/include/linux/blk-mq-pci.h index 6338551e0fb9..9f4c17f0d2d8 100644 --- a/include/linux/blk-mq-pci.h +++ b/include/linux/blk-mq-pci.h @@ -5,6 +5,7 @@ struct blk_mq_tag_set; struct pci_dev; -int blk_mq_pci_map_queues(struct blk_mq_tag_set *set, struct pci_dev *pdev); +int blk_mq_pci_map_queues(struct blk_mq_tag_set *set, struct pci_dev *pdev, + int offset); #endif /* _LINUX_BLK_MQ_PCI_H */