Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e771d1aa authored by Ming Lei's avatar Ming Lei Committed by Greg Kroah-Hartman
Browse files

driver core: firmware loader: don't cache FW_ACTION_NOHOTPLUG firmware



Generally there are only two drivers which don't need uevent to
handle firmware loading, so don't cache these firmwares during
suspend for these drivers since doing that may block firmware
loading forever.

Both the two drivers are involved in private firmware images, so
they don't hit in direct loading too.

Signed-off-by: default avatarMing Lei <ming.lei@canonical.com>
Reviewed-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f8878dcb
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -993,7 +993,8 @@ _request_firmware_prepare(struct firmware **firmware_p, const char *name,
	return 1; /* need to load */
}

static int assign_firmware_buf(struct firmware *fw, struct device *device)
static int assign_firmware_buf(struct firmware *fw, struct device *device,
				bool skip_cache)
{
	struct firmware_buf *buf = fw->priv;

@@ -1010,7 +1011,7 @@ static int assign_firmware_buf(struct firmware *fw, struct device *device)
	 * device may has been deleted already, but the problem
	 * should be fixed in devres or driver core.
	 */
	if (device)
	if (device && !skip_cache)
		fw_add_devm_name(device, buf->fw_id);

	/*
@@ -1066,8 +1067,10 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
	if (!fw_get_filesystem_firmware(device, fw->priv))
		ret = fw_load_from_user_helper(fw, name, device,
					       uevent, nowait, timeout);

	/* don't cache firmware handled without uevent */
	if (!ret)
		ret = assign_firmware_buf(fw, device);
		ret = assign_firmware_buf(fw, device, !uevent);

	usermodehelper_read_unlock();