From 9fe4910415a297c60956e7052412eebe15d15ed6 Mon Sep 17 00:00:00 2001 From: Michael Ellerman Date: Thu, 22 Mar 2007 21:51:39 +1100 Subject: [PATCH] --- yaml --- r: 53345 b: refs/heads/master c: b1e2303dba021ee417c65a89e467a2b145ff9217 h: refs/heads/master i: 53343: c004f0b6a06feab3abac516f70b06483db52509d v: v3 --- [refs] | 2 +- trunk/drivers/pci/msi.c | 19 ++++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 3c1ff82de5f7..933ad86c7505 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3e916c0503a34ba32202a69df1cfeb82f2c5749d +refs/heads/master: b1e2303dba021ee417c65a89e467a2b145ff9217 diff --git a/trunk/drivers/pci/msi.c b/trunk/drivers/pci/msi.c index 762bff18187d..d5b9b94a2ac5 100644 --- a/trunk/drivers/pci/msi.c +++ b/trunk/drivers/pci/msi.c @@ -459,12 +459,13 @@ static int msix_capability_init(struct pci_dev *dev, /** * pci_msi_supported - check whether MSI may be enabled on device * @dev: pointer to the pci_dev data structure of MSI device function + * @type: are we checking for MSI or MSI-X ? * * Look at global flags, the device itself, and its parent busses * to return 0 if MSI are supported for the device. **/ static -int pci_msi_supported(struct pci_dev * dev) +int pci_msi_supported(struct pci_dev * dev, int type) { struct pci_bus *bus; @@ -482,6 +483,9 @@ int pci_msi_supported(struct pci_dev * dev) if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI) return -EINVAL; + if (!pci_find_capability(dev, type)) + return -EINVAL; + return 0; } @@ -497,13 +501,9 @@ int pci_msi_supported(struct pci_dev * dev) **/ int pci_enable_msi(struct pci_dev* dev) { - int pos, status; + int status; - if (pci_msi_supported(dev) < 0) - return -EINVAL; - - pos = pci_find_capability(dev, PCI_CAP_ID_MSI); - if (!pos) + if (pci_msi_supported(dev, PCI_CAP_ID_MSI)) return -EINVAL; WARN_ON(!!dev->msi_enabled); @@ -606,13 +606,10 @@ int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec) int i, j; u16 control; - if (!entries || pci_msi_supported(dev) < 0) + if (!entries || pci_msi_supported(dev, PCI_CAP_ID_MSIX)) return -EINVAL; pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); - if (!pos) - return -EINVAL; - pci_read_config_word(dev, msi_control_reg(pos), &control); nr_entries = multi_msix_capable(control); if (nvec > nr_entries)