From: Dmitry Torokhov <dtor_core@ameritech.net>

We need to pin the firmware loader module until the last reference to the
firmware class device is dropped and the class device is destroyed.


---

 drivers/base/firmware_class.c |    6 ++++++
 1 files changed, 6 insertions(+)

diff -puN drivers/base/firmware_class.c~firmware-pin-module drivers/base/firmware_class.c
--- 25/drivers/base/firmware_class.c~firmware-pin-module	2004-02-28 22:48:02.000000000 -0800
+++ 25-akpm/drivers/base/firmware_class.c	2004-02-28 22:48:02.000000000 -0800
@@ -263,6 +263,8 @@ fw_class_dev_release(struct class_device
 
 	kfree(fw_priv);
 	kfree(class_dev);
+
+	module_put(THIS_MODULE);
 }
 
 static void
@@ -325,6 +327,7 @@ error_kfree:
 	kfree(class_dev);
 	return retval;
 }
+
 static int
 fw_setup_class_device(struct firmware *fw, struct class_device **class_dev_p,
 		      const char *fw_name, struct device *device)
@@ -338,6 +341,9 @@ fw_setup_class_device(struct firmware *f
 	if (retval)
 		goto out;
 
+	/* Need to pin this module until class device is destroyed */
+	__module_get(THIS_MODULE);
+
 	fw_priv = class_get_devdata(class_dev);
 
 	fw_priv->fw = fw;

_