Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp123165imj; Wed, 13 Feb 2019 05:47:28 -0800 (PST) X-Google-Smtp-Source: AHgI3IZHZr4Qg+43FBqHVasweezM1zpkFYE2PnIfyIUUMyVFivCMOBlVwBf7J3650Ikeox4pfrJq X-Received: by 2002:aa7:83c5:: with SMTP id j5mr595302pfn.21.1550065647930; Wed, 13 Feb 2019 05:47:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550065647; cv=none; d=google.com; s=arc-20160816; b=iEsyXuC11hAyuc5fvYJ/oCCFmKRSQMOa7gLsgMc3hPzw27Esu5Z10boJ8FA0kmupmc cvac9v4L17oM13qYBLmMqwdOGFt2tV2hvx3/kZXOmqmJukyqWltX0UAoLsAj4OO1keaU bXQCTaubd7kbpd2FPUMHdLoUvSPq1x5L0NnJMZ4LLJKYwoCxZSdB1fdiLxbsgWU7EC+V gAPdJANELas9K8oCFNypjyUzIxvsoJV9/5yCEzRDbXWzc5MaD5iTZk7ZxlTZQ5rvv7Rm Jb0Bf+jBFJGuIb5ODbXzmTVfRN6igcaQSd6t0PkzHrPlBZtoyNkHINJNUq0fA5tLNMwu fYLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=k1z1+T3nxRcOWLi/261WBArjfUJ8c1BHSB4+GInlQQA=; b=NOiFrlTWB2XreWIOsltcchcCJd0p/yJ5aQTx8nUnpZHfi8uU8nY9EELE/fsjEsurk+ kYwbqAAz64crzlFWMuSNv9jHHtlr6QePEHJ2/7SCwOF4Agyu4X7nvZ2N3kZrQbkZyVKy jbrm4UZy9BFPGfZTdYyLKCjQX9bJ6RPS5nHcn2r2uvT1C2GTx8WvDbK/+GFz0gsUERaf lLBIHABDbclAkdx22uYY+IJdbTWZjfDgEZY4pSj7zh98IDcaBc7AMpHeGYaJky/GlDM2 BJO07G5DsBOfd1cHtYQ1VwCffkcoDWDC1LwfaKVuPh4GztlcPynlM2Xt5nXreEhA9zyM bpsA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r10si14597072pgp.537.2019.02.13.05.47.11; Wed, 13 Feb 2019 05:47:27 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391648AbfBMKvZ (ORCPT + 99 others); Wed, 13 Feb 2019 05:51:25 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32918 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732851AbfBMKvY (ORCPT ); Wed, 13 Feb 2019 05:51:24 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C12BB89AF0; Wed, 13 Feb 2019 10:51:23 +0000 (UTC) Received: from localhost (ovpn-8-32.pek2.redhat.com [10.72.8.32]) by smtp.corp.redhat.com (Postfix) with ESMTP id DCA535C1B4; Wed, 13 Feb 2019 10:51:20 +0000 (UTC) From: Ming Lei To: Christoph Hellwig , Bjorn Helgaas , Thomas Gleixner Cc: Jens Axboe , linux-block@vger.kernel.org, Sagi Grimberg , linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Keith Busch , Ming Lei Subject: [PATCH V3 5/5] genirq/affinity: Document .calc_sets as required in case of multiple sets Date: Wed, 13 Feb 2019 18:50:41 +0800 Message-Id: <20190213105041.13537-6-ming.lei@redhat.com> In-Reply-To: <20190213105041.13537-1-ming.lei@redhat.com> References: <20190213105041.13537-1-ming.lei@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 13 Feb 2019 10:51:24 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now NVMe has implemented the .calc_sets callback for caculating each set's vectors. For other cases of multiple IRQ sets, pre-caculating each set's vectors before allocating IRQ vectors can't work because the whole vectors number is unknow at that time. So document .calc_sets as required explicitly for multiple sets. Acked-by: Bjorn Helgaas Signed-off-by: Ming Lei --- drivers/pci/msi.c | 16 ++++++++++------ include/linux/interrupt.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 96978459e2a0..199d708b4099 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -1036,10 +1036,12 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, return -ERANGE; /* - * If the caller is passing in sets, we can't support a range of - * vectors. The caller needs to handle that. + * If the caller requests multiple sets of IRQs where each set + * requires different affinity, it must also supply a ->calc_sets() + * callback to compute vectors for each set after whole vectors are + * allocated. */ - if (affd && affd->nr_sets && minvec != maxvec) + if (affd && affd->nr_sets > 1 && !affd->calc_sets) return -EINVAL; if (WARN_ON_ONCE(dev->msi_enabled)) @@ -1094,10 +1096,12 @@ static int __pci_enable_msix_range(struct pci_dev *dev, return -ERANGE; /* - * If the caller is passing in sets, we can't support a range of - * supported vectors. The caller needs to handle that. + * If the caller requests multiple sets of IRQs where each set + * requires different affinity, it must also supply a ->calc_sets() + * callback to compute vectors for each set after whole vectors are + * allocated. */ - if (affd && affd->nr_sets && minvec != maxvec) + if (affd && affd->nr_sets > 1 && !affd->calc_sets) return -EINVAL; if (WARN_ON_ONCE(dev->msix_enabled)) diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 7a27f6ba1f2f..a053f7fb0ff1 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -269,7 +269,8 @@ struct irq_affinity_notify { * the MSI(-X) vector space * @nr_sets: Length of passed in *sets array * @set_vectors: Number of affinitized sets - * @calc_sets: Callback for caculating set vectors + * @calc_sets: Callback for caculating set vectors, required for + * multiple irq sets. * @priv: Private data of @calc_sets */ struct irq_affinity { -- 2.9.5