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

Commit f3f7c183 authored by Clemens Ladisch's avatar Clemens Ladisch Committed by Takashi Iwai
Browse files

ALSA: isight: fix locking



Lockdep complains about conflicts between isight->mutex,
ALSA's register_mutex, mm->mmap_sem, and pcm->open_mutex.

This can be fixed by moving the calls to isight_pcm_abort(),
snd_card_disconnect(), and fw_iso_resources_update() out of
isight->mutex.  These functions are designed to be called
asynchronously; the mutex needs to protect only the device
streaming state modified by isight_start/stop_streaming().

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
Reported-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 3cabffd7
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -692,9 +692,11 @@ static int isight_remove(struct device *dev)
{
	struct isight *isight = dev_get_drvdata(dev);

	mutex_lock(&isight->mutex);
	isight_pcm_abort(isight);

	snd_card_disconnect(isight->card);

	mutex_lock(&isight->mutex);
	isight_stop_streaming(isight);
	mutex_unlock(&isight->mutex);

@@ -707,13 +709,14 @@ static void isight_bus_reset(struct fw_unit *unit)
{
	struct isight *isight = dev_get_drvdata(&unit->device);

	mutex_lock(&isight->mutex);
	if (fw_iso_resources_update(&isight->resources) < 0) {
		isight_pcm_abort(isight);

		mutex_lock(&isight->mutex);
		isight_stop_streaming(isight);
	}
		mutex_unlock(&isight->mutex);
	}
}

static const struct ieee1394_device_id isight_id_table[] = {
	{