For days now I’ve been struggling with a crashing program and I think I’ve narrowed it down to the matrix PCM. I’m hoping someone might be able to help a bit.
System: Raspberry Pi 3B+
Matrix Creator
OS: Latest Raspbian Stretch (fully updated and upgraded)
Matrix Kernel and HAL installed.
I’m running a combination of Google Assistant and Snowboy (merged together, both C++), using the ALSA implementation as Google uses it in their C++ example. So no Portaudio or anything.
I have disabled all my threads in my attempt to narrow it down. The only thread I have left is one thread (a lambda function) that gets triggered whenever audio data is available. Normally, this thread would pass the data to Snowboy, but I’ve disabled that to narrow the problem down.
The problem I face is that the system will freeze after “x” time of running. Sometimes hours, sometimes minutes. The last time it froze, I was able to get a trace from /var/log/kern.log:
Aug 20 17:25:00 UnityMain kernel: [ 300.263784] INFO: rcu_sched detected stalls on CPUs/tasks:
Aug 20 17:25:00 UnityMain kernel: [ 300.263804] 3-...: (1 GPs behind) idle=84e/140000000000000/0 softirq=4728/4759 fqs=1050
Aug 20 17:25:00 UnityMain kernel: [ 300.263806] (detected by 0, t=2102 jiffies, g=1229, c=1228, q=87)
Aug 20 17:25:00 UnityMain kernel: [ 300.263817] Sending NMI from CPU 0 to CPUs 3:
Aug 20 17:25:00 UnityMain kernel: [ 316.001766] brcmfmac: brcmf_do_escan: error (-110)
Aug 20 17:25:00 UnityMain kernel: [ 316.001773] brcmfmac: brcmf_cfg80211_scan: scan error (-110)
Aug 20 17:25:00 UnityMain kernel: [ 363.308412] INFO: rcu_sched detected stalls on CPUs/tasks:
Aug 20 17:25:00 UnityMain kernel: [ 363.308430] 3-...: (1 GPs behind) idle=84e/140000000000000/0 softirq=4728/4759 fqs=3704
Aug 20 17:25:00 UnityMain kernel: [ 363.308432] (detected by 2, t=8407 jiffies, g=1229, c=1228, q=1269)
Aug 20 17:25:00 UnityMain kernel: [ 363.308442] Sending NMI from CPU 2 to CPUs 3:
Aug 20 17:25:00 UnityMain kernel: [ 376.007936] brcmfmac: brcmf_do_escan: error (-110)
Aug 20 17:25:00 UnityMain kernel: [ 376.007945] brcmfmac: brcmf_cfg80211_scan: scan error (-110)
Aug 20 17:25:00 UnityMain kernel: [ 394.297605] NMI backtrace for cpu 3
Aug 20 17:25:00 UnityMain kernel: [ 394.297615] CPU: 3 PID: 162 Comm: kworker/u8:2 Tainted: G C O 4.14.62-v7+ #1134
Aug 20 17:25:00 UnityMain kernel: [ 394.297616] Hardware name: BCM2835
Aug 20 17:25:00 UnityMain kernel: [ 394.297633] Workqueue: matrixio_pcm matrixio_pcm_capture_work [matrixio_pcm]
Aug 20 17:25:00 UnityMain kernel: [ 394.297637] task: b7b58f00 task.stack: b7b7a000
Aug 20 17:25:00 UnityMain kernel: [ 394.297645] PC is at __schedule+0x7c0/0x968
Aug 20 17:25:00 UnityMain kernel: [ 394.297648] LR is at __schedule+0x7bc/0x968
Aug 20 17:25:00 UnityMain kernel: [ 394.297650] pc : [<8079d6c8>] lr : [<8079d6c4>] psr: 40000013
Aug 20 17:25:00 UnityMain kernel: [ 394.297652] sp : b7b7bd68 ip : 80c04174 fp : b7b7bdc4
Aug 20 17:25:00 UnityMain kernel: [ 394.297654] r10: 80b8ed40 r9 : 80b8ed40 r8 : b7b59364
Aug 20 17:25:00 UnityMain kernel: [ 394.297656] r7 : 00000001 r6 : b7b58f00 r5 : b7b58f00 r4 : ba382d40
Aug 20 17:25:00 UnityMain kernel: [ 394.297659] r3 : 00000000 r2 : 397f4000 r1 : b7b7a000 r0 : 00000000
Aug 20 17:25:00 UnityMain kernel: [ 394.297663] Flags: nZcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Aug 20 17:25:00 UnityMain kernel: [ 394.297665] Control: 10c5383d Table: 2cde406a DAC: 00000055
Aug 20 17:25:00 UnityMain kernel: [ 394.297668] CPU: 3 PID: 162 Comm: kworker/u8:2 Tainted: G C O 4.14.62-v7+ #1134
Aug 20 17:25:00 UnityMain kernel: [ 394.297670] Hardware name: BCM2835
Aug 20 17:25:00 UnityMain kernel: [ 394.297675] Workqueue: matrixio_pcm matrixio_pcm_capture_work [matrixio_pcm]
Aug 20 17:25:00 UnityMain kernel: [ 394.297692] [<8010ffd8>] (unwind_backtrace) from [<8010c240>] (show_stack+0x20/0x24)
Aug 20 17:25:00 UnityMain kernel: [ 394.297698] [<8010c240>] (show_stack) from [<80787284>] (dump_stack+0xd4/0x118)
Aug 20 17:25:00 UnityMain kernel: [ 394.297708] [<80787284>] (dump_stack) from [<80108cd8>] (show_regs+0x1c/0x20)
Aug 20 17:25:00 UnityMain kernel: [ 394.297716] [<80108cd8>] (show_regs) from [<8078d0c0>] (nmi_cpu_backtrace+0xc0/0x128)
Aug 20 17:25:00 UnityMain kernel: [ 394.297723] [<8078d0c0>] (nmi_cpu_backtrace) from [<8010e2c8>] (handle_IPI+0x12c/0x33c)
Aug 20 17:25:00 UnityMain kernel: [ 394.297730] [<8010e2c8>] (handle_IPI) from [<801014d8>] (bcm2836_arm_irqchip_handle_irq+0x7c/0xac)
Aug 20 17:25:00 UnityMain kernel: [ 394.297738] [<801014d8>] (bcm2836_arm_irqchip_handle_irq) from [<807a2e7c>] (__irq_svc+0x5c/0x7c)
Aug 20 17:25:00 UnityMain kernel: [ 394.297740] Exception stack(0xb7b7bd18 to 0xb7b7bd60)
Aug 20 17:25:00 UnityMain kernel: [ 394.297743] bd00: 00000000 b7b7a000
Aug 20 17:25:00 UnityMain kernel: [ 394.297747] bd20: 397f4000 00000000 ba382d40 b7b58f00 b7b58f00 00000001 b7b59364 80b8ed40
Aug 20 17:25:00 UnityMain kernel: [ 394.297752] bd40: 80b8ed40 b7b7bdc4 80c04174 b7b7bd68 8079d6c4 8079d6c8 40000013 ffffffff
Aug 20 17:25:00 UnityMain kernel: [ 394.297759] [<807a2e7c>] (__irq_svc) from [<8079d6c8>] (__schedule+0x7c0/0x968)
Aug 20 17:25:00 UnityMain kernel: [ 394.297765] [<8079d6c8>] (__schedule) from [<8079dbbc>] (preempt_schedule_common+0x20/0x30)
Aug 20 17:25:00 UnityMain kernel: [ 394.297771] [<8079dbbc>] (preempt_schedule_common) from [<8079dc14>] (_cond_resched+0x48/0x50)
Aug 20 17:25:00 UnityMain kernel: [ 394.297777] [<8079dc14>] (_cond_resched) from [<8079fb78>] (mutex_lock+0x1c/0x60)
Aug 20 17:25:00 UnityMain kernel: [ 394.297785] [<8079fb78>] (mutex_lock) from [<7f5871a4>] (matrixio_pcm_pointer+0x2c/0x58 [matrixio_pcm])
Aug 20 17:25:00 UnityMain kernel: [ 394.297870] [<7f5871a4>] (matrixio_pcm_pointer [matrixio_pcm]) from [<7f4ffc8c>] (soc_pcm_pointer+0x48/0xec [snd_soc_core])
Aug 20 17:25:00 UnityMain kernel: [ 394.297945] [<7f4ffc8c>] (soc_pcm_pointer [snd_soc_core]) from [<7f0d3b0c>] (snd_pcm_update_hw_ptr0+0x38/0x3b0 [snd_pcm])
Aug 20 17:25:00 UnityMain kernel: [ 394.297993] [<7f0d3b0c>] (snd_pcm_update_hw_ptr0 [snd_pcm]) from [<7f0d3f08>] (snd_pcm_period_elapsed+0x84/0xac [snd_pcm])
Aug 20 17:25:00 UnityMain kernel: [ 394.298022] [<7f0d3f08>] (snd_pcm_period_elapsed [snd_pcm]) from [<7f58747c>] (matrixio_pcm_capture_work+0x88/0x90 [matrixio_pcm])
Aug 20 17:25:00 UnityMain kernel: [ 394.298032] [<7f58747c>] (matrixio_pcm_capture_work [matrixio_pcm]) from [<801375b8>] (process_one_work+0x158/0x454)
Aug 20 17:25:00 UnityMain kernel: [ 394.298040] [<801375b8>] (process_one_work) from [<80137918>] (worker_thread+0x64/0x5b8)
Aug 20 17:25:00 UnityMain kernel: [ 394.298048] [<80137918>] (worker_thread) from [<8013d99c>] (kthread+0x13c/0x16c)
Aug 20 17:25:00 UnityMain kernel: [ 394.298055] [<8013d99c>] (kthread) from [<8010810c>] (ret_from_fork+0x14/0x28)
It looks like the PCM driver causes a crash here? Any clue to what might cause this? The code for the ALSA handling is just what Google uses in its example: