summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-03-01 07:06:33 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-03-01 07:06:33 -0800
commit8813723a4089cbfe641a4f5eaf31014bec4fe30e (patch)
tree0eeb4d956a88630e5d006f520ebe644d82bd984c /drivers/base
parenta4f10cfd56ed9a90677f4d0293908ead2935b07a (diff)
[PATCH] firmware loader: pin firmware module
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.
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/firmware_class.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 2d5106325123..81609ffbd1d7 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -263,6 +263,8 @@ fw_class_dev_release(struct class_device *class_dev)
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 *fw, struct class_device **class_dev_p,
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;