Skip to content

Commit 834d3cb

Browse files
authored
Merge pull request #333 from RanderWang/list-loop-1.2
dma-trace: kill a infinite loop when visiting list
2 parents 5df6c68 + c2a3bba commit 834d3cb

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

src/ipc/handler.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
166166
struct sof_ipc_comp_host *host = NULL;
167167
struct list_item elem_list;
168168
struct dma_sg_elem *elem;
169-
struct list_item *plist;
169+
struct list_item *clist;
170+
struct list_item *tlist;
170171
uint32_t ring_size;
171172
#endif
172173
struct sof_ipc_pcm_params *pcm_params = _ipc->comp_data;
@@ -232,8 +233,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
232233
goto error;
233234
}
234235

235-
list_for_item(plist, &elem_list) {
236-
elem = container_of(plist, struct dma_sg_elem, list);
236+
list_for_item_safe(clist, tlist, &elem_list) {
237+
elem = container_of(clist, struct dma_sg_elem, list);
237238

238239
err = comp_host_buffer(cd, elem, ring_size);
239240
if (err < 0) {
@@ -278,8 +279,8 @@ static int ipc_stream_pcm_params(uint32_t stream)
278279

279280
error:
280281
#ifdef CONFIG_HOST_PTABLE
281-
list_for_item(plist, &elem_list) {
282-
elem = container_of(plist, struct dma_sg_elem, list);
282+
list_for_item_safe(clist, tlist, &elem_list) {
283+
elem = container_of(clist, struct dma_sg_elem, list);
283284
list_item_del(&elem->list);
284285
rfree(elem);
285286
}
@@ -613,14 +614,14 @@ static int ipc_glb_pm_message(uint32_t header)
613614
/*
614615
* Debug IPC Operations.
615616
*/
616-
617617
static int ipc_dma_trace_config(uint32_t header)
618618
{
619619
#ifdef CONFIG_HOST_PTABLE
620620
struct intel_ipc_data *iipc = ipc_get_drvdata(_ipc);
621621
struct list_item elem_list;
622622
struct dma_sg_elem *elem;
623-
struct list_item *plist;
623+
struct list_item *clist;
624+
struct list_item *tlist;
624625
uint32_t ring_size;
625626
#endif
626627
struct sof_ipc_dma_trace_params *params = _ipc->comp_data;
@@ -659,8 +660,8 @@ static int ipc_dma_trace_config(uint32_t header)
659660
goto error;
660661
}
661662

662-
list_for_item(plist, &elem_list) {
663-
elem = container_of(plist, struct dma_sg_elem, list);
663+
list_for_item_safe(clist, tlist, &elem_list) {
664+
elem = container_of(clist, struct dma_sg_elem, list);
664665

665666
err = dma_trace_host_buffer(_ipc->dmat, elem, ring_size);
666667
if (err < 0) {
@@ -693,8 +694,8 @@ static int ipc_dma_trace_config(uint32_t header)
693694

694695
error:
695696
#ifdef CONFIG_HOST_PTABLE
696-
list_for_item(plist, &elem_list) {
697-
elem = container_of(plist, struct dma_sg_elem, list);
697+
list_for_item_safe(clist, tlist, &elem_list) {
698+
elem = container_of(clist, struct dma_sg_elem, list);
698699
list_item_del(&elem->list);
699700
rfree(elem);
700701
}

0 commit comments

Comments
 (0)