PCI/MSI/s390: Fix single MSI only check

Multiple MSIs have never been supported on s390 architecture,
but the platform code fails to report single MSI only.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
PCI/MSI/s390: Remove superfluous check of MSI type

arch_setup_msi_irqs() hook can only be called from the generic
MSI code which ensures correct MSI type parameter.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
PCI/MSI/pSeries: Fix wrong error code reporting

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI/pSeries: Make quota traversing and requesting race-safe

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Fix return value when populate_msi_sysfs() failed

If populate_msi_sysfs() function failed msix_capability_init()
must return the error code, but it returns the success instead.
This update fixes the described misbehaviour.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Get rid of useless counting msi_desc leftovers

If an architecture failed to allocate requested number of
MSI-Xs we should not mislead device drivers and make them
retry based on how many MSI-Xs were possibly allocated by
the architecture in the process before the failure. It is
rude for an architecture to leave any leftovers anyway.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Return -ENOSYS for unimplemented interfaces, not -1

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Suggested-by: Ben Hutchings <bhutchings@solarflare.com>
PCI/MSI: Make pci_enable_msix() 'nvec' argument unsigned int

Make pci_enable_msix() and pci_enable_msi_block() consistent
with regard to the type of 'nvec' argument. Indeed, a number
of vectors to allocate is a natural value, so make it unsigned.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Factor out pci_get_msi_cap() interface

This update is needed to facilitate a forthcoming re-design
MSI/MSI-X interrupts enabling pattern.

Device drivers will use this interface to obtain maximum number
of MSI interrupts the device supports and use that value in the
following call to pci_enable_msi_block() interface.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Get rid of pci_enable_msi_block_auto() interface

As result of introduction of pci_get_msi_cap() interface
pci_enable_msi_block_auto() function became superflous.

To enable maximum possible number of MSIs drivers will
first obtain that number from pci_get_msi_cap() function
and then call pci_enable_msi_block() interface.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Convert pci_msix_table_size() to a public interface

Make pci_msix_table_size() return error code if the device
does not support MSI-X. This update is needed to create a
consistent MSI-X counterpart for recently introduced MSI
interface pci_get_msi_cap().

Device drivers can use this interface to obtain maximum number
of MSI-X interrupts the device supports and use that value in
the following call to pci_enable_msix() interface.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
PCI/MSI: Introduce pcim_enable_msi*() family helpers

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Suggested-by: Ben Hutchings <bhutchings@solarflare.com>
ipr: Do not call pci_disable_msi/msix() if pci_enable_msi/msix() failed

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
ipr: Make use of pcim_enable_msi/msix() interfaces

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
ixgbe: Make use of pcim_enable_msix_range() interface

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
ixgbevf: Make use of pcim_enable_msix_range() interface

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
megaraid: Make use of pcim_enable_msix() interface

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
ntb: Fix missed call to pci_enable_msix()

Current MSI-X enablement code assumes MSI-Xs were successfully
allocated in case less than requested vectors were available.
That assumption is wrong, since MSI-Xs should be enabled with
a repeated call to pci_enable_msix(). This update fixes this.

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
Acked-by: Jon Mason <jon.mason@intel.com>
ntb: Make use of pcim_enable_msix/msix_exact() interfaces

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
qib: Make use of pcim_enable_msix() and pci_msix_table_size() interfaces

Signed-off-by: Alexander Gordeev <agordeev@redhat.com>