lkml.org 
[lkml]   [2006]   [Jun]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/8] Factorize common MSI detection code from pci_enable_msi() and msix()
    pci_enable_msi() and pci_enable_msix() have to check same things
    before enabling MSI. Factorize this code in pci_msi_supported().

    Signed-off-by: Brice Goglin <brice@myri.com>
    ---
    drivers/pci/msi.c | 46 ++++++++++++++++++++++++++--------------------
    1 file changed, 26 insertions(+), 20 deletions(-)

    Index: linux-mm/drivers/pci/msi.c
    ===================================================================
    --- linux-mm.orig/drivers/pci/msi.c 2006-06-17 22:11:05.000000000 -0400
    +++ linux-mm/drivers/pci/msi.c 2006-06-17 23:11:30.000000000 -0400
    @@ -902,6 +902,28 @@
    }

    /**
    + * pci_msi_supported - check whether MSI may be enabled on device
    + * @dev: pointer to the pci_dev data structure of MSI device function
    + *
    + * Check parent busses for MSI flags, or disable except
    + * if forced.
    + **/
    +static
    +int pci_msi_supported(struct pci_dev * dev)
    +{
    + struct pci_bus *bus;
    +
    + if (!pci_msi_enable || !dev || dev->no_msi)
    + return -1;
    +
    + for (bus = dev->bus; bus; bus = bus->parent)
    + if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
    + return -1;
    +
    + return 0;
    +}
    +
    +/**
    * pci_enable_msi - configure device's MSI capability structure
    * @dev: pointer to the pci_dev data structure of MSI device function
    *
    @@ -913,19 +935,11 @@
    **/
    int pci_enable_msi(struct pci_dev* dev)
    {
    - struct pci_bus *bus;
    - int pos, temp, status = -EINVAL;
    + int pos, temp, status;
    u16 control;

    - if (!pci_msi_enable || !dev)
    - return status;
    -
    - if (dev->no_msi)
    - return status;
    -
    - for (bus = dev->bus; bus; bus = bus->parent)
    - if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
    - return -EINVAL;
    + if (pci_msi_supported(dev) < 0)
    + return -EINVAL;

    temp = dev->irq;

    @@ -1135,22 +1149,14 @@
    **/
    int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec)
    {
    - struct pci_bus *bus;
    int status, pos, nr_entries, free_vectors;
    int i, j, temp;
    u16 control;
    unsigned long flags;

    - if (!pci_msi_enable || !dev || !entries)
    + if (!entries || pci_msi_supported(dev) < 0)
    return -EINVAL;

    - if (dev->no_msi)
    - return -EINVAL;
    -
    - for (bus = dev->bus; bus; bus = bus->parent)
    - if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
    - return -EINVAL;
    -
    status = msi_init();
    if (status < 0)
    return status;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-06-19 03:10    [W:0.022 / U:90.360 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site