|
@@ -562,6 +562,22 @@ static void fw_load_abort(struct firmware_priv *fw_priv)
|
|
|
|
|
|
static LIST_HEAD(pending_fw_head);
|
|
static LIST_HEAD(pending_fw_head);
|
|
|
|
|
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
|
+/* kill pending requests without uevent to avoid blocking suspend */
|
|
|
|
+static void kill_requests_without_uevent(void)
|
|
|
|
+{
|
|
|
|
+ struct firmware_buf *buf;
|
|
|
|
+ struct firmware_buf *next;
|
|
|
|
+
|
|
|
|
+ mutex_lock(&fw_lock);
|
|
|
|
+ list_for_each_entry_safe(buf, next, &pending_fw_head, pending_list) {
|
|
|
|
+ if (!buf->need_uevent)
|
|
|
|
+ __fw_load_abort(buf);
|
|
|
|
+ }
|
|
|
|
+ mutex_unlock(&fw_lock);
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
/* reboot notifier for avoid deadlock with usermode_lock */
|
|
/* reboot notifier for avoid deadlock with usermode_lock */
|
|
static int fw_shutdown_notify(struct notifier_block *unused1,
|
|
static int fw_shutdown_notify(struct notifier_block *unused1,
|
|
unsigned long unused2, void *unused3)
|
|
unsigned long unused2, void *unused3)
|
|
@@ -1048,22 +1064,6 @@ static int fw_load_from_user_helper(struct firmware *firmware,
|
|
return _request_firmware_load(fw_priv, opt_flags, timeout);
|
|
return _request_firmware_load(fw_priv, opt_flags, timeout);
|
|
}
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_PM_SLEEP
|
|
|
|
-/* kill pending requests without uevent to avoid blocking suspend */
|
|
|
|
-static void kill_requests_without_uevent(void)
|
|
|
|
-{
|
|
|
|
- struct firmware_buf *buf;
|
|
|
|
- struct firmware_buf *next;
|
|
|
|
-
|
|
|
|
- mutex_lock(&fw_lock);
|
|
|
|
- list_for_each_entry_safe(buf, next, &pending_fw_head, pending_list) {
|
|
|
|
- if (!buf->need_uevent)
|
|
|
|
- __fw_load_abort(buf);
|
|
|
|
- }
|
|
|
|
- mutex_unlock(&fw_lock);
|
|
|
|
-}
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
#else /* CONFIG_FW_LOADER_USER_HELPER */
|
|
#else /* CONFIG_FW_LOADER_USER_HELPER */
|
|
static inline int
|
|
static inline int
|
|
fw_load_from_user_helper(struct firmware *firmware, const char *name,
|
|
fw_load_from_user_helper(struct firmware *firmware, const char *name,
|