Hi all,
I have a rk3288 board I am working with, it has two ADCs and one DAC. The ADCs are connected via an FPGA to the rk3288. The DAC is directly connected to the I2S port of the rk3288. The rk3288 generates the master clock. I am using buildroot and busybox and kernel 5.9.12 (stable).
I have a driver which receives the ADC data from the FPGA via SDIO. When I run speaker-test in the background and use arecord to record simultaneously in the foreground, both arecord and speaker-test seem to lock up. When I run speaker-test alone I do not have a problem. The playback device uses the rockchip_i2s.c driver while the capture device uses my SDIO driver.
My driver based on dw_mmc.c calls snd_pcm_period_elapsed() for each buffer of frames that is ready. I can see that this is being called for a while when I start arecord in the foreground, until the lockup occurs. The moment I start arecord, the console output from speaker-test stops, so it's locked up by starting arecord. Previously this was working fine on kernel 4.11. However, since I updated to kernel 5.9.12 this no longer works. Has anything changed between 4.11 and 5.9.12 that could be the cause of the problem?
commands used for starting playback / trace capture and for recording - ./perf record -F 99 -g -e snd_pcm:* -e sched:sched_switch -e sched:sched_wakeup -e irq:* speaker-test -D hw:CARD=ak4458ak5558aud,DEV=0 -c8 -r192000 -FS32_LE -tsine & arecord -Dhw:CARD=ak4458ak5558aud,DEV=1 -fS32_LE -c16 -r192000 /mnt/ramdisk/rec.wav
I enabled the kernel options as described at https://www.kernel.org/doc/html/v5.9/sound/designs/tracepoints.html and have used perf to record a trace, which can be access here - https://kernel-debugging.s3-us-west-1.amazonaws.com/perf.data.script.2112202... (exported using "perf script")
The trace file shows "lockdep_recursion" at some point so I am wondering if my problem has to do with a deadlock somehow being caused. However, I also see handle_mm_fault, and do_page_fault, which has to do with memory mapping? So I'm not sure what the problem exactly is and what to do next to find out what's wrong.
Thanks in advance for your help and interest and patience, Bert