Loading drivers/base/firmware_class.c +11 −11 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ #include <linux/vmalloc.h> #include <linux/interrupt.h> #include <linux/bitops.h> #include <asm/semaphore.h> #include <linux/mutex.h> #include <linux/firmware.h> #include "base.h" Loading @@ -36,7 +36,7 @@ static int loading_timeout = 10; /* In seconds */ /* fw_lock could be moved to 'struct firmware_priv' but since it is just * guarding for corner cases a global lock should be OK */ static DECLARE_MUTEX(fw_lock); static DEFINE_MUTEX(fw_lock); struct firmware_priv { char fw_id[FIRMWARE_NAME_MAX]; Loading Loading @@ -142,9 +142,9 @@ firmware_loading_store(struct class_device *class_dev, switch (loading) { case 1: down(&fw_lock); mutex_lock(&fw_lock); if (!fw_priv->fw) { up(&fw_lock); mutex_unlock(&fw_lock); break; } vfree(fw_priv->fw->data); Loading @@ -152,7 +152,7 @@ firmware_loading_store(struct class_device *class_dev, fw_priv->fw->size = 0; fw_priv->alloc_size = 0; set_bit(FW_STATUS_LOADING, &fw_priv->status); up(&fw_lock); mutex_unlock(&fw_lock); break; case 0: if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) { Loading Loading @@ -185,7 +185,7 @@ firmware_data_read(struct kobject *kobj, struct firmware *fw; ssize_t ret_count = count; down(&fw_lock); mutex_lock(&fw_lock); fw = fw_priv->fw; if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { ret_count = -ENODEV; Loading @@ -200,7 +200,7 @@ firmware_data_read(struct kobject *kobj, memcpy(buffer, fw->data + offset, ret_count); out: up(&fw_lock); mutex_unlock(&fw_lock); return ret_count; } Loading Loading @@ -253,7 +253,7 @@ firmware_data_write(struct kobject *kobj, if (!capable(CAP_SYS_RAWIO)) return -EPERM; down(&fw_lock); mutex_lock(&fw_lock); fw = fw_priv->fw; if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { retval = -ENODEV; Loading @@ -268,7 +268,7 @@ firmware_data_write(struct kobject *kobj, fw->size = max_t(size_t, offset + count, fw->size); retval = count; out: up(&fw_lock); mutex_unlock(&fw_lock); return retval; } Loading Loading @@ -436,14 +436,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name, } else wait_for_completion(&fw_priv->completion); down(&fw_lock); mutex_lock(&fw_lock); if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) { retval = -ENOENT; release_firmware(fw_priv->fw); *firmware_p = NULL; } fw_priv->fw = NULL; up(&fw_lock); mutex_unlock(&fw_lock); class_device_unregister(class_dev); goto out; Loading Loading
drivers/base/firmware_class.c +11 −11 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ #include <linux/vmalloc.h> #include <linux/interrupt.h> #include <linux/bitops.h> #include <asm/semaphore.h> #include <linux/mutex.h> #include <linux/firmware.h> #include "base.h" Loading @@ -36,7 +36,7 @@ static int loading_timeout = 10; /* In seconds */ /* fw_lock could be moved to 'struct firmware_priv' but since it is just * guarding for corner cases a global lock should be OK */ static DECLARE_MUTEX(fw_lock); static DEFINE_MUTEX(fw_lock); struct firmware_priv { char fw_id[FIRMWARE_NAME_MAX]; Loading Loading @@ -142,9 +142,9 @@ firmware_loading_store(struct class_device *class_dev, switch (loading) { case 1: down(&fw_lock); mutex_lock(&fw_lock); if (!fw_priv->fw) { up(&fw_lock); mutex_unlock(&fw_lock); break; } vfree(fw_priv->fw->data); Loading @@ -152,7 +152,7 @@ firmware_loading_store(struct class_device *class_dev, fw_priv->fw->size = 0; fw_priv->alloc_size = 0; set_bit(FW_STATUS_LOADING, &fw_priv->status); up(&fw_lock); mutex_unlock(&fw_lock); break; case 0: if (test_bit(FW_STATUS_LOADING, &fw_priv->status)) { Loading Loading @@ -185,7 +185,7 @@ firmware_data_read(struct kobject *kobj, struct firmware *fw; ssize_t ret_count = count; down(&fw_lock); mutex_lock(&fw_lock); fw = fw_priv->fw; if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { ret_count = -ENODEV; Loading @@ -200,7 +200,7 @@ firmware_data_read(struct kobject *kobj, memcpy(buffer, fw->data + offset, ret_count); out: up(&fw_lock); mutex_unlock(&fw_lock); return ret_count; } Loading Loading @@ -253,7 +253,7 @@ firmware_data_write(struct kobject *kobj, if (!capable(CAP_SYS_RAWIO)) return -EPERM; down(&fw_lock); mutex_lock(&fw_lock); fw = fw_priv->fw; if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) { retval = -ENODEV; Loading @@ -268,7 +268,7 @@ firmware_data_write(struct kobject *kobj, fw->size = max_t(size_t, offset + count, fw->size); retval = count; out: up(&fw_lock); mutex_unlock(&fw_lock); return retval; } Loading Loading @@ -436,14 +436,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name, } else wait_for_completion(&fw_priv->completion); down(&fw_lock); mutex_lock(&fw_lock); if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) { retval = -ENOENT; release_firmware(fw_priv->fw); *firmware_p = NULL; } fw_priv->fw = NULL; up(&fw_lock); mutex_unlock(&fw_lock); class_device_unregister(class_dev); goto out; Loading