lkml.org 
[lkml]   [2006]   [Oct]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.18: hda_intel: azx_get_response timeout, switching to single_cmd mode...
    At Wed, 04 Oct 2006 08:16:17 -0700,
    Jeremy Fitzhardinge wrote:
    >
    > Takashi Iwai wrote:
    > > At least, you have to see a different kernel message after the
    > > patch... Could you confirm it?
    > >
    >
    > No, it looks like the same message as ever:
    >
    > hda_intel: azx_get_response timeout, switching to polling mode...
    > hda_intel: azx_get_response timeout, switching to single_cmd mode...

    A counter of RIRB pending commands could overflow the size of RIRB
    when a bunch of commands are sent but not synced. This may lead to
    the azx_get_response error, theoretically.

    Could you apply the patch below and check what values are shown there?


    thanks,

    Takashi

    diff -r 4963791e6192 sound/pci/hda/hda_intel.c
    --- a/sound/pci/hda/hda_intel.c Wed Oct 04 18:38:16 2006 +0200
    +++ b/sound/pci/hda/hda_intel.c Wed Oct 04 20:59:57 2006 +0200
    @@ -325,6 +325,7 @@ struct azx {
    /* CORB/RIRB */
    struct azx_rb corb;
    struct azx_rb rirb;
    + int max_rirb_cmds;

    /* BDL, CORB/RIRB and position buffers */
    struct snd_dma_buffer bdl;
    @@ -480,6 +481,8 @@ static int azx_corb_send_cmd(struct hda_

    spin_lock_irq(&chip->reg_lock);
    chip->rirb.cmds++;
    + if (chip->rirb.cmds > chip->max_rirb_cmds)
    + chip->max_rirb_cmds = chip->rirb.cmds;
    chip->corb.buf[wp] = cpu_to_le32(val);
    azx_writel(chip, CORBWP, wp);
    spin_unlock_irq(&chip->reg_lock);
    @@ -538,12 +541,16 @@ static unsigned int azx_rirb_get_respons
    if (!chip->polling_mode) {
    snd_printk(KERN_WARNING "hda_intel: azx_get_response timeout, "
    "switching to polling mode...\n");
    + snd_printk(KERN_WARNING " RIRB pending = %d, peak = %d\n",
    + chip->rirb.cmds, chip->max_rirb_cmds);
    chip->polling_mode = 1;
    goto again;
    }

    snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
    "switching to single_cmd mode...\n");
    + snd_printk(KERN_ERR " RIRB pending = %d, peak = %d\n",
    + chip->rirb.cmds, chip->max_rirb_cmds);
    chip->rirb.rp = azx_readb(chip, RIRBWP);
    chip->rirb.cmds = 0;
    /* switch to single_cmd mode */
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-10-04 21:07    [W:0.021 / U:97.620 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site