Эх сурвалжийг харах

ALSA: hda - Avoid possible race of beep on/off

Call cancel_work_sync() when turning off the beep switch so that the
mute call is executed in a proper order.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 13 жил өмнө
parent
commit
3fd877d32c

+ 3 - 2
sound/pci/hda/hda_beep.c

@@ -165,12 +165,13 @@ static int snd_hda_do_attach(struct hda_beep *beep)
 int snd_hda_enable_beep_device(struct hda_codec *codec, int enable)
 int snd_hda_enable_beep_device(struct hda_codec *codec, int enable)
 {
 {
 	struct hda_beep *beep = codec->beep;
 	struct hda_beep *beep = codec->beep;
-	enable = !!enable;
-	if (beep == NULL)
+	if (!beep)
 		return 0;
 		return 0;
+	enable = !!enable;
 	if (beep->enabled != enable) {
 	if (beep->enabled != enable) {
 		beep->enabled = enable;
 		beep->enabled = enable;
 		if (!enable) {
 		if (!enable) {
+			cancel_work_sync(&beep->beep_work);
 			/* turn off beep */
 			/* turn off beep */
 			snd_hda_codec_write(beep->codec, beep->nid, 0,
 			snd_hda_codec_write(beep->codec, beep->nid, 0,
 						  AC_VERB_SET_BEEP_CONTROL, 0);
 						  AC_VERB_SET_BEEP_CONTROL, 0);