Revision 011a8719d6105dcb48077ea7a6a88ac019d4aa50 authored by Maxim Kochetkov on 12 May 2023, 11:03:42 UTC, committed by Mark Brown on 23 May 2023, 20:39:30 UTC
When using DMA mode we are facing with Oops:
[  396.458157] Unable to handle kernel access to user memory without uaccess routines at virtual address 000000000000000c
[  396.469374] Oops [#1]
[  396.471839] Modules linked in:
[  396.475144] CPU: 0 PID: 114 Comm: arecord Not tainted 6.0.0-00164-g9a8eccdaf2be-dirty #68
[  396.483619] Hardware name: YMP ELCT FPGA (DT)
[  396.488156] epc : dmaengine_pcm_open+0x1d2/0x342
[  396.493227]  ra : dmaengine_pcm_open+0x1d2/0x342
[  396.498140] epc : ffffffff807fe346 ra : ffffffff807fe346 sp : ffffffc804e138f0
[  396.505602]  gp : ffffffff817bf730 tp : ffffffd8042c8ac0 t0 : 6500000000000000
[  396.513045]  t1 : 0000000000000064 t2 : 656e69676e65616d s0 : ffffffc804e13990
[  396.520477]  s1 : ffffffd801b86a18 a0 : 0000000000000026 a1 : ffffffff816920f8
[  396.527897]  a2 : 0000000000000010 a3 : fffffffffffffffe a4 : 0000000000000000
[  396.535319]  a5 : 0000000000000000 a6 : ffffffd801b87040 a7 : 0000000000000038
[  396.542740]  s2 : ffffffd801b94a00 s3 : 0000000000000000 s4 : ffffffd80427f5e8
[  396.550153]  s5 : ffffffd80427f5e8 s6 : ffffffd801b44410 s7 : fffffffffffffff5
[  396.557569]  s8 : 0000000000000800 s9 : 0000000000000001 s10: ffffffff8066d254
[  396.564978]  s11: ffffffd8059cf768 t3 : ffffffff817d5577 t4 : ffffffff817d5577
[  396.572391]  t5 : ffffffff817d5578 t6 : ffffffc804e136e8
[  396.577876] status: 0000000200000120 badaddr: 000000000000000c cause: 000000000000000d
[  396.586007] [<ffffffff806839f4>] snd_soc_component_open+0x1a/0x68
[  396.592439] [<ffffffff807fdd62>] __soc_pcm_open+0xf0/0x502
[  396.598217] [<ffffffff80685d86>] soc_pcm_open+0x2e/0x4e
[  396.603741] [<ffffffff8066cea4>] snd_pcm_open_substream+0x442/0x68e
[  396.610313] [<ffffffff8066d1ea>] snd_pcm_open+0xfa/0x212
[  396.615868] [<ffffffff8066d39c>] snd_pcm_capture_open+0x3a/0x60
[  396.622048] [<ffffffff8065b35a>] snd_open+0xa8/0x17a
[  396.627421] [<ffffffff801ae036>] chrdev_open+0xa0/0x218
[  396.632893] [<ffffffff801a5a28>] do_dentry_open+0x17c/0x2a6
[  396.638713] [<ffffffff801a6d9a>] vfs_open+0x1e/0x26
[  396.643850] [<ffffffff801b8544>] path_openat+0x96e/0xc96
[  396.649518] [<ffffffff801b9390>] do_filp_open+0x7c/0xf6
[  396.655034] [<ffffffff801a6ff2>] do_sys_openat2+0x8a/0x11e
[  396.660765] [<ffffffff801a735a>] sys_openat+0x50/0x7c
[  396.666068] [<ffffffff80003aca>] ret_from_syscall+0x0/0x2
[  396.674964] ---[ end trace 0000000000000000 ]---

It happens because of play_dma_data/capture_dma_data pointers are NULL.
Current implementation assigns these pointers at snd_soc_dai_driver
startup() callback and reset them back to NULL at shutdown(). But
soc_pcm_open() sequence uses DMA pointers in dmaengine_pcm_open()
before snd_soc_dai_driver startup().
Most generic DMA capable I2S drivers use snd_soc_dai_driver probe()
callback to init DMA pointers only once at probe. So move DMA init
to dw_i2s_dai_probe and drop shutdown() and startup() callbacks.

Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
Link: https://lore.kernel.org/r/20230512110343.66664-1-fido_max@inbox.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent e2d035f
History
File Mode Size
bpf
cgroup
configs
debug
dma
entry
events
futex
gcov
irq
kcsan
livepatch
locking
module
power
printk
rcu
sched
time
trace
.gitignore -rw-r--r-- 67 bytes
Kconfig.freezer -rw-r--r-- 92 bytes
Kconfig.hz -rw-r--r-- 1.7 KB
Kconfig.locks -rw-r--r-- 4.9 KB
Kconfig.preempt -rw-r--r-- 4.8 KB
Makefile -rw-r--r-- 5.1 KB
acct.c -rw-r--r-- 15.9 KB
async.c -rw-r--r-- 9.2 KB
audit.c -rw-r--r-- 64.8 KB
audit.h -rw-r--r-- 10.7 KB
audit_fsnotify.c -rw-r--r-- 5.3 KB
audit_tree.c -rw-r--r-- 25.6 KB
audit_watch.c -rw-r--r-- 13.7 KB
auditfilter.c -rw-r--r-- 34.4 KB
auditsc.c -rw-r--r-- 81.5 KB
backtracetest.c -rw-r--r-- 1.9 KB
bounds.c -rw-r--r-- 943 bytes
capability.c -rw-r--r-- 14.7 KB
cfi.c -rw-r--r-- 2.2 KB
compat.c -rw-r--r-- 6.8 KB
configs.c -rw-r--r-- 2.0 KB
context_tracking.c -rw-r--r-- 23.3 KB
cpu.c -rw-r--r-- 66.8 KB
cpu_pm.c -rw-r--r-- 5.9 KB
crash_core.c -rw-r--r-- 12.8 KB
crash_dump.c -rw-r--r-- 1.1 KB
cred.c -rw-r--r-- 24.2 KB
delayacct.c -rw-r--r-- 7.4 KB
dma.c -rw-r--r-- 3.3 KB
exec_domain.c -rw-r--r-- 1.1 KB
exit.c -rw-r--r-- 47.8 KB
extable.c -rw-r--r-- 4.2 KB
fail_function.c -rw-r--r-- 6.8 KB
fork.c -rw-r--r-- 87.6 KB
freezer.c -rw-r--r-- 5.4 KB
gen_kheaders.sh -rwxr-xr-x 3.2 KB
groups.c -rw-r--r-- 5.0 KB
hung_task.c -rw-r--r-- 9.7 KB
iomem.c -rw-r--r-- 4.7 KB
irq_work.c -rw-r--r-- 7.7 KB
jump_label.c -rw-r--r-- 21.1 KB
kallsyms.c -rw-r--r-- 25.3 KB
kallsyms_internal.h -rw-r--r-- 907 bytes
kallsyms_selftest.c -rw-r--r-- 10.7 KB
kallsyms_selftest.h -rw-r--r-- 332 bytes
kcmp.c -rw-r--r-- 5.4 KB
kcov.c -rw-r--r-- 29.2 KB
kexec.c -rw-r--r-- 7.3 KB
kexec_core.c -rw-r--r-- 32.9 KB
kexec_elf.c -rw-r--r-- 11.4 KB
kexec_file.c -rw-r--r-- 32.4 KB
kexec_internal.h -rw-r--r-- 1.3 KB
kheaders.c -rw-r--r-- 1.6 KB
kprobes.c -rw-r--r-- 73.9 KB
ksysfs.c -rw-r--r-- 7.0 KB
kthread.c -rw-r--r-- 41.7 KB
latencytop.c -rw-r--r-- 7.6 KB
module_signature.c -rw-r--r-- 1.1 KB
notifier.c -rw-r--r-- 18.1 KB
nsproxy.c -rw-r--r-- 13.2 KB
padata.c -rw-r--r-- 27.9 KB
panic.c -rw-r--r-- 20.4 KB
params.c -rw-r--r-- 23.5 KB
pid.c -rw-r--r-- 18.1 KB
pid_namespace.c -rw-r--r-- 11.9 KB
pid_sysctl.h -rw-r--r-- 1.6 KB
profile.c -rw-r--r-- 13.2 KB
ptrace.c -rw-r--r-- 37.2 KB
range.c -rw-r--r-- 3.0 KB
reboot.c -rw-r--r-- 32.1 KB
regset.c -rw-r--r-- 1.9 KB
relay.c -rw-r--r-- 30.0 KB
resource.c -rw-r--r-- 51.2 KB
resource_kunit.c -rw-r--r-- 4.3 KB
rseq.c -rw-r--r-- 11.8 KB
scftorture.c -rw-r--r-- 20.0 KB
scs.c -rw-r--r-- 3.1 KB
seccomp.c -rw-r--r-- 63.2 KB
signal.c -rw-r--r-- 124.0 KB
smp.c -rw-r--r-- 29.5 KB
smpboot.c -rw-r--r-- 11.9 KB
smpboot.h -rw-r--r-- 640 bytes
softirq.c -rw-r--r-- 24.2 KB
stackleak.c -rw-r--r-- 4.7 KB
stacktrace.c -rw-r--r-- 10.4 KB
static_call.c -rw-r--r-- 158 bytes
static_call_inline.c -rw-r--r-- 12.7 KB
stop_machine.c -rw-r--r-- 18.3 KB
sys.c -rw-r--r-- 67.6 KB
sys_ni.c -rw-r--r-- 10.2 KB
sysctl-test.c -rw-r--r-- 10.7 KB
sysctl.c -rw-r--r-- 56.3 KB
task_work.c -rw-r--r-- 5.1 KB
taskstats.c -rw-r--r-- 15.8 KB
torture.c -rw-r--r-- 25.4 KB
tracepoint.c -rw-r--r-- 20.3 KB
tsacct.c -rw-r--r-- 5.0 KB
ucount.c -rw-r--r-- 9.1 KB
uid16.c -rw-r--r-- 5.1 KB
uid16.h -rw-r--r-- 442 bytes
umh.c -rw-r--r-- 15.0 KB
up.c -rw-r--r-- 1.5 KB
user-return-notifier.c -rw-r--r-- 1.3 KB
user.c -rw-r--r-- 6.0 KB
user_namespace.c -rw-r--r-- 35.7 KB
usermode_driver.c -rw-r--r-- 4.3 KB
utsname.c -rw-r--r-- 3.8 KB
utsname_sysctl.c -rw-r--r-- 3.4 KB
vhost_task.c -rw-r--r-- 2.8 KB
watch_queue.c -rw-r--r-- 17.2 KB
watchdog.c -rw-r--r-- 22.6 KB
watchdog_hld.c -rw-r--r-- 7.7 KB
workqueue.c -rw-r--r-- 175.7 KB
workqueue_internal.h -rw-r--r-- 2.4 KB

back to top