From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>

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 <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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;
 }
_