Skip to content

Commit 38cf887

Browse files
committed
dma-trace: kill a infinite loop in dma_trace_config
Don't delete item with list_for_item. with list_for_item, a item is deleted from list but the next of this item is used to visit the list. Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
1 parent 5df6c68 commit 38cf887

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

src/ipc/handler.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -613,14 +613,14 @@ static int ipc_glb_pm_message(uint32_t header)
613613
/*
614614
* Debug IPC Operations.
615615
*/
616-
617616
static int ipc_dma_trace_config(uint32_t header)
618617
{
619618
#ifdef CONFIG_HOST_PTABLE
620619
struct intel_ipc_data *iipc = ipc_get_drvdata(_ipc);
621620
struct list_item elem_list;
622621
struct dma_sg_elem *elem;
623-
struct list_item *plist;
622+
struct list_item *clist;
623+
struct list_item *tlist;
624624
uint32_t ring_size;
625625
#endif
626626
struct sof_ipc_dma_trace_params *params = _ipc->comp_data;
@@ -659,8 +659,8 @@ static int ipc_dma_trace_config(uint32_t header)
659659
goto error;
660660
}
661661

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

665665
err = dma_trace_host_buffer(_ipc->dmat, elem, ring_size);
666666
if (err < 0) {
@@ -693,8 +693,8 @@ static int ipc_dma_trace_config(uint32_t header)
693693

694694
error:
695695
#ifdef CONFIG_HOST_PTABLE
696-
list_for_item(plist, &elem_list) {
697-
elem = container_of(plist, struct dma_sg_elem, list);
696+
list_for_item_safe(clist, tlist, &elem_list) {
697+
elem = container_of(clist, struct dma_sg_elem, list);
698698
list_item_del(&elem->list);
699699
rfree(elem);
700700
}

0 commit comments

Comments
 (0)