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

Commit 3fdffbe5 authored by Takashi Iwai's avatar Takashi Iwai Committed by Ruchi Kandoi
Browse files

firmware: Avoid deadlock of usermodehelper lock at shutdown



When a system goes to reboot/shutdown, it tries to disable the
usermode helper via usermodehelper_disable().  This might be blocked
when a driver tries to load a firmware beforehand and it's stuck by
some reason.  For example, dell_rbu driver loads the firmware in
non-hotplug mode and waits for user-space clearing the loading sysfs
flag.  If user-space doesn't clear the flag, it waits forever, thus
blocks the reboot, too.

As a workaround, in this patch, the firmware class driver registers a
reboot notifier so that it can abort all pending f/w bufs before
issuing usermodehelper_disable().

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Acked-by: default avatarMing Lei <ming.lei@canonical.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>

Conflicts:
	drivers/base/firmware_class.c

Change-Id: I7ff6c198cd34090e55845b9d4035b1e5dc86226b
parent 4bd2cebc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -925,6 +925,10 @@ static int _request_firmware_load(struct firmware_priv *fw_priv,
		kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD);
	}

	mutex_lock(&fw_lock);
	list_add(&buf->pending_list, &pending_fw_head);
	mutex_unlock(&fw_lock);

	wait_for_completion(&buf->completion);

	cancel_delayed_work_sync(&fw_priv->timeout_work);