diff options
| author | Andrew Morton <akpm@osdl.org> | 2004-02-25 16:23:39 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-02-25 16:23:39 -0800 |
| commit | 6a2ea2b83961777d38f871ef4328fc72162512c6 (patch) | |
| tree | 2026f847c1d7ff4ac67211d47b71da26c7f600f7 /drivers/base | |
| parent | 9bf6f993e31d3086899e0a5e88dac5f88d5f4d37 (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.c | 5 |
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) { |
