I'm using alsa-0.9.0_rc5 with 2.4.20-pre10-mjc2 and I get a kernel oops
in cs4281_suspend when suspeding the machine. Result of ksymoops is
attached.

Matching the disassembly with the assembly output of gcc with the same
options (also attached), it shows that the problem is in the line:

        chip->suspend_regs[i] = snd_cs4281_peekBA0(chip, saved_regs[i]);

more specifically, in the inlined snd_cs4281_peekBA0() function:

        return readl(chip->ba0 + offset);

I tried to add some more debugging output in cs4281_suspend to see why
this happens, but I can't get anything out of it. One thing is sure -
removing the snd-cs4281 module before suspending avoids the problem
completely.

I hope this enables you to fix the problem. Please tell me if there is
anything more I can do.

José Fonseca
ksymoops 2.4.5 on i686 2.4.20-pre10-mjc2.  Options used
     -V (default)
     -k /proc/ksyms (default)
     -l /proc/modules (default)
     -o /lib/modules/2.4.20-pre10-mjc2/ (default)
     -m /boot/System.map (specified)

cs: cb_alloc(bus 2): vendor 0x10ec, device 0x8139
8139too Fast Ethernet driver 0.9.26
Unable to handle kernel paging request at virtual address 991b6920
cc8cc437
*pde = 00000000
Oops: 0000
CPU:    0
EIP:    0010:[<cc8cc437>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010282
eax: cc8e7920   ebx: cc8ccf40   ecx: cc8cf000   edx: 00000018
esi: cbabc800   edi: 00000003   ebp: c1487ed4   esp: c1487eac
ds: 0018   es: 0018   ss: 0018
Process apmd (pid: 4914, stackpage=c1487000)
Stack: cbabcc00 cba88008 cba850c0 cc8cc512 cbabc800 cbaae460 c1487ed4 c01b4002 
       cba88000 00000003 c1487ef0 c01b40e1 cba88000 00000003 cba850c0 00000003 
       00000003 c1487f08 c01b41ce cba850c0 00000003 cba7a2e0 00000000 c1487f14 
Call Trace:    [<cc8cc512>] [<c01b4002>] [<c01b40e1>] [<c01b41ce>] [<c01b425f>]
  [<c012404d>] [<c012410b>] [<c0110f6f>] [<c0111612>] [<c0144d76>] [<c0106fab>]
Code: 8b 04 08 89 84 96 64 01 00 00 42 eb ec ff 80 78 01 00 00 0f 


>>EIP; cc8cc437 <[snd-cs4281]cs4281_suspend+67/90>   <=====

>>eax; cc8e7920 <[8139too]rtl8139_pci_driver+0/27>
>>ebx; cc8ccf40 <[snd-cs4281]saved_regs+0/60>
>>ecx; cc8cf000 <[snd-cs4281].bss.end+1fe1/15041>
>>esi; cbabc800 <_end+b7fd648/c583ea8>
>>ebp; c1487ed4 <_end+11c8d1c/c583ea8>
>>esp; c1487eac <_end+11c8cf4/c583ea8>

Trace; cc8cc512 <[snd-cs4281]snd_cs4281_suspend+12/20>
Trace; c01b4002 <pci_pm_suspend_device+22/26>
Trace; c01b40e1 <pci_pm_suspend_bus+4b/66>
Trace; c01b41ce <pci_pm_suspend+22/46>
Trace; c01b425f <pci_pm_callback+2f/38>
Trace; c012404d <pm_send+61/80>
Trace; c012410b <pm_send_all+5f/8c>
Trace; c0110f6f <suspend+d/ec>
Trace; c0111612 <do_ioctl+f2/140>
Trace; c0144d76 <sys_ioctl+e4/264>
Trace; c0106fab <system_call+33/38>

Code;  cc8cc437 <[snd-cs4281]cs4281_suspend+67/90>
00000000 <_EIP>:
Code;  cc8cc437 <[snd-cs4281]cs4281_suspend+67/90>   <=====
   0:   8b 04 08                  mov    (%eax,%ecx,1),%eax   <=====
Code;  cc8cc43a <[snd-cs4281]cs4281_suspend+6a/90>
   3:   89 84 96 64 01 00 00      mov    %eax,0x164(%esi,%edx,4)
Code;  cc8cc441 <[snd-cs4281]cs4281_suspend+71/90>
   a:   42                        inc    %edx
Code;  cc8cc442 <[snd-cs4281]cs4281_suspend+72/90>
   b:   eb ec                     jmp    fffffff9 <_EIP+0xfffffff9>
Code;  cc8cc444 <[snd-cs4281]cs4281_suspend+74/90>
   d:   ff 80 78 01 00 00         incl   0x178(%eax)
Code;  cc8cc44a <[snd-cs4281]cs4281_suspend+7a/90>
  13:   0f 00 00                  sldtl  (%eax)

[...]
        .file 159 "../alsa-kernel/pci/cs4281.c"
[...]
        .text
        .align 2
        .p2align 4,,15
        .type   cs4281_suspend,@function
cs4281_suspend:
.LFB47:
        .loc 159 2093 0
        pushl   %esi
.LCFI129:
        pushl   %ebx
.LCFI130:
        subl    $4, %esp
.LCFI131:
        movl    16(%esp), %esi
        .loc 159 2094 0
.LBB292:
        movl    44(%esi), %eax
        .loc 30 115 0
.LBB293:
.LBB294:
        leal    376(%eax), %ecx
        .loc 30 120 0
#APP
        # atomic down operation
        decl 376(%eax)
        js 2f
1:
.subsection 1
        .ifndef .text.lock.cs4281
        .text.lock.cs4281:
        .endif
        2:      call __down_failed
        jmp 1b
.previous
        
        .loc 159 2099 0
#NO_APP
.LBE294:
.LBE293:
        cmpl    $768, 372(%eax)
        je      .L985
        .loc 159 2102 0
        movl    48(%esi), %eax
        .loc 159 2112 0
        movl    $saved_regs, %ebx
        .loc 159 2102 0
        movl    %eax, (%esp)
        call    snd_pcm_suspend_all_R9cd5838a
        .loc 159 2112 0
        xorl    %edx, %edx
        .loc 159 578 0
.LBB295:
        movl    4(%esi), %ecx
        movl    1024(%ecx), %eax
        .loc 159 2105 0
.LBE295:
        orl     $65536, %eax
        .loc 159 573 0
.LBB296:
        movl    %eax, 1024(%ecx)
.LBE296:
.LBB297:
        movl    $2, 8(%ecx)
        .p2align 4,,15
.L995:
        .loc 159 2113 0
.LBE297:
        movl    (%ebx,%edx,4), %eax
        testl   %eax, %eax
        je      .L991
        .loc 159 578 0                  ; cs4281.c:578
.LBB298:
        movl    (%eax,%ecx), %eax       ; <=====
        .loc 159 577 0
.LBE298:
        movl    %eax, 356(%esi,%edx,4)
        .loc 159 2112 0
.L991:
        incl    %edx
        jmp     .L995
.L985:
        .loc 30 201 0
.LBB299:
.LBB300:
#APP
        # atomic up operation
        incl 376(%eax)
        jle 2f
1:
.subsection 1
        .ifndef .text.lock.cs4281
        .text.lock.cs4281:
        .endif
        2:      call __up_wakeup
        jmp 1b
.previous
        .subsection 0

        .loc 159 2135 0
#NO_APP
        popl    %eax
        popl    %ebx
        popl    %esi
        ret
.LBE300:
.LBE299:
.LBE292:
.LFE47:
.Lfe47:
        .size   cs4281_suspend,.Lfe47-cs4281_suspend
[...]

Reply via email to