Browse Source

[ALSA] hda-intel - fix a race in dynamic power managment

codec->power_transition is supposed to be true while codec is going
to be shut off if in the mean time somebody calls snd_hda_power_up,
hda_power_work will not shut down the codec, but nether will clear
codec->power_transition, thus it stays on forever. Fix this.

Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Maxim Levitsky 17 năm trước cách đây
mục cha
commit
2e4924628a
1 tập tin đã thay đổi với 3 bổ sung1 xóa
  1. 3 1
      sound/pci/hda/hda_codec.c

+ 3 - 1
sound/pci/hda/hda_codec.c

@@ -2195,8 +2195,10 @@ static void hda_power_work(struct work_struct *work)
 	struct hda_codec *codec =
 		container_of(work, struct hda_codec, power_work.work);
 
-	if (!codec->power_on || codec->power_count)
+	if (!codec->power_on || codec->power_count) {
+		codec->power_transition = 0;
 		return;
+	}
 
 	hda_call_codec_suspend(codec);
 	if (codec->bus->ops.pm_notify)