From: Kenji Kaneshige As mentioned in Documentation/pci.txt, pci device driver should call pci_disable_device() when it decides to stop using the device. But there are some drivers that don't use pci_disable_device() so far. This patch adds warning messages that are displayed if the device is removed without properly calling pci_disable_device(). 'WARN_ON(1)' is commented out for now because I guess many people (including some distros) enables 'CONFIG_DEBUG_KERNEL'. People might be surprised if many stack dumps are displayed on their console. Signed-off-by: Kenji Kaneshige Signed-off-by: Andrew Morton --- 25-akpm/drivers/pci/pci-driver.c | 13 +++++++++++++ 1 files changed, 13 insertions(+) diff -puN drivers/pci/pci-driver.c~missing-pci_disable_device drivers/pci/pci-driver.c --- 25/drivers/pci/pci-driver.c~missing-pci_disable_device 2004-09-12 22:58:22.055185008 -0700 +++ 25-akpm/drivers/pci/pci-driver.c 2004-09-12 22:58:22.060184248 -0700 @@ -291,6 +291,19 @@ static int pci_device_remove(struct devi drv->remove(pci_dev); pci_dev->driver = NULL; } + +#ifdef CONFIG_DEBUG_KERNEL + /* + * If the driver decides to stop using the device, it should + * call pci_disable_device(). + */ + if (pci_dev->is_enabled) { + dev_warn(&pci_dev->dev, "Device was removed without properly " + "calling pci_disable_device(). This may need fixing.\n"); + /* WARN_ON(1); */ + } +#endif /* CONFIG_DEBUG_KERNEL */ + pci_dev_put(pci_dev); return 0; } _