From: Takashi Iwai Date: Fri, 18 Jan 2008 14:32:32 +0000 (+0100) Subject: [ALSA] hda-intel - Make azx_get_response() a bit more robust X-Git-Tag: v2.6.25-rc1~1127^2~77 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28a0d9df0706c523d3bb8de18892c76b78c2e428;p=linux-2.6 [ALSA] hda-intel - Make azx_get_response() a bit more robust In azx_[rirb_]get_response(), the timeout is checked at the end of the loop. It's better to be checked just after the check of the RIRB index to avoid a bogus error with a too long msleep(). Signed-off-by: Takashi Iwai Signed-off-by: Jaroslav Kysela --- diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index fe07bdff60..be5cbbcb6e 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -551,7 +551,7 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec) again: timeout = jiffies + msecs_to_jiffies(1000); - do { + for (;;) { if (chip->polling_mode) { spin_lock_irq(&chip->reg_lock); azx_update_rirb(chip); @@ -559,13 +559,15 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec) } if (!chip->rirb.cmds) return chip->rirb.res; /* the last value */ + if (time_after(jiffies, timeout)) + break; if (codec->bus->needs_damn_long_delay) msleep(2); /* temporary workaround */ else { udelay(10); cond_resched(); } - } while (time_after_eq(timeout, jiffies)); + } if (chip->msi) { snd_printk(KERN_WARNING "hda_intel: No response from codec, "