On 15/08/2025 17:56, Srinivas Kandagatla wrote: > Thanks Krzysztof, > On 8/15/25 12:39 PM, Krzysztof Kozlowski wrote: >> If earlier opening of source graph fails (e.g. ADSP rejects due to > > I think you are referring to the err patch in prepare. True I am working on feature relying on that other patch, but the code here is not really relevant to that other patch, I think. > >> incorrect audioreach topology), the graph is closed and >> "dai_data->graph[dai->id]" is assigned NULL. Preparing the DAI for sink >> graph continues though and next call to q6apm_lpass_dai_prepare() >> receives dai_data->graph[dai->id]=NULL leading to NULL pointer >> exception: >> >> qcom-apm gprsvc:service:2:1: Error (1) Processing 0x01001002 cmd >> qcom-apm gprsvc:service:2:1: DSP returned error[1001002] 1 >> q6apm-lpass-dais 30000000.remoteproc:glink-edge:gpr:service@1:bedais: fail to start APM port 78 >> q6apm-lpass-dais 30000000.remoteproc:glink-edge:gpr:service@1:bedais: ASoC: error at snd_soc_pcm_dai_prepare on TX_CODEC_DMA_TX_3: -22 >> Unable to handle kernel NULL pointer dereference at virtual address 00000000000000a8 >> ... >> Call trace: >> q6apm_graph_media_format_pcm+0x48/0x120 (P) >> q6apm_lpass_dai_prepare+0x110/0x1b4 >> snd_soc_pcm_dai_prepare+0x74/0x108 >> __soc_pcm_prepare+0x44/0x160 >> dpcm_be_dai_prepare+0x124/0x1c0 >> >> Fixes: 30ad723b93ad ("ASoC: qdsp6: audioreach: add q6apm lpass dai support") >> Cc: <stable@xxxxxxxxxxxxxxx> >> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> >> --- >> sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c b/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c >> index f90628d9b90e..7520e6f024c3 100644 >> --- a/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c >> +++ b/sound/soc/qcom/qdsp6/q6apm-lpass-dais.c >> @@ -191,6 +191,12 @@ static int q6apm_lpass_dai_prepare(struct snd_pcm_substream *substream, struct s >> return rc; >> } >> dai_data->graph[graph_id] = graph; >> + } else if (!dai_data->graph[dai->id]) { >> + /* >> + * Loading source graph failed before, so abort loading the sink >> + * as well. >> + */ >> + return -EINVAL; >> } > I guess this is the capture graph that is triggering the error, normally > we do not open/close the capture graph in prepare, we do > stop/prepare/start for capture graphs and handle open close in > startup/shutdown. > > Can you try this change and see if it fixes the issue, as prepare could > be called multiple times and your patch will not give chance for trying > new parameters incase the failure was due to unsupported params. Yes, this works. Best regards, Krzysztof