Access happens on the following path:
1) sof_ipc_tx_message => tx_wait_done => snd_sof_trace_notify_for_error => wake_up(&sdev->trace_sleep)
where sdev->trace_sleep is not yet initialized.
While at it also move initialization of sdev->host_offset before starting working with sdev struct.
Signed-off-by: Daniel Baluta daniel.baluta@gmail.com --- sound/soc/sof/trace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sound/soc/sof/trace.c b/sound/soc/sof/trace.c index 744d75b..2772cbee 100644 --- a/sound/soc/sof/trace.c +++ b/sound/soc/sof/trace.c @@ -245,6 +245,9 @@ int snd_sof_init_trace(struct snd_sof_dev *sdev) params.buffer.offset = 0; params.buffer.pages = sdev->dma_trace_pages;
+ init_waitqueue_head(&sdev->trace_sleep); + sdev->host_offset = 0; + /* send IPC to the DSP */ ret = sof_ipc_tx_message(sdev->ipc, params.hdr.cmd, ¶ms, sizeof(params), @@ -255,8 +258,6 @@ int snd_sof_init_trace(struct snd_sof_dev *sdev) goto table_err; }
- init_waitqueue_head(&sdev->trace_sleep); - sdev->host_offset = 0; return 0;
table_err: