lkml.org 
[lkml]   [2005]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.12-mm1
    At Tue, 21 Jun 2005 18:27:54 +0200,
    I wrote:
    >
    > At Tue, 21 Jun 2005 14:40:21 +0200,
    > Brice Goglin wrote:
    > >
    > > Brice Goglin a écrit :
    > > > Hi Andrew,
    > > >
    > > > I got this oops during boot.
    > > > I copied it by hand since my machine crashed soon after (because of yenta).
    > > > It doesn't occur when snd_maestro3 is skipped by discover.
    > > >
    > > > divide error: 0000 [#1]
    > > > PREEMPT
    > > > ...
    > > > CPU: 0
    > > > EIP: 0060:[<e8957f9f>] Not tainted VLI
    > > > EFLAGS: 00000282 (2.6.12-mm1=LoulousMobiles)
    > > > EIP is at and_m3_enable_ints+0x1f/0x40 [snd_maestro3]
    > > > eax: 00000050 ebx: 00002400 ecx: 00000050 edx: 00002418
    > > > esi: 00002418 edi: 00000000 ebp: 000000f0 esp: e6f5ce54
    > > > ds: 007b es: 007b ss: 0068
    > > > Process modprobe (pid: 2405, threadinfo=e6f5c000, task=e7a31570)
    > > > ...
    > > > Call trace:
    > > > snd_m3_create+0x303/0x405 [snd_maestro3]
    > >
    > > The problem comes from git-alsa.patch.
    > > Adding HV_INT_ENABLE to outw in snd_m3_enable_ints (in
    > > sound/pci/maestro3.c) makes it generate a divide error
    > > on my laptop.
    > >
    > > The attached patch reverts this and fixes my problem.
    > >
    > > Signed-off-by: Brice Goglin <Brice.Goglin@ens-lyon.org>
    >
    > Well, this disables the h/w volume controls completely, so it's not a
    > generic solution.
    >
    > Does the patch below have any improvement?

    ... or this one if still causing a problem?


    Takashi

    --- linux/sound/pci/maestro3.c 20 May 2005 17:39:26 -0000 1.80
    +++ linux/sound/pci/maestro3.c 21 Jun 2005 16:31:10 -0000
    @@ -1050,11 +1050,6 @@
    * lowlevel functions
    */

    -#define big_mdelay(msec) do {\
    - set_current_state(TASK_UNINTERRUPTIBLE);\
    - schedule_timeout(((msec) * HZ) / 1000);\
    -} while (0)
    -
    inline static void snd_m3_outw(m3_t *chip, u16 value, unsigned long reg)
    {
    outw(value, chip->iobase + reg);
    @@ -1096,7 +1091,7 @@
    static void snd_m3_assp_halt(m3_t *chip)
    {
    chip->reset_state = snd_m3_inb(chip, DSP_PORT_CONTROL_REG_B) & ~REGB_STOP_CLOCK;
    - big_mdelay(10);
    + msleep(10);
    snd_m3_outb(chip, chip->reset_state & ~REGB_ENABLE_RESET, DSP_PORT_CONTROL_REG_B);
    }

    @@ -2108,9 +2103,9 @@
    */
    tmp = inw(io + RING_BUS_CTRL_A);
    outw(RAC_SDFS_ENABLE|LAC_SDFS_ENABLE, io + RING_BUS_CTRL_A);
    - big_mdelay(20);
    + msleep(20);
    outw(tmp, io + RING_BUS_CTRL_A);
    - big_mdelay(50);
    + msleep(50);
    #endif
    }

    @@ -2525,9 +2520,13 @@
    snd_m3_enable_ints(m3_t *chip)
    {
    unsigned long io = chip->iobase;
    + unsigned short val;

    /* TODO: MPU401 not supported yet */
    - outw(ASSP_INT_ENABLE | HV_INT_ENABLE /*| MPU401_INT_ENABLE*/, io + HOST_INT_CTRL);
    + val = ASSP_INT_ENABLE /*| MPU401_INT_ENABLE*/;
    + if (chip->hv_quirk && (chip->hv_quirk->config & HV_CTRL_ENABLE))
    + val |= HV_INT_ENABLE;
    + outw(val, io + HOST_INT_CTRL);
    outb(inb(io + ASSP_CONTROL_C) | ASSP_HOST_INT_ENABLE,
    io + ASSP_CONTROL_C);
    }
    @@ -2589,7 +2588,7 @@
    snd_pcm_suspend_all(chip->pcm);
    snd_ac97_suspend(chip->ac97);

    - big_mdelay(10); /* give the assp a chance to idle.. */
    + msleep(10); /* give the assp a chance to idle.. */

    snd_m3_assp_halt(chip);

    @@ -2697,6 +2696,8 @@
    }

    spin_lock_init(&chip->reg_lock);
    + spin_lock_init(&chip->ac97_lock);
    +
    switch (pci->device) {
    case PCI_DEVICE_ID_ESS_ALLEGRO:
    case PCI_DEVICE_ID_ESS_ALLEGRO_1:
    @@ -2765,6 +2766,8 @@
    snd_m3_assp_init(chip);
    snd_m3_amp_enable(chip, 1);

    + tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip);
    +
    if (request_irq(pci->irq, snd_m3_interrupt, SA_INTERRUPT|SA_SHIRQ,
    card->driver, (void *)chip)) {
    snd_printk("unable to grab IRQ %d\n", pci->irq);
    @@ -2786,9 +2789,6 @@
    return err;
    }

    - spin_lock_init(&chip->ac97_lock);
    - tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip);
    -
    if ((err = snd_m3_mixer(chip)) < 0)
    return err;

    -
    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: 2005-06-21 18:46    [W:0.046 / U:121.616 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site