From: Bjorn Helgaas <helgaas@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-hyperv@vger.kernel.org, linux-mips@vger.kernel.org,
Paul Mackerras <paulus@samba.org>,
sparclinux@vger.kernel.org, Wei Liu <wei.liu@kernel.org>,
Ashok Raj <ashok.raj@intel.com>,
x86@kernel.org, Christian Borntraeger <borntraeger@de.ibm.com>,
Megha Dey <megha.dey@intel.com>, Jason Gunthorpe <jgg@nvidia.com>,
linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org,
ath11k@lists.infradead.org, Kevin Tian <kevin.tian@intel.com>,
Heiko Carstens <hca@linux.ibm.com>,
Alex Williamson <alex.williamson@redhat.com>,
Cedric Le Goater <clg@kaod.org>,
Kalle Valo <kvalo@codeaurora.org>,
Juergen Gross <jgross@suse.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
LKML <linux-kernel@vger.kernel.org>,
Marc Zygnier <maz@kernel.org>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: [patch V2 22/23] genirq/msi: Handle PCI/MSI allocation fail in core code
Date: Tue, 7 Dec 2021 15:02:19 -0600 [thread overview]
Message-ID: <20211207210219.GA77501@bhelgaas> (raw)
In-Reply-To: <20211206210225.046615302@linutronix.de>
On Mon, Dec 06, 2021 at 11:27:59PM +0100, Thomas Gleixner wrote:
> Get rid of yet another irqdomain callback and let the core code return the
> already available information of how many descriptors could be allocated.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Tested-by: Juergen Gross <jgross@suse.com>
> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI
> ---
> drivers/pci/msi/irqdomain.c | 13 -------------
> include/linux/msi.h | 5 +----
> kernel/irq/msi.c | 29 +++++++++++++++++++++++++----
> 3 files changed, 26 insertions(+), 21 deletions(-)
>
> --- a/drivers/pci/msi/irqdomain.c
> +++ b/drivers/pci/msi/irqdomain.c
> @@ -95,16 +95,6 @@ static int pci_msi_domain_check_cap(stru
> return 0;
> }
>
> -static int pci_msi_domain_handle_error(struct irq_domain *domain,
> - struct msi_desc *desc, int error)
> -{
> - /* Special handling to support __pci_enable_msi_range() */
> - if (pci_msi_desc_is_multi_msi(desc) && error == -ENOSPC)
> - return 1;
> -
> - return error;
> -}
> -
> static void pci_msi_domain_set_desc(msi_alloc_info_t *arg,
> struct msi_desc *desc)
> {
> @@ -115,7 +105,6 @@ static void pci_msi_domain_set_desc(msi_
> static struct msi_domain_ops pci_msi_domain_ops_default = {
> .set_desc = pci_msi_domain_set_desc,
> .msi_check = pci_msi_domain_check_cap,
> - .handle_error = pci_msi_domain_handle_error,
> };
>
> static void pci_msi_domain_update_dom_ops(struct msi_domain_info *info)
> @@ -129,8 +118,6 @@ static void pci_msi_domain_update_dom_op
> ops->set_desc = pci_msi_domain_set_desc;
> if (ops->msi_check == NULL)
> ops->msi_check = pci_msi_domain_check_cap;
> - if (ops->handle_error == NULL)
> - ops->handle_error = pci_msi_domain_handle_error;
> }
> }
>
> --- a/include/linux/msi.h
> +++ b/include/linux/msi.h
> @@ -286,7 +286,6 @@ struct msi_domain_info;
> * @msi_check: Callback for verification of the domain/info/dev data
> * @msi_prepare: Prepare the allocation of the interrupts in the domain
> * @set_desc: Set the msi descriptor for an interrupt
> - * @handle_error: Optional error handler if the allocation fails
> * @domain_alloc_irqs: Optional function to override the default allocation
> * function.
> * @domain_free_irqs: Optional function to override the default free
> @@ -295,7 +294,7 @@ struct msi_domain_info;
> * @get_hwirq, @msi_init and @msi_free are callbacks used by the underlying
> * irqdomain.
> *
> - * @msi_check, @msi_prepare, @handle_error and @set_desc are callbacks used by
> + * @msi_check, @msi_prepare and @set_desc are callbacks used by
> * msi_domain_alloc/free_irqs().
> *
> * @domain_alloc_irqs, @domain_free_irqs can be used to override the
> @@ -332,8 +331,6 @@ struct msi_domain_ops {
> msi_alloc_info_t *arg);
> void (*set_desc)(msi_alloc_info_t *arg,
> struct msi_desc *desc);
> - int (*handle_error)(struct irq_domain *domain,
> - struct msi_desc *desc, int error);
> int (*domain_alloc_irqs)(struct irq_domain *domain,
> struct device *dev, int nvec);
> void (*domain_free_irqs)(struct irq_domain *domain,
> --- a/kernel/irq/msi.c
> +++ b/kernel/irq/msi.c
> @@ -538,6 +538,27 @@ static bool msi_check_reservation_mode(s
> return desc->pci.msi_attrib.is_msix || desc->pci.msi_attrib.can_mask;
> }
>
> +static int msi_handle_pci_fail(struct irq_domain *domain, struct msi_desc *desc,
> + int allocated)
> +{
> + switch(domain->bus_token) {
> + case DOMAIN_BUS_PCI_MSI:
> + case DOMAIN_BUS_VMD_MSI:
> + if (IS_ENABLED(CONFIG_PCI_MSI))
> + break;
> + fallthrough;
> + default:
> + return -ENOSPC;
> + }
> +
> + /* Let a failed PCI multi MSI allocation retry */
> + if (desc->nvec_used > 1)
> + return 1;
> +
> + /* If there was a successful allocation let the caller know */
> + return allocated ? allocated : -ENOSPC;
> +}
> +
> int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
> int nvec)
> {
> @@ -546,6 +567,7 @@ int __msi_domain_alloc_irqs(struct irq_d
> struct irq_data *irq_data;
> struct msi_desc *desc;
> msi_alloc_info_t arg = { };
> + int allocated = 0;
> int i, ret, virq;
> bool can_reserve;
>
> @@ -560,16 +582,15 @@ int __msi_domain_alloc_irqs(struct irq_d
> dev_to_node(dev), &arg, false,
> desc->affinity);
> if (virq < 0) {
> - ret = -ENOSPC;
> - if (ops->handle_error)
> - ret = ops->handle_error(domain, desc, ret);
> - return ret;
> + ret = msi_handle_pci_fail(domain, desc, allocated);
> + goto cleanup;
> }
>
> for (i = 0; i < desc->nvec_used; i++) {
> irq_set_msi_desc_off(virq, i, desc);
> irq_debugfs_copy_devname(virq + i, dev);
> }
> + allocated++;
> }
>
> can_reserve = msi_check_reservation_mode(domain, info, dev);
>
next prev parent reply other threads:[~2021-12-07 21:03 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-06 22:27 [patch V2 00/23] genirq/msi, PCI/MSI: Spring cleaning - Part 1 Thomas Gleixner
2021-12-06 22:27 ` [patch V2 01/23] powerpc/4xx: Remove MSI support which never worked Thomas Gleixner
2021-12-07 7:21 ` Cédric Le Goater
2021-12-07 11:36 ` Michael Ellerman
2021-12-07 15:50 ` Cédric Le Goater
2021-12-07 20:42 ` Thomas Gleixner
2021-12-08 10:44 ` Cédric Le Goater
2021-12-06 22:27 ` [patch V2 02/23] PCI/MSI: Fix pci_irq_vector()/pci_irq_get_affinity() Thomas Gleixner
2021-12-07 20:53 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 03/23] genirq/msi: Guard sysfs code Thomas Gleixner
2021-12-07 7:42 ` Greg Kroah-Hartman
2021-12-06 22:27 ` [patch V2 04/23] genirq/msi: Remove unused domain callbacks Thomas Gleixner
2021-12-06 22:27 ` [patch V2 05/23] genirq/msi: Fixup includes Thomas Gleixner
2021-12-07 7:43 ` Greg Kroah-Hartman
2021-12-06 22:27 ` [patch V2 06/23] PCI/MSI: Make pci_msi_domain_write_msg() static Thomas Gleixner
2021-12-07 20:54 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 07/23] PCI/MSI: Remove msi_desc_to_pci_sysdata() Thomas Gleixner
2021-12-07 20:55 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 08/23] PCI/sysfs: Use pci_irq_vector() Thomas Gleixner
2021-12-07 7:43 ` Greg Kroah-Hartman
2021-12-07 20:56 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 09/23] MIPS: Octeon: Use arch_setup_msi_irq() Thomas Gleixner
2021-12-06 22:27 ` [patch V2 10/23] genirq/msi, treewide: Use a named struct for PCI/MSI attributes Thomas Gleixner
2021-12-07 7:44 ` Greg Kroah-Hartman
2021-12-06 22:27 ` [patch V2 11/23] x86/hyperv: Refactor hv_msi_domain_free_irqs() Thomas Gleixner
2021-12-06 22:27 ` [patch V2 12/23] PCI/MSI: Make arch_restore_msi_irqs() less horrible Thomas Gleixner
2021-12-07 20:56 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 13/23] PCI/MSI: Cleanup include zoo Thomas Gleixner
2021-12-07 20:57 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 14/23] PCI/MSI: Make msix_update_entries() smarter Thomas Gleixner
2021-12-07 7:44 ` Greg Kroah-Hartman
2021-12-07 20:57 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 15/23] PCI/MSI: Move code into a separate directory Thomas Gleixner
2021-12-07 20:57 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 16/23] PCI/MSI: Split out CONFIG_PCI_MSI independent part Thomas Gleixner
2021-12-07 7:45 ` Greg Kroah-Hartman
2021-12-07 20:58 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 17/23] PCI/MSI: Split out !IRQDOMAIN code Thomas Gleixner
2021-12-07 7:45 ` Greg Kroah-Hartman
2021-12-07 20:59 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 18/23] PCI/MSI: Split out irqdomain code Thomas Gleixner
2021-12-07 7:46 ` Greg Kroah-Hartman
2021-12-07 21:00 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 19/23] PCI/MSI: Sanitize MSIX table map handling Thomas Gleixner
2021-12-07 21:01 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 20/23] PCI/MSI: Move msi_lock to struct pci_dev Thomas Gleixner
2021-12-07 7:47 ` Greg Kroah-Hartman
2021-12-07 21:01 ` Bjorn Helgaas
2021-12-08 15:29 ` Jason Gunthorpe
2021-12-08 20:56 ` Thomas Gleixner
2021-12-06 22:27 ` [patch V2 21/23] PCI/MSI: Make pci_msi_domain_check_cap() static Thomas Gleixner
2021-12-07 7:47 ` Greg Kroah-Hartman
2021-12-07 21:01 ` Bjorn Helgaas
2021-12-06 22:27 ` [patch V2 22/23] genirq/msi: Handle PCI/MSI allocation fail in core code Thomas Gleixner
2021-12-07 7:48 ` Greg Kroah-Hartman
2021-12-07 21:02 ` Bjorn Helgaas [this message]
2021-12-06 22:28 ` [patch V2 23/23] PCI/MSI: Move descriptor counting on allocation fail to the legacy code Thomas Gleixner
2021-12-07 7:48 ` Greg Kroah-Hartman
2021-12-07 21:02 ` Bjorn Helgaas
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=20211207210219.GA77501@bhelgaas \
--to=helgaas@kernel.org \
--cc=alex.williamson@redhat.com \
--cc=ashok.raj@intel.com \
--cc=ath11k@lists.infradead.org \
--cc=borntraeger@de.ibm.com \
--cc=clg@kaod.org \
--cc=gregkh@linuxfoundation.org \
--cc=hca@linux.ibm.com \
--cc=jgg@nvidia.com \
--cc=jgross@suse.com \
--cc=kevin.tian@intel.com \
--cc=kvalo@codeaurora.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maz@kernel.org \
--cc=megha.dey@intel.com \
--cc=paulus@samba.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tsbogend@alpha.franken.de \
--cc=wei.liu@kernel.org \
--cc=x86@kernel.org \
--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;
as well as URLs for NNTP newsgroup(s).