On 10/31/2018 3:55 AM, Patrick Lai wrote:
On 10/30/18 7:50 AM, Rohit Kumar wrote:
Hi,
We are facing crash in hdmi codec driver when we use DPCM based dai-links. Crash is happening in hdmi_codec_eld_chmap() while accessing chmap_info struct during hdmi_codec_startup(). However, chmap_info struct is allocated in hdmi_codec_pcm_new() which is only called in non-DPCM based dai-links.
Below is the crash stack:
[61.635493] Unable to handle kernel NULL pointer dereference at virtual address 00000018
.....
[61.666696]CM = 0, WnR = 1
[61.669778] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffc0d6633000
[61.676526] [0000000000000018] *pgd=0000000153fc8003, *pud=0000000153fc8003, *pmd=0000000000000000
[61.685793] Internal error: Oops: 96000046 [#1] PREEMPT SMP
[61.722955] CPU: 7 PID: 2238 Comm: aplay Not tainted 4.14.72 #21
..
[61.740269] PC is at hdmi_codec_startup+0x124/0x164
[61.745308] LR is at hdmi_codec_startup+0xe4/0x164
..
We would probably need to move the implementation on pcm_new() to some other function to make it compatible with DPCM.
Can you please provide suggestions in solving the issue.
In my opinion, it is not responsibility of driver to speculate whether the ops it exposes would only be called under certain usage (non-DPCM in this case). I think ASoC framework should be updated to call pcm_new() of each driver even though no actual PCM device would be created for backend dailink.
Thanks Patrick for the response. In that case, we should avoid no_pcm check before calling pcm_new() in soc_link_dai_pcm_new(). https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/soun...
Mark, Can you please provide your opinion for the same.
Thanks,
Rohit