diff options
-rw-r--r-- | drivers/base/firmware_class.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index e4107d5f036b..10a4467c63f1 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c | |||
@@ -865,8 +865,15 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent, | |||
865 | goto err_del_dev; | 865 | goto err_del_dev; |
866 | } | 866 | } |
867 | 867 | ||
868 | mutex_lock(&fw_lock); | ||
869 | list_add(&buf->pending_list, &pending_fw_head); | ||
870 | mutex_unlock(&fw_lock); | ||
871 | |||
868 | retval = device_create_file(f_dev, &dev_attr_loading); | 872 | retval = device_create_file(f_dev, &dev_attr_loading); |
869 | if (retval) { | 873 | if (retval) { |
874 | mutex_lock(&fw_lock); | ||
875 | list_del_init(&buf->pending_list); | ||
876 | mutex_unlock(&fw_lock); | ||
870 | dev_err(f_dev, "%s: device_create_file failed\n", __func__); | 877 | dev_err(f_dev, "%s: device_create_file failed\n", __func__); |
871 | goto err_del_bin_attr; | 878 | goto err_del_bin_attr; |
872 | } | 879 | } |
@@ -881,10 +888,6 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent, | |||
881 | kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD); | 888 | kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD); |
882 | } | 889 | } |
883 | 890 | ||
884 | mutex_lock(&fw_lock); | ||
885 | list_add(&buf->pending_list, &pending_fw_head); | ||
886 | mutex_unlock(&fw_lock); | ||
887 | |||
888 | wait_for_completion(&buf->completion); | 891 | wait_for_completion(&buf->completion); |
889 | 892 | ||
890 | cancel_delayed_work_sync(&fw_priv->timeout_work); | 893 | cancel_delayed_work_sync(&fw_priv->timeout_work); |