diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/pci/Kconfig | 25 | ||||
| -rw-r--r-- | drivers/pci/pci-driver.c | 11 |
2 files changed, 36 insertions, 0 deletions
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig index 4d762fc4878c..c27e782e6df9 100644 --- a/drivers/pci/Kconfig +++ b/drivers/pci/Kconfig | |||
| @@ -17,6 +17,31 @@ config PCI_MSI | |||
| 17 | 17 | ||
| 18 | If you don't know what to do here, say N. | 18 | If you don't know what to do here, say N. |
| 19 | 19 | ||
| 20 | config PCI_MULTITHREAD_PROBE | ||
| 21 | bool "PCI Multi-threaded probe (EXPERIMENTAL)" | ||
| 22 | depends on PCI && EXPERIMENTAL | ||
| 23 | help | ||
| 24 | Say Y here if you want the PCI core to spawn a new thread for | ||
| 25 | every PCI device that is probed. This can cause a huge | ||
| 26 | speedup in boot times on multiprocessor machines, and even a | ||
| 27 | smaller speedup on single processor machines. | ||
| 28 | |||
| 29 | But it can also cause lots of bad things to happen. A number | ||
| 30 | of PCI drivers can not properly handle running in this way, | ||
| 31 | some will just not work properly at all, while others might | ||
| 32 | decide to blow up power supplies with a huge load all at once, | ||
| 33 | so use this option at your own risk. | ||
| 34 | |||
| 35 | It is very unwise to use this option if you are not using a | ||
| 36 | boot process that can handle devices being created in any | ||
| 37 | order. A program that can create persistant block and network | ||
| 38 | device names (like udev) is a good idea if you wish to use | ||
| 39 | this option. | ||
| 40 | |||
| 41 | Again, use this option at your own risk, you have been warned! | ||
| 42 | |||
| 43 | When in doubt, say N. | ||
| 44 | |||
| 20 | config PCI_DEBUG | 45 | config PCI_DEBUG |
| 21 | bool "PCI Debugging" | 46 | bool "PCI Debugging" |
| 22 | depends on PCI && DEBUG_KERNEL | 47 | depends on PCI && DEBUG_KERNEL |
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 8948ac9ab681..d8ace1f90dd2 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -17,6 +17,16 @@ | |||
| 17 | * Registration of PCI drivers and handling of hot-pluggable devices. | 17 | * Registration of PCI drivers and handling of hot-pluggable devices. |
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | /* multithreaded probe logic */ | ||
| 21 | static int pci_multithread_probe = | ||
| 22 | #ifdef CONFIG_PCI_MULTITHREAD_PROBE | ||
| 23 | 1; | ||
| 24 | #else | ||
| 25 | 0; | ||
| 26 | #endif | ||
| 27 | __module_param_call("", pci_multithread_probe, param_set_bool, param_get_bool, &pci_multithread_probe, 0644); | ||
| 28 | |||
| 29 | |||
| 20 | /* | 30 | /* |
| 21 | * Dynamic device IDs are disabled for !CONFIG_HOTPLUG | 31 | * Dynamic device IDs are disabled for !CONFIG_HOTPLUG |
| 22 | */ | 32 | */ |
| @@ -408,6 +418,7 @@ int __pci_register_driver(struct pci_driver *drv, struct module *owner) | |||
| 408 | drv->driver.bus = &pci_bus_type; | 418 | drv->driver.bus = &pci_bus_type; |
| 409 | drv->driver.owner = owner; | 419 | drv->driver.owner = owner; |
| 410 | drv->driver.kobj.ktype = &pci_driver_kobj_type; | 420 | drv->driver.kobj.ktype = &pci_driver_kobj_type; |
| 421 | drv->driver.multithread_probe = pci_multithread_probe; | ||
| 411 | 422 | ||
| 412 | spin_lock_init(&drv->dynids.lock); | 423 | spin_lock_init(&drv->dynids.lock); |
| 413 | INIT_LIST_HEAD(&drv->dynids.list); | 424 | INIT_LIST_HEAD(&drv->dynids.list); |
