Skip to content

Commit

Permalink
Merge tag 'pci-v5.0-fixes-2' of git://git.kernel.org/pub/scm/linux/ke…
Browse files Browse the repository at this point in the history
…rnel/git/helgaas/pci

Pull PCI fixes from Bjorn Helgaas::

 - Fix PCI kconfig menu organization (Rob Herring)

 - Fix pci_alloc_irq_vectors_affinity() error return to allow "reduce
   and retry" for drivers using IRQ sets (Ming Lei)

 - Fix "pci=disable_acs_redir" initdata use-after-free problem (Logan
   Gunthorpe)

* tag 'pci-v5.0-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
  PCI: Fix __initdata issue with "pci=disable_acs_redir" parameter
  PCI/MSI: Return -ENOSPC from pci_alloc_irq_vectors_affinity()
  PCI: Fix PCI kconfig menu organization
  • Loading branch information
torvalds committed Jan 18, 2019
2 parents 8b4fe58 + d2fd6e8 commit d28f3e7
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 24 deletions.
22 changes: 8 additions & 14 deletions drivers/pci/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@ menuconfig PCI
support for PCI-X and the foundations for PCI Express support.
Say 'Y' here unless you know what you are doing.

if PCI

config PCI_DOMAINS
bool
depends on PCI

config PCI_DOMAINS_GENERIC
bool
depends on PCI
select PCI_DOMAINS

config PCI_SYSCALL
Expand All @@ -37,7 +38,6 @@ source "drivers/pci/pcie/Kconfig"

config PCI_MSI
bool "Message Signaled Interrupts (MSI and MSI-X)"
depends on PCI
select GENERIC_MSI_IRQ
help
This allows device drivers to enable MSI (Message Signaled
Expand All @@ -59,15 +59,14 @@ config PCI_MSI_IRQ_DOMAIN
config PCI_QUIRKS
default y
bool "Enable PCI quirk workarounds" if EXPERT
depends on PCI
help
This enables workarounds for various PCI chipset bugs/quirks.
Disable this only if your target machine is unaffected by PCI
quirks.

config PCI_DEBUG
bool "PCI Debugging"
depends on PCI && DEBUG_KERNEL
depends on DEBUG_KERNEL
help
Say Y here if you want the PCI core to produce a bunch of debug
messages to the system log. Select this if you are having a
Expand All @@ -77,7 +76,6 @@ config PCI_DEBUG

config PCI_REALLOC_ENABLE_AUTO
bool "Enable PCI resource re-allocation detection"
depends on PCI
depends on PCI_IOV
help
Say Y here if you want the PCI core to detect if PCI resource
Expand All @@ -90,7 +88,6 @@ config PCI_REALLOC_ENABLE_AUTO

config PCI_STUB
tristate "PCI Stub driver"
depends on PCI
help
Say Y or M here if you want be able to reserve a PCI device
when it is going to be assigned to a guest operating system.
Expand All @@ -99,7 +96,6 @@ config PCI_STUB

config PCI_PF_STUB
tristate "PCI PF Stub driver"
depends on PCI
depends on PCI_IOV
help
Say Y or M here if you want to enable support for devices that
Expand All @@ -111,7 +107,7 @@ config PCI_PF_STUB

config XEN_PCIDEV_FRONTEND
tristate "Xen PCI Frontend"
depends on PCI && X86 && XEN
depends on X86 && XEN
select PCI_XEN
select XEN_XENBUS_FRONTEND
default y
Expand All @@ -133,7 +129,6 @@ config PCI_BRIDGE_EMUL

config PCI_IOV
bool "PCI IOV support"
depends on PCI
select PCI_ATS
help
I/O Virtualization is a PCI feature supported by some devices
Expand All @@ -144,7 +139,6 @@ config PCI_IOV

config PCI_PRI
bool "PCI PRI support"
depends on PCI
select PCI_ATS
help
PRI is the PCI Page Request Interface. It allows PCI devices that are
Expand All @@ -154,7 +148,6 @@ config PCI_PRI

config PCI_PASID
bool "PCI PASID support"
depends on PCI
select PCI_ATS
help
Process Address Space Identifiers (PASIDs) can be used by PCI devices
Expand All @@ -167,7 +160,7 @@ config PCI_PASID

config PCI_P2PDMA
bool "PCI peer-to-peer transfer support"
depends on PCI && ZONE_DEVICE
depends on ZONE_DEVICE
select GENERIC_ALLOCATOR
help
Enableѕ drivers to do PCI peer-to-peer transactions to and from
Expand All @@ -184,12 +177,11 @@ config PCI_P2PDMA

config PCI_LABEL
def_bool y if (DMI || ACPI)
depends on PCI
select NLS

config PCI_HYPERV
tristate "Hyper-V PCI Frontend"
depends on PCI && X86 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && X86_64
depends on X86 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && X86_64
help
The PCI device frontend driver allows the kernel to import arbitrary
PCI devices from a PCI backend to support PCI driver domains.
Expand All @@ -198,3 +190,5 @@ source "drivers/pci/hotplug/Kconfig"
source "drivers/pci/controller/Kconfig"
source "drivers/pci/endpoint/Kconfig"
source "drivers/pci/switch/Kconfig"

endif
22 changes: 13 additions & 9 deletions drivers/pci/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1168,7 +1168,8 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
const struct irq_affinity *affd)
{
static const struct irq_affinity msi_default_affd;
int vecs = -ENOSPC;
int msix_vecs = -ENOSPC;
int msi_vecs = -ENOSPC;

if (flags & PCI_IRQ_AFFINITY) {
if (!affd)
Expand All @@ -1179,16 +1180,17 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
}

if (flags & PCI_IRQ_MSIX) {
vecs = __pci_enable_msix_range(dev, NULL, min_vecs, max_vecs,
affd);
if (vecs > 0)
return vecs;
msix_vecs = __pci_enable_msix_range(dev, NULL, min_vecs,
max_vecs, affd);
if (msix_vecs > 0)
return msix_vecs;
}

if (flags & PCI_IRQ_MSI) {
vecs = __pci_enable_msi_range(dev, min_vecs, max_vecs, affd);
if (vecs > 0)
return vecs;
msi_vecs = __pci_enable_msi_range(dev, min_vecs, max_vecs,
affd);
if (msi_vecs > 0)
return msi_vecs;
}

/* use legacy irq if allowed */
Expand All @@ -1199,7 +1201,9 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
}
}

return vecs;
if (msix_vecs == -ENOSPC)
return -ENOSPC;
return msi_vecs;
}
EXPORT_SYMBOL(pci_alloc_irq_vectors_affinity);

Expand Down
3 changes: 2 additions & 1 deletion drivers/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -6195,7 +6195,8 @@ static int __init pci_setup(char *str)
} else if (!strncmp(str, "pcie_scan_all", 13)) {
pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
} else if (!strncmp(str, "disable_acs_redir=", 18)) {
disable_acs_redir_param = str + 18;
disable_acs_redir_param =
kstrdup(str + 18, GFP_KERNEL);
} else {
printk(KERN_ERR "PCI: Unknown option `%s'\n",
str);
Expand Down

0 comments on commit d28f3e7

Please sign in to comment.