mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
audio: fix might_sleep warning at bootup [1/1]
PD#SWPL-16123 Problem: might_sleep() is triggered by regmap_read(). [ 3.106894@0] Workqueue: events tl1_acodec_release_fast_mode_work_func [ 3.106903@0] [bc059af4+ 16][<c020e3a8>] show_stack+0x20/0x24 [ 3.106910@0] [bc059b1c+ 40][<c05dff94>] dump_stack+0xb8/0xf4 [ 3.106917@0] [bc059b44+ 40][<c0258138>] ___might_sleep+0x1c8/0x208 [ 3.106922@0] [bc059b6c+ 40][<c02581ec>] __might_sleep+0x74/0xac [ 3.106928@0] [bc059bb4+ 72][<c0393a80>] kmem_cache_alloc_trace+0x12c/0x2c0 [ 3.106935@0] [bc059bfc+ 72][<c06bd03c>] regcache_rbtree_write+0x2dc/0x4f0 [ 3.106941@0] [bc059c1c+ 32][<c06bbbd8>] regcache_write+0x64/0x6c [ 3.106945@0] [bc059c44+ 40][<c06b9260>] _regmap_write+0x144/0x16c [ 3.106948@0] [bc059c64+ 32][<c06bab4c>] regmap_write+0x4c/0x6c [ 3.106953@0] [bc059c74+ 16][<c0c79088>] snd_soc_component_write+0x28/0x48 [ 3.106958@0] [bc059c84+ 16][<c0c790c4>] snd_soc_write+0x1c/0x20 [ 3.106962@0] [bc059c9c+ 24][<c0c7c0b0>] tl1_acodec_start_up+0x24/0x44 [ 3.106967@0] [bc059cbc+ 32][<c0c7c1b8>] tl1_acodec_release_fast_mode_work_func+0x54/0xe4 [ 3.106973@0] [bc059cfc+ 64][<c0245dc8>] process_one_work+0x200/0x624 [ 3.106977@0] [bc059d3c+ 64][<c0246dc4>] worker_thread+0x58/0x5c4 [ 3.106982@0] [bc059d94+ 88][<c024c5c0>] kthread+0x128/0x144 [ 3.106987@0] [00000000+ 0][<c020885c>] ret_from_fork+0x14/0x38 Solution: This is a mmio regmap constrain using spinlock_irq to protect the critical read and write. But if the default reg cache is not allocated, the read routine will malloc() buffer which is non-atomic. That is the root cause of this warning. So we add num_reg_defaults_raw to tell regmap to malloc the buffer at initializing stage. Verify: TL1. Change-Id: I42f87fa89bbe99762ada36337b5ed6565b06b891 Signed-off-by: Shuai Li <shuai.li@amlogic.com>
This commit is contained in:
@@ -699,6 +699,7 @@ static const struct regmap_config tl1_acodec_regmap_config = {
|
||||
.reg_stride = 4,
|
||||
.val_bits = 32,
|
||||
.max_register = 0x1c,
|
||||
.num_reg_defaults_raw = ARRAY_SIZE(tl1_acodec_init_list),
|
||||
.cache_type = REGCACHE_RBTREE,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user