From: Dmitry Torokhov 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; _