Skip to content

Commit

Permalink
PCI: remove the broken PCI_MULTITHREAD_PROBE option
Browse files Browse the repository at this point in the history
This patch removes the PCI_MULTITHREAD_PROBE option that had already 
been marked as broken.

Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Adrian Bunk authored and Greg Kroah-Hartman committed May 3, 2007
1 parent 032de8e commit 5adc55d
Show file tree
Hide file tree
Showing 5 changed files with 3 additions and 83 deletions.
4 changes: 0 additions & 4 deletions Documentation/pci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,6 @@ initialization with a pointer to a structure describing the driver

err_handler See Documentation/pci-error-recovery.txt

multithread_probe Enable multi-threaded probe/scan. Driver must
provide its own locking/syncronization for init
operations if this is enabled.


The ID table is an array of struct pci_device_id entries ending with an
all-zero entry. Each entry consists of:
Expand Down
41 changes: 3 additions & 38 deletions drivers/base/dd.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,20 +226,17 @@ static int device_probe_drivers(void *data)
*
* Walk the list of drivers that the bus has and call
* driver_probe_device() for each pair. If a compatible
* pair is found, break out and return. If the bus specifies
* multithreaded probing, walking the list of drivers is done
* on a probing thread.
* pair is found, break out and return.
*
* Returns 1 if the device was bound to a driver;
* 0 if no matching device was found or multithreaded probing is done;
* 0 if no matching device was found;
* -ENODEV if the device is not registered.
*
* When called for a USB interface, @dev->parent->sem must be held.
*/
int device_attach(struct device * dev)
{
int ret = 0;
struct task_struct *probe_task = ERR_PTR(-ENOMEM);

down(&dev->sem);
if (dev->driver) {
Expand All @@ -251,12 +248,7 @@ int device_attach(struct device * dev)
ret = 0;
}
} else {
if (dev->bus->multithread_probe)
probe_task = kthread_run(device_probe_drivers, dev,
"probe-%s", dev->bus_id);
if(IS_ERR(probe_task))
ret = bus_for_each_drv(dev->bus, NULL, dev,
__device_attach);
ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);
}
up(&dev->sem);
return ret;
Expand Down Expand Up @@ -383,33 +375,6 @@ void driver_detach(struct device_driver * drv)
}
}

#ifdef CONFIG_PCI_MULTITHREAD_PROBE
static int __init wait_for_probes(void)
{
DEFINE_WAIT(wait);

printk(KERN_INFO "%s: waiting for %d threads\n", __FUNCTION__,
atomic_read(&probe_count));
if (!atomic_read(&probe_count))
return 0;
while (atomic_read(&probe_count)) {
prepare_to_wait(&probe_waitqueue, &wait, TASK_UNINTERRUPTIBLE);
if (atomic_read(&probe_count))
schedule();
}
finish_wait(&probe_waitqueue, &wait);
return 0;
}

core_initcall_sync(wait_for_probes);
postcore_initcall_sync(wait_for_probes);
arch_initcall_sync(wait_for_probes);
subsys_initcall_sync(wait_for_probes);
fs_initcall_sync(wait_for_probes);
device_initcall_sync(wait_for_probes);
late_initcall_sync(wait_for_probes);
#endif

EXPORT_SYMBOL_GPL(device_bind_driver);
EXPORT_SYMBOL_GPL(device_release_driver);
EXPORT_SYMBOL_GPL(device_attach);
Expand Down
25 changes: 0 additions & 25 deletions drivers/pci/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,6 @@ config PCI_MSI

If you don't know what to do here, say N.

config PCI_MULTITHREAD_PROBE
bool "PCI Multi-threaded probe (EXPERIMENTAL)"
depends on PCI && EXPERIMENTAL && BROKEN
help
Say Y here if you want the PCI core to spawn a new thread for
every PCI device that is probed. This can cause a huge
speedup in boot times on multiprocessor machines, and even a
smaller speedup on single processor machines.

But it can also cause lots of bad things to happen. A number
of PCI drivers cannot properly handle running in this way,
some will just not work properly at all, while others might
decide to blow up power supplies with a huge load all at once,
so use this option at your own risk.

It is very unwise to use this option if you are not using a
boot process that can handle devices being created in any
order. A program that can create persistent block and network
device names (like udev) is a good idea if you wish to use
this option.

Again, use this option at your own risk, you have been warned!

When in doubt, say N.

config PCI_DEBUG
bool "PCI Debugging"
depends on PCI && DEBUG_KERNEL
Expand Down
15 changes: 0 additions & 15 deletions drivers/pci/pci-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,6 @@
#include <linux/sched.h>
#include "pci.h"

/*
* Registration of PCI drivers and handling of hot-pluggable devices.
*/

/* multithreaded probe logic */
static int pci_multithread_probe =
#ifdef CONFIG_PCI_MULTITHREAD_PROBE
1;
#else
0;
#endif
__module_param_call("", pci_multithread_probe, param_set_bool, param_get_bool, &pci_multithread_probe, 0644);


/*
* Dynamic device IDs are disabled for !CONFIG_HOTPLUG
*/
Expand Down Expand Up @@ -569,7 +555,6 @@ struct bus_type pci_bus_type = {

static int __init pci_driver_init(void)
{
pci_bus_type.multithread_probe = pci_multithread_probe;
return bus_register(&pci_bus_type);
}

Expand Down
1 change: 0 additions & 1 deletion include/linux/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ struct bus_type {
int (*resume)(struct device * dev);

unsigned int drivers_autoprobe:1;
unsigned int multithread_probe:1;
};

extern int __must_check bus_register(struct bus_type * bus);
Expand Down

0 comments on commit 5adc55d

Please sign in to comment.