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
File | Mode | Size |
---|---|---|
Makefile | -rw-r--r-- | 366 bytes |
advise.c | -rw-r--r-- | 2.3 KB |
advise.h | -rw-r--r-- | 316 bytes |
alloc_cache.h | -rw-r--r-- | 1.4 KB |
cancel.c | -rw-r--r-- | 7.2 KB |
cancel.h | -rw-r--r-- | 579 bytes |
epoll.c | -rw-r--r-- | 1.5 KB |
epoll.h | -rw-r--r-- | 213 bytes |
fdinfo.c | -rw-r--r-- | 6.7 KB |
fdinfo.h | -rw-r--r-- | 100 bytes |
filetable.c | -rw-r--r-- | 4.1 KB |
filetable.h | -rw-r--r-- | 2.1 KB |
fs.c | -rw-r--r-- | 6.8 KB |
fs.h | -rw-r--r-- | 929 bytes |
io-wq.c | -rw-r--r-- | 31.7 KB |
io-wq.h | -rw-r--r-- | 2.0 KB |
io_uring.c | -rw-r--r-- | 117.8 KB |
io_uring.h | -rw-r--r-- | 11.3 KB |
kbuf.c | -rw-r--r-- | 15.0 KB |
kbuf.h | -rw-r--r-- | 3.8 KB |
msg_ring.c | -rw-r--r-- | 7.6 KB |
msg_ring.h | -rw-r--r-- | 226 bytes |
net.c | -rw-r--r-- | 37.2 KB |
net.h | -rw-r--r-- | 2.2 KB |
nop.c | -rw-r--r-- | 498 bytes |
nop.h | -rw-r--r-- | 168 bytes |
notif.c | -rw-r--r-- | 2.2 KB |
notif.h | -rw-r--r-- | 1.3 KB |
opdef.c | -rw-r--r-- | 13.9 KB |
opdef.h | -rw-r--r-- | 1.4 KB |
openclose.c | -rw-r--r-- | 6.2 KB |
openclose.h | -rw-r--r-- | 596 bytes |
poll.c | -rw-r--r-- | 28.2 KB |
poll.h | -rw-r--r-- | 1023 bytes |
refs.h | -rw-r--r-- | 1.2 KB |
rsrc.c | -rw-r--r-- | 30.0 KB |
rsrc.h | -rw-r--r-- | 4.2 KB |
rw.c | -rw-r--r-- | 27.5 KB |
rw.h | -rw-r--r-- | 705 bytes |
slist.h | -rw-r--r-- | 2.7 KB |
splice.c | -rw-r--r-- | 2.9 KB |
splice.h | -rw-r--r-- | 306 bytes |
sqpoll.c | -rw-r--r-- | 9.5 KB |
sqpoll.h | -rw-r--r-- | 754 bytes |
statx.c | -rw-r--r-- | 1.6 KB |
statx.h | -rw-r--r-- | 217 bytes |
sync.c | -rw-r--r-- | 2.8 KB |
sync.h | -rw-r--r-- | 460 bytes |
tctx.c | -rw-r--r-- | 7.2 KB |
tctx.h | -rw-r--r-- | 992 bytes |
timeout.c | -rw-r--r-- | 18.2 KB |
timeout.h | -rw-r--r-- | 1.2 KB |
uring_cmd.c | -rw-r--r-- | 4.0 KB |
uring_cmd.h | -rw-r--r-- | 231 bytes |
xattr.c | -rw-r--r-- | 5.6 KB |
xattr.h | -rw-r--r-- | 654 bytes |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...