2006-05-10 23:05:53

by Zoltan Boszormenyi

[permalink] [raw]
Subject: Oops in au8830 driver on x86-64

Hi,

I bought a used sound card for secondary uses, it happens to be
a Diamond Sound Monster MX300 with an Aureal Vortex2 chip.
Unfortunately, after putting it into the machine, it doesn't boot up,
I get an oops that prevents booting further. I have hand-copied
the relevant info:

RIP: {:snd_au8830:snd_vortex_probe+411}
...
Call Trace: {sprintf+81} {__wake_up+56}
{pci_device_probe+256} {driver_probe_device+82}
{__driver_attach+142} {__driver_attach+0}
{bus_for_each_dev+67} {bus_add_driver+118}
{__pci_register_driver+142} {stop_machine_run+58}
{sys_init_module+278} {system_call+126}

The kernel is not tainted.

$ uname -a
Linux xxxxxx 2.6.16-1.2111_FC5 #1 SMP Thu May 4 21:16:04 EDT 2006 x86_64
x86_64 x86_64 GNU/Linux

System is an FC5/x86-64 updated to the latest erratas.

There is only one sprintf() call in the whole au88x0 driver source,
line 328 in au88x0.c. Why it fails for x86-64 is beyond my understanding.
This is the code in question:

327: strcpy(card->shortname, CARD_NAME_SHORT);
328: sprintf(card->longname, "%s at 0x%lx irq %i",
card->shortname, chip->io, chip->irq);

Pointer "card" exists or the driver would have failed earlier allocating
or dereferencing it.
card->longname is 80 byte large, length of the string is at most 44 byte:
12 byte (format string fillings + terminating NULL) +
6 byte (CARD_NAME_SHORT) +
6 byte (unsigned long written in hex) +
10 byte (unsigned int written in dec)

I couldn't seek further, I put the card away for now. :-)

Best regards,
Zolt?n B?sz?rm?nyi


2006-05-10 23:07:51

by Zoltan Boszormenyi

[permalink] [raw]
Subject: Re: Oops in au8830 driver on x86-64

Zoltan Boszormenyi ?rta:
> Hi,
>
> I bought a used sound card for secondary uses, it happens to be
> a Diamond Sound Monster MX300 with an Aureal Vortex2 chip.
> Unfortunately, after putting it into the machine, it doesn't boot up,
> I get an oops that prevents booting further. I have hand-copied
> the relevant info:
>
> RIP: {:snd_au8830:snd_vortex_probe+411}
> ...
> Call Trace: {sprintf+81} {__wake_up+56}
> {pci_device_probe+256} {driver_probe_device+82}
> {__driver_attach+142} {__driver_attach+0}
> {bus_for_each_dev+67} {bus_add_driver+118}
> {__pci_register_driver+142} {stop_machine_run+58}
> {sys_init_module+278} {system_call+126}
>
> The kernel is not tainted.
>
> $ uname -a
> Linux xxxxxx 2.6.16-1.2111_FC5 #1 SMP Thu May 4 21:16:04 EDT 2006
> x86_64 x86_64 x86_64 GNU/Linux
>
> System is an FC5/x86-64 updated to the latest erratas.
>
> There is only one sprintf() call in the whole au88x0 driver source,
> line 328 in au88x0.c. Why it fails for x86-64 is beyond my understanding.
> This is the code in question:
>
> 327: strcpy(card->shortname, CARD_NAME_SHORT);
> 328: sprintf(card->longname, "%s at 0x%lx irq %i",
> card->shortname, chip->io, chip->irq);
>
> Pointer "card" exists or the driver would have failed earlier
> allocating or dereferencing it.
> card->longname is 80 byte large, length of the string is at most 44 byte:
> 12 byte (format string fillings + terminating NULL) +
> 6 byte (CARD_NAME_SHORT) +
> 6 byte (unsigned long written in hex) +

This is 16, not 6, before anyone complains I can't count. :-)

> 10 byte (unsigned int written in dec)
>
> I couldn't seek further, I put the card away for now. :-)
>
> Best regards,
> Zolt?n B?sz?rm?nyi
>
>

2006-05-11 18:35:55

by Andi Kleen

[permalink] [raw]
Subject: Re: Oops in au8830 driver on x86-64

Zoltan Boszormenyi <[email protected]> writes:
>
> I couldn't seek further, I put the card away for now. :-)

First thing I would do is to fix all the compile warnings.

-Andi

2006-05-11 19:23:17

by Zoltan Boszormenyi

[permalink] [raw]
Subject: Re: Oops in au8830 driver on x86-64

Hi,

Andi Kleen ?rta:
> Zoltan Boszormenyi <[email protected]> writes:
>
>> I couldn't seek further, I put the card away for now. :-)
>>
>
> First thing I would do is to fix all the compile warnings.
>
> -Andi
>
>

What warnings are you talking about?

...
LD [M] sound/pci/ali5451/snd-ali5451.o
LD sound/pci/au88x0/built-in.o
CC [M] sound/pci/au88x0/au8810.o
CC [M] sound/pci/au88x0/au8820.o
CC [M] sound/pci/au88x0/au8830.o
LD [M] sound/pci/au88x0/snd-au8810.o
LD [M] sound/pci/au88x0/snd-au8820.o
LD [M] sound/pci/au88x0/snd-au8830.o
LD sound/pci/ca0106/built-in.o
CC [M] sound/pci/ca0106/ca0106_main.o
...

Should I do an 'export CFLAGS="-Wall"' before make?

Best regards,
Zolt?n B?sz?rm?nyi

2006-05-11 19:24:35

by Andi Kleen

[permalink] [raw]
Subject: Re: Oops in au8830 driver on x86-64

On Thursday 11 May 2006 21:23, Zoltan Boszormenyi wrote:
> Hi,
>
> Andi Kleen ?rta:
> > Zoltan Boszormenyi <[email protected]> writes:
> >> I couldn't seek further, I put the card away for now. :-)
> >
> > First thing I would do is to fix all the compile warnings.
> >
> > -Andi
>
> What warnings are you talking about?

It was just a general comment. If there aren't any it's harder.
I guess you would need to find out where exactly it crashes.

-Andi

2006-05-11 19:46:44

by Zoltan Boszormenyi

[permalink] [raw]
Subject: Re: Oops in au8830 driver on x86-64

Hi,

Andi Kleen ?rta:
> On Thursday 11 May 2006 21:23, Zoltan Boszormenyi wrote:
>
>> Hi,
>>
>> Andi Kleen ?rta:
>>
>>> Zoltan Boszormenyi <[email protected]> writes:
>>>
>>>> I couldn't seek further, I put the card away for now. :-)
>>>>
>>> First thing I would do is to fix all the compile warnings.
>>>
>>> -Andi
>>>
>> What warnings are you talking about?
>>
>
> It was just a general comment. If there aren't any it's harder.
> I guess you would need to find out where exactly it crashes.
>
> -Andi
>

I am going to do it but I have to do some
urgent user space programming first.

Thanks anyway.

Best regards,
Zolt?n B?sz?rm?nyi