lkml.org 
[lkml]   [2021]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch V2 03/36] PCI/MSI: Allocate MSI device data on first use
    On Mon, Dec 06, 2021 at 11:39:00PM +0100, Thomas Gleixner wrote:
    > Allocate MSI device data on first use, i.e. when a PCI driver invokes one
    > of the PCI/MSI enablement functions.
    >
    > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    > Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>

    Acked-by: Bjorn Helgaas <bhelgaas@google.com>

    > ---
    > drivers/pci/msi/msi.c | 20 +++++++++++++++-----
    > 1 file changed, 15 insertions(+), 5 deletions(-)
    >
    > --- a/drivers/pci/msi/msi.c
    > +++ b/drivers/pci/msi/msi.c
    > @@ -889,10 +889,12 @@ static int __pci_enable_msi_range(struct
    > /* deprecated, don't use */
    > int pci_enable_msi(struct pci_dev *dev)
    > {
    > - int rc = __pci_enable_msi_range(dev, 1, 1, NULL);
    > - if (rc < 0)
    > - return rc;
    > - return 0;
    > + int rc = msi_setup_device_data(&dev->dev);
    > +
    > + if (!rc)
    > + rc = __pci_enable_msi_range(dev, 1, 1, NULL);
    > +
    > + return rc < 0 ? rc : 0;
    > }
    > EXPORT_SYMBOL(pci_enable_msi);
    >
    > @@ -947,7 +949,11 @@ static int __pci_enable_msix_range(struc
    > int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
    > int minvec, int maxvec)
    > {
    > - return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
    > + int ret = msi_setup_device_data(&dev->dev);
    > +
    > + if (!ret)
    > + ret = __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
    > + return ret;
    > }
    > EXPORT_SYMBOL(pci_enable_msix_range);
    >
    > @@ -974,8 +980,12 @@ int pci_alloc_irq_vectors_affinity(struc
    > struct irq_affinity *affd)
    > {
    > struct irq_affinity msi_default_affd = {0};
    > + int ret = msi_setup_device_data(&dev->dev);
    > int nvecs = -ENOSPC;
    >
    > + if (ret)
    > + return ret;
    > +
    > if (flags & PCI_IRQ_AFFINITY) {
    > if (!affd)
    > affd = &msi_default_affd;
    >

    \
     
     \ /
      Last update: 2021-12-07 22:05    [W:4.818 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site