When using PCI_PROBE_ONLY, Linux does not assign resource to PCI devices. This causes error when calling the pci_enable_resources function, and not allowing driver to set the PCI_COMMAND_IO and PCI_COMMAND_MEMORY flag in the config space of endpoint device since it checks if the resource parent is set. This patch adds the check in driver/pci/pci.c to avoid redundant arch-specific code. For example, it was in arch/arm/kernel/bios32.c and also needed in the arch/arm64/kernel/pci.c. This should not affect other architecture since most of them either override the weak version of pcibios_enable_device() or does not set PCI_PROBE_ONLY. Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> Cc: Arnd Bergmann <arnd@xxxxxxxx> Cc: Will Deacon <will.deacon@xxxxxxx> Cc: Marc Zyngier <marc.zyngier@xxxxxxx> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx> Cc: Catalin Marinas <Catalin.Marinas@xxxxxxx> Cc: Liviu Dudau <Liviu.Dudau@xxxxxxx> Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx> --- NOTE: Alpha seems to be the only arch that dooes not define pcibios_enable_device() and also set PCI_PROBE_ONLY flag. I am not sure if this would cause any issues. I might need help testing on Alpha. arch/arm/kernel/bios32.c | 12 ------------ drivers/pci/pci.c | 3 +++ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index a4effd6..091f508 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -607,18 +607,6 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res, return start; } -/** - * pcibios_enable_device - Enable I/O and memory. - * @dev: PCI device to be enabled - */ -int pcibios_enable_device(struct pci_dev *dev, int mask) -{ - if (pci_has_flag(PCI_PROBE_ONLY)) - return 0; - - return pci_enable_resources(dev, mask); -} - int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, enum pci_mmap_state mmap_state, int write_combine) { diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e9d4fd8..1748f95 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1187,6 +1187,9 @@ EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state); int __weak pcibios_enable_device(struct pci_dev *dev, int bars) { + if (pci_has_flag(PCI_PROBE_ONLY)) + return 0; + return pci_enable_resources(dev, bars); } -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html