From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Marc Zygnier <maz@kernel.org>,
Alex Williamson <alex.williamson@redhat.com>,
Kevin Tian <kevin.tian@intel.com>,
Jason Gunthorpe <jgg@nvidia.com>, Megha Dey <megha.dey@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Andrew Cooper <amc96@cam.ac.uk>, Juergen Gross <jgross@suse.com>,
linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org
Subject: [patch 02/10] genirq/msi: Add range argument to msi_domain_alloc/free_descs_locked()
Date: Sat, 27 Nov 2021 02:24:33 +0100 (CET) [thread overview]
Message-ID: <20211127000918.594818541@linutronix.de> (raw)
In-Reply-To: 20211126233124.618283684@linutronix.de
In preparation for supporting range allocations for MSI-X, add a range
argument to the msi_domain_alloc/free_descs_locked() functions and fixup
all affected places.
Hand in ranges which are covering the current use case. They will be
refined in later steps.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/pci/msi/irqdomain.c | 6 ++++--
include/linux/msi.h | 5 ++---
kernel/irq/msi.c | 21 ++++++++++++---------
3 files changed, 18 insertions(+), 14 deletions(-)
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -10,22 +10,24 @@
int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, .ndesc = nvec};
struct irq_domain *domain;
domain = dev_get_msi_domain(&dev->dev);
if (domain && irq_domain_is_hierarchy(domain))
- return msi_domain_alloc_irqs_descs_locked(domain, &dev->dev, nvec);
+ return msi_domain_alloc_irqs_descs_locked(domain, &dev->dev, &range);
return pci_msi_legacy_setup_msi_irqs(dev, nvec, type);
}
void pci_msi_teardown_msi_irqs(struct pci_dev *dev)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, };
struct irq_domain *domain;
domain = dev_get_msi_domain(&dev->dev);
if (domain && irq_domain_is_hierarchy(domain))
- msi_domain_free_irqs_descs_locked(domain, &dev->dev);
+ msi_domain_free_irqs_descs_locked(domain, &dev->dev, &range);
else
pci_msi_legacy_teardown_msi_irqs(dev);
}
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -502,12 +502,11 @@ struct irq_domain *msi_create_irq_domain
struct msi_domain_info *info,
struct irq_domain *parent);
int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev, struct msi_range *range);
-int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
- int nvec);
+int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev, struct msi_range *range);
int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
int nvec);
void __msi_domain_free_irqs(struct irq_domain *domain, struct device *dev, struct msi_range *range);
-void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev);
+void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev, struct msi_range *range);
void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev);
struct msi_domain_info *msi_get_domain_info(struct irq_domain *domain);
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -956,22 +956,21 @@ static int msi_domain_add_simple_msi_des
* Return: %0 on success or an error code.
*/
int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
- int nvec)
+ struct msi_range *range)
{
struct msi_domain_info *info = domain->host_data;
- struct msi_range range = { .ndesc = nvec };
struct msi_domain_ops *ops = info->ops;
int ret;
lockdep_assert_held(&dev->msi.data->mutex);
- ret = msi_domain_add_simple_msi_descs(info, dev, nvec);
+ ret = msi_domain_add_simple_msi_descs(info, dev, range->ndesc);
if (ret)
return ret;
- ret = ops->domain_alloc_irqs(domain, dev, &range);
+ ret = ops->domain_alloc_irqs(domain, dev, range);
if (ret)
- msi_domain_free_irqs_descs_locked(domain, dev);
+ msi_domain_free_irqs_descs_locked(domain, dev, range);
return ret;
}
@@ -986,10 +985,11 @@ int msi_domain_alloc_irqs_descs_locked(s
*/
int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev, int nvec)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, .ndesc = nvec, };
int ret;
msi_lock_descs(dev);
- ret = msi_domain_alloc_irqs_descs_locked(domain, dev, nvec);
+ ret = msi_domain_alloc_irqs_descs_locked(domain, dev, &range);
msi_unlock_descs(dev);
return ret;
}
@@ -1034,14 +1034,15 @@ static void msi_domain_free_msi_descs(st
* pair. Use this for MSI irqdomains which implement their own vector
* allocation.
*/
-void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev)
+void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
+ struct msi_range *range)
{
struct msi_domain_info *info = domain->host_data;
struct msi_domain_ops *ops = info->ops;
lockdep_assert_held(&dev->msi.data->mutex);
- ops->domain_free_irqs(domain, dev, NULL);
+ ops->domain_free_irqs(domain, dev, range);
msi_domain_free_msi_descs(info, dev);
}
@@ -1053,8 +1054,10 @@ void msi_domain_free_irqs_descs_locked(s
*/
void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, };
+
msi_lock_descs(dev);
- msi_domain_free_irqs_descs_locked(domain, dev);
+ msi_domain_free_irqs_descs_locked(domain, dev, &range);
msi_unlock_descs(dev);
}
WARNING: multiple messages have this Message-ID (diff)
From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Bjorn Helgaas <helgaas@kernel.org>, Marc Zygnier <maz@kernel.org>,
Alex Williamson <alex.williamson@redhat.com>,
Kevin Tian <kevin.tian@intel.com>,
Jason Gunthorpe <jgg@nvidia.com>, Megha Dey <megha.dey@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Andrew Cooper <amc96@cam.ac.uk>, Juergen Gross <jgross@suse.com>,
linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org
Subject: [patch 02/10] genirq/msi: Add range argument to msi_domain_alloc/free_descs_locked()
Date: Sat, 27 Nov 2021 02:25:00 +0100 (CET) [thread overview]
Message-ID: <20211127000918.594818541@linutronix.de> (raw)
Message-ID: <20211127012500.uMsw8hWGg1q91-xgUGgOWSzbNQyFGmgkPm_Y2LBrje4@z> (raw)
In-Reply-To: 20211126233124.618283684@linutronix.de
In preparation for supporting range allocations for MSI-X, add a range
argument to the msi_domain_alloc/free_descs_locked() functions and fixup
all affected places.
Hand in ranges which are covering the current use case. They will be
refined in later steps.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/pci/msi/irqdomain.c | 6 ++++--
include/linux/msi.h | 5 ++---
kernel/irq/msi.c | 21 ++++++++++++---------
3 files changed, 18 insertions(+), 14 deletions(-)
--- a/drivers/pci/msi/irqdomain.c
+++ b/drivers/pci/msi/irqdomain.c
@@ -10,22 +10,24 @@
int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, .ndesc = nvec};
struct irq_domain *domain;
domain = dev_get_msi_domain(&dev->dev);
if (domain && irq_domain_is_hierarchy(domain))
- return msi_domain_alloc_irqs_descs_locked(domain, &dev->dev, nvec);
+ return msi_domain_alloc_irqs_descs_locked(domain, &dev->dev, &range);
return pci_msi_legacy_setup_msi_irqs(dev, nvec, type);
}
void pci_msi_teardown_msi_irqs(struct pci_dev *dev)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, };
struct irq_domain *domain;
domain = dev_get_msi_domain(&dev->dev);
if (domain && irq_domain_is_hierarchy(domain))
- msi_domain_free_irqs_descs_locked(domain, &dev->dev);
+ msi_domain_free_irqs_descs_locked(domain, &dev->dev, &range);
else
pci_msi_legacy_teardown_msi_irqs(dev);
}
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -502,12 +502,11 @@ struct irq_domain *msi_create_irq_domain
struct msi_domain_info *info,
struct irq_domain *parent);
int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev, struct msi_range *range);
-int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
- int nvec);
+int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev, struct msi_range *range);
int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
int nvec);
void __msi_domain_free_irqs(struct irq_domain *domain, struct device *dev, struct msi_range *range);
-void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev);
+void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev, struct msi_range *range);
void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev);
struct msi_domain_info *msi_get_domain_info(struct irq_domain *domain);
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -956,22 +956,21 @@ static int msi_domain_add_simple_msi_des
* Return: %0 on success or an error code.
*/
int msi_domain_alloc_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
- int nvec)
+ struct msi_range *range)
{
struct msi_domain_info *info = domain->host_data;
- struct msi_range range = { .ndesc = nvec };
struct msi_domain_ops *ops = info->ops;
int ret;
lockdep_assert_held(&dev->msi.data->mutex);
- ret = msi_domain_add_simple_msi_descs(info, dev, nvec);
+ ret = msi_domain_add_simple_msi_descs(info, dev, range->ndesc);
if (ret)
return ret;
- ret = ops->domain_alloc_irqs(domain, dev, &range);
+ ret = ops->domain_alloc_irqs(domain, dev, range);
if (ret)
- msi_domain_free_irqs_descs_locked(domain, dev);
+ msi_domain_free_irqs_descs_locked(domain, dev, range);
return ret;
}
@@ -986,10 +985,11 @@ int msi_domain_alloc_irqs_descs_locked(s
*/
int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev, int nvec)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, .ndesc = nvec, };
int ret;
msi_lock_descs(dev);
- ret = msi_domain_alloc_irqs_descs_locked(domain, dev, nvec);
+ ret = msi_domain_alloc_irqs_descs_locked(domain, dev, &range);
msi_unlock_descs(dev);
return ret;
}
@@ -1034,14 +1034,15 @@ static void msi_domain_free_msi_descs(st
* pair. Use this for MSI irqdomains which implement their own vector
* allocation.
*/
-void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev)
+void msi_domain_free_irqs_descs_locked(struct irq_domain *domain, struct device *dev,
+ struct msi_range *range)
{
struct msi_domain_info *info = domain->host_data;
struct msi_domain_ops *ops = info->ops;
lockdep_assert_held(&dev->msi.data->mutex);
- ops->domain_free_irqs(domain, dev, NULL);
+ ops->domain_free_irqs(domain, dev, range);
msi_domain_free_msi_descs(info, dev);
}
@@ -1053,8 +1054,10 @@ void msi_domain_free_irqs_descs_locked(s
*/
void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev)
{
+ struct msi_range range = { .first = 0, .last = UINT_MAX, };
+
msi_lock_descs(dev);
- msi_domain_free_irqs_descs_locked(domain, dev);
+ msi_domain_free_irqs_descs_locked(domain, dev, &range);
msi_unlock_descs(dev);
}
next prev parent reply other threads:[~2021-11-27 1:33 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-27 1:24 [patch 00/10] genirq/msi, PCI/MSI: Support for dynamic MSI-X vector expansion - Part 4 Thomas Gleixner
2021-11-27 1:24 ` [patch 01/10] genirq/msi: Add range argument to alloc/free MSI domain ops Thomas Gleixner
2021-11-27 1:24 ` Thomas Gleixner
2021-11-27 1:24 ` Thomas Gleixner [this message]
2021-11-27 1:25 ` [patch 02/10] genirq/msi: Add range argument to msi_domain_alloc/free_descs_locked() Thomas Gleixner
2021-11-27 1:24 ` [patch 03/10] genirq/msi: Make MSI descriptor alloc/free ready for range allocations Thomas Gleixner
2021-11-27 1:25 ` Thomas Gleixner
2021-11-28 15:57 ` Marc Zyngier
2021-11-28 19:17 ` Thomas Gleixner
2021-11-29 17:28 ` Thomas Gleixner
2021-11-27 1:24 ` [patch 05/10] genirq/msi: Add domain info flag MSI_FLAG_CAN_EXPAND Thomas Gleixner
2021-11-27 1:25 ` Thomas Gleixner
2021-11-27 1:24 ` [patch 06/10] PCI/MSI: Use range in allocation path Thomas Gleixner
2021-11-27 1:25 ` Thomas Gleixner
2021-11-27 1:24 ` [patch 08/10] PCI/MSI: Provide pci_msi_domain_supports_expand() Thomas Gleixner
2021-11-27 1:25 ` Thomas Gleixner
2021-11-27 1:24 ` [patch 10/10] x86/apic/msi: Support MSI-X vector expansion Thomas Gleixner
2021-11-27 1:25 ` Thomas Gleixner
2021-11-27 1:24 ` [patch 00/10] genirq/msi, PCI/MSI: Support for dynamic MSI-X vector expansion - Part 4 Thomas Gleixner
2021-11-27 1:25 ` [patch 04/10] genirq/msi: Prepare MSI domain alloc/free for range irq allocation Thomas Gleixner
2021-11-27 1:24 ` Thomas Gleixner
2021-11-27 1:25 ` [patch 07/10] PCI/MSI: Make free related functions range based Thomas Gleixner
2021-11-27 1:24 ` Thomas Gleixner
2021-11-27 1:25 ` [patch 09/10] PCI/MSI: Provide pci_msix_expand_vectors[_at]() Thomas Gleixner
2021-11-27 1:24 ` Thomas Gleixner
2021-12-02 1:08 ` Dey, Megha
2021-12-02 10:16 ` Thomas Gleixner
2021-12-02 19:21 ` Raj, Ashok
2021-12-02 20:40 ` Thomas Gleixner
2021-12-03 0:45 ` Raj, Ashok
2021-12-03 12:29 ` Thomas Gleixner
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=20211127000918.594818541@linutronix.de \
--to=tglx@linutronix.de \
--cc=alex.williamson@redhat.com \
--cc=amc96@cam.ac.uk \
--cc=ashok.raj@intel.com \
--cc=helgaas@kernel.org \
--cc=jgg@nvidia.com \
--cc=jgross@suse.com \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=maz@kernel.org \
--cc=megha.dey@intel.com \
--cc=mpe@ellerman.id.au \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox