Latest -current panic in uaudio_detach() / bus_dmamem_free()

Hans Petter Selasky hps at selasky.org
Mon Jun 23 03:16:52 UTC 2014


On 06/23/14 04:46, Alexander Kabaev wrote:
> On Mon, 23 Jun 2014 06:04:20 +0400
> Andrey Chernov <ache at freebsd.org> wrote:
>
>> Always happens at shutdown after all buffers are synced, see
>> screenshot: http://i.imgur.com/8WXTMPj.png
>>
>> --
>> http://ache.vniz.net/
>
> Hi Andrey,
>
> there's not to much to go on from the screenshoot alone and one would
> expect more details on the crash from people with your experience :)
>
> Please provide us with the information on the actual audio hardware
> you are using, preferably in form of a dmesg output. This revision is
> your culpit:
>   http://svnweb.freebsd.org/changeset/base/267581 and I have strong
>   suspicion that restoring the NULL check on dmatag in the chunk below
>   will cure your crash.
>

Backtrace here:


 > usbconfig -d 0.4 reset
 > uaudio0: at uhub1, port 2, addr 4 (disconnected)
 >
 > vm_fault(0xc0661400, 0, 1, 0) -> 1
 > Fatal kernel mode data abort: 'Translation Fault (P)'
 > trapframe: 0xd28b8b58
 > FSR=00000017, FAR=0000002c, spsr=60000113
 > r0 =00000000, r1 =c1b35000, r2 =00000000, r3 =00000000
 > r4 =c1a24000, r5 =00000000, r6 =c1b3338c, r7 =c172e150
 > r8 =c1b35000, r9 =00000000, r10=c162a400, r11=d28b8bd0
 > r12=c1bc9ad4, ssp=d28b8ba8, slr=c1b9855c, pc =c048fa3c
 >
 > [ thread pid 14 tid 100037 ]
 > Stopped at      bus_dmamem_free+0x10:   ldr     r0, [r9, #0x02c]
 > db> bt

 > Tracing pid 14 tid 100037 td 0xc1712960
 > db_trace_self() at db_trace_self
 >          pc = 0xc0492958  lr = 0xc0130f38 (db_stack_trace+0xf4)
 >          sp = 0xd28b8860  fp = 0xd28b8878
 >         r10 = 0xc0660180
 > db_stack_trace() at db_stack_trace+0xf4
 >          pc = 0xc0130f38  lr = 0xc01308a8 (db_command+0x270)
 >          sp = 0xd28b8880  fp = 0xd28b8920
 >          r4 = 0x00000000  r5 = 0x00000000
 >          r6 = 0x00000000
 > db_command() at db_command+0x270
 >          pc = 0xc01308a8  lr = 0xc013060c (db_command_loop+0x60)
 >          sp = 0xd28b8928  fp = 0xd28b8938
 >          r4 = 0xc04d2192  r5 = 0xc04ec76c
 >          r6 = 0xc066016c  r7 = 0xc058b540
 >          r8 = 0xc0656294  r9 = 0xc0656290
 >         r10 = 0x00000001
 > db_command_loop() at db_command_loop+0x60
 >          pc = 0xc013060c  lr = 0xc0132fd4 (db_trap+0xd8)
 >          sp = 0xd28b8940  fp = 0xd28b8a60
 >          r4 = 0x00000000  r5 = 0xc0660178
 >          r6 = 0xc06562c0
 > db_trap() at db_trap+0xd8
 >          pc = 0xc0132fd4  lr = 0xc028efbc (kdb_trap+0xbc)
 >          sp = 0xd28b8a68  fp = 0xd28b8a88
 >          r4 = 0x00000000  r5 = 0x00000017
 >          r6 = 0xc06562c0  r7 = 0xc058b540
 > kdb_trap() at kdb_trap+0xbc
 >          pc = 0xc028efbc  lr = 0xc04a5194 (dab_fatal+0x174)
 >          sp = 0xd28b8a90  fp = 0xd28b8aa8
 >          r4 = 0xd28b8b58  r5 = 0x00000017
 >          r6 = 0x600001d3  r7 = 0x0000002c
 >          r8 = 0xd28b8b58  r9 = 0x00000013
 >         r10 = 0x00000001
 > dab_fatal() at dab_fatal+0x174
 >          pc = 0xc04a5194  lr = 0xc04a4f4c (data_abort_handler+0x3e8)
 >          sp = 0xd28b8ab0  fp = 0xd28b8b50
 >          r4 = 0xc16be3cc  r5 = 0xc1712960
 >          r6 = 0xd28b8eb0  r7 = 0x00000000
 > data_abort_handler() at data_abort_handler+0x3e8
 >          pc = 0xc04a4f4c  lr = 0xc04944d4 (exception_exit)
 >          sp = 0xd28b8b58  fp = 0xd28b8bd0
 >          r4 = 0xc1a24000  r5 = 0x00000000
 >          r6 = 0xc1b3338c  r7 = 0xc172e150
 >          r8 = 0xc1b35000  r9 = 0x00000000
 >         r10 = 0xc162a400
 > exception_exit() at exception_exit
 >          pc = 0xc04944d4  lr = 0xc1b9855c (sndbuf_free+0x80)
 >          sp = 0xd28b8ba8  fp = 0xd28b8bd0
 >          r0 = 0x00000000  r1 = 0xc1b35000
 >          r2 = 0x00000000  r3 = 0x00000000
 >          r4 = 0xc1a24000  r5 = 0x00000000
 >          r6 = 0xc1b3338c  r7 = 0xc172e150
 >          r8 = 0xc1b35000  r9 = 0x00000000
 >         r10 = 0xc162a400 r12 = 0xc1bc9ad4
 > bus_dmamem_free() at bus_dmamem_free+0x10
 >          pc = 0xc048fa3c  lr = 0xc1b984c4 (sndbuf_destroy+0x14)
 >          sp = 0xd28b8bd8  fp = 0xd28b8be0
 >          r4 = 0xc162ae00  r5 = 0xc1a24000
 >          r6 = 0xd28b8bd0  r7 = 0xc1b9855c
 >          r8 = 0x00000000  r9 = 0xc1a24000
 > Unknown entry: 0
 > sndbuf_destroy() at sndbuf_destroy+0x14
 >          pc = 0xc1b984c4  lr = 0xc1b984c4 (sndbuf_destroy+0x14)
 >          sp = 0xd28b8bd8  fp = 0xd28b8be0
 > Unable to unwind into user mode

Please fix ASAP. Should be trivial to reproduce. Possibly a double free. 
In case of USB audio sndbuf_destroy() should not free any bus dmamem or 
know about busdma, because all of this is done by the USB stack!

--HPS



More information about the freebsd-current mailing list