summaryrefslogtreecommitdiff
path: root/drivers/base
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-02-25 16:23:39 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-02-25 16:23:39 -0800
commit6a2ea2b83961777d38f871ef4328fc72162512c6 (patch)
tree2026f847c1d7ff4ac67211d47b71da26c7f600f7 /drivers/base
parent9bf6f993e31d3086899e0a5e88dac5f88d5f4d37 (diff)
[PATCH] request_firmware(): misc fixes
From: Manuel Estrada Sainz <ranty@ranty.pantax.net> Based on patch and suggestions from Dmitry Torokhov - use vfree to free vmalloc memory. - Make sure fw_setup_class_device sets *class_dev_p to NULL in all case of error. - Fix error handling in firmware_class_init.
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/firmware_class.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 7b3d86b00101..0ba39fecfa24 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -119,7 +119,7 @@ firmware_loading_store(struct class_device *class_dev,
complete(&fw_priv->completion);
break;
case 1:
- kfree(fw_priv->fw->data);
+ vfree(fw_priv->fw->data);
fw_priv->fw->data = NULL;
fw_priv->fw->size = 0;
fw_priv->alloc_size = 0;
@@ -297,6 +297,7 @@ fw_setup_class_device(struct class_device **class_dev_p,
}
memset(fw_priv->fw, 0, sizeof (*fw_priv->fw));
+ *class_dev_p = class_dev;
goto out;
error_remove_loading:
@@ -310,7 +311,6 @@ error_kfree:
kfree(class_dev);
*class_dev_p = NULL;
out:
- *class_dev_p = class_dev;
return retval;
}
static void
@@ -489,6 +489,7 @@ firmware_class_init(void)
error = class_register(&firmware_class);
if (error) {
printk(KERN_ERR "%s: class_register failed\n", __FUNCTION__);
+ return error;
}
error = class_create_file(&firmware_class, &class_attr_timeout);
if (error) {