Merge branch 'pci/misc' into next
* pci/misc: PCI: Warn on driver probe return value greater than zero PCI: Drop warning about drivers that don't use pci_set_master() PCI: Workaround missing pci_set_master in pci drivers PCI: Update pcie_ports 'auto' behavior for non-ACPI platforms
This commit is contained in:
Коммит
c245f24220
|
@ -267,11 +267,19 @@ static long local_pci_probe(void *_ddi)
|
|||
pm_runtime_get_sync(dev);
|
||||
pci_dev->driver = pci_drv;
|
||||
rc = pci_drv->probe(pci_dev, ddi->id);
|
||||
if (rc) {
|
||||
if (!rc)
|
||||
return rc;
|
||||
if (rc < 0) {
|
||||
pci_dev->driver = NULL;
|
||||
pm_runtime_put_sync(dev);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* Probe function should return < 0 for failure, 0 for success
|
||||
* Treat values > 0 as success, but warn.
|
||||
*/
|
||||
dev_warn(dev, "Driver probe function unexpectedly returned %d\n", rc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
|
||||
|
|
|
@ -1155,8 +1155,12 @@ static void pci_enable_bridge(struct pci_dev *dev)
|
|||
|
||||
pci_enable_bridge(dev->bus->self);
|
||||
|
||||
if (pci_is_enabled(dev))
|
||||
if (pci_is_enabled(dev)) {
|
||||
if (!dev->is_busmaster)
|
||||
pci_set_master(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
retval = pci_enable_device(dev);
|
||||
if (retval)
|
||||
dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
|
||||
|
|
|
@ -260,13 +260,14 @@ static int get_port_device_capability(struct pci_dev *dev)
|
|||
if (pcie_ports_disabled)
|
||||
return 0;
|
||||
|
||||
err = pcie_port_platform_notify(dev, &cap_mask);
|
||||
if (!pcie_ports_auto) {
|
||||
cap_mask = PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP
|
||||
| PCIE_PORT_SERVICE_VC;
|
||||
if (pci_aer_available())
|
||||
cap_mask |= PCIE_PORT_SERVICE_AER;
|
||||
} else if (err) {
|
||||
|
||||
if (pcie_ports_auto) {
|
||||
err = pcie_port_platform_notify(dev, &cap_mask);
|
||||
if (err)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче