mirror of https://gitee.com/openkylin/linux.git
[ALSA] hda-intel - Add barrier
Add proper barriers in the RIRB communication code. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
86d34b7ec8
commit
2add9b9253
|
@ -536,8 +536,9 @@ static void azx_update_rirb(struct azx *chip)
|
||||||
if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
|
if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
|
||||||
snd_hda_queue_unsol_event(chip->bus, res, res_ex);
|
snd_hda_queue_unsol_event(chip->bus, res, res_ex);
|
||||||
else if (chip->rirb.cmds) {
|
else if (chip->rirb.cmds) {
|
||||||
chip->rirb.cmds--;
|
|
||||||
chip->rirb.res = res;
|
chip->rirb.res = res;
|
||||||
|
smp_wmb();
|
||||||
|
chip->rirb.cmds--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -556,8 +557,10 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec)
|
||||||
azx_update_rirb(chip);
|
azx_update_rirb(chip);
|
||||||
spin_unlock_irq(&chip->reg_lock);
|
spin_unlock_irq(&chip->reg_lock);
|
||||||
}
|
}
|
||||||
if (!chip->rirb.cmds)
|
if (!chip->rirb.cmds) {
|
||||||
|
smp_rmb();
|
||||||
return chip->rirb.res; /* the last value */
|
return chip->rirb.res; /* the last value */
|
||||||
|
}
|
||||||
if (time_after(jiffies, timeout))
|
if (time_after(jiffies, timeout))
|
||||||
break;
|
break;
|
||||||
if (codec->bus->needs_damn_long_delay)
|
if (codec->bus->needs_damn_long_delay)
|
||||||
|
|
Loading…
Reference in New Issue