Skip to content

Commit bc96f88

Browse files
RanderWangxiulipan
authored andcommitted
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 7c400d0 commit bc96f88

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
@@ -635,14 +635,14 @@ static int ipc_glb_pm_message(uint32_t header)
635635
/*
636636
* Debug IPC Operations.
637637
*/
638-
639638
static int ipc_dma_trace_config(uint32_t header)
640639
{
641640
#ifdef CONFIG_HOST_PTABLE
642641
struct intel_ipc_data *iipc = ipc_get_drvdata(_ipc);
643642
struct list_item elem_list;
644643
struct dma_sg_elem *elem;
645-
struct list_item *plist;
644+
struct list_item *clist;
645+
struct list_item *tlist;
646646
uint32_t ring_size;
647647
#endif
648648
struct sof_ipc_dma_trace_params *params = _ipc->comp_data;
@@ -681,8 +681,8 @@ static int ipc_dma_trace_config(uint32_t header)
681681
goto error;
682682
}
683683

684-
list_for_item(plist, &elem_list) {
685-
elem = container_of(plist, struct dma_sg_elem, list);
684+
list_for_item_safe(clist, tlist, &elem_list) {
685+
elem = container_of(clist, struct dma_sg_elem, list);
686686

687687
err = dma_trace_host_buffer(_ipc->dmat, elem, ring_size);
688688
if (err < 0) {
@@ -715,8 +715,8 @@ static int ipc_dma_trace_config(uint32_t header)
715715

716716
error:
717717
#ifdef CONFIG_HOST_PTABLE
718-
list_for_item(plist, &elem_list) {
719-
elem = container_of(plist, struct dma_sg_elem, list);
718+
list_for_item_safe(clist, tlist, &elem_list) {
719+
elem = container_of(clist, struct dma_sg_elem, list);
720720
list_item_del(&elem->list);
721721
rfree(elem);
722722
}

0 commit comments

Comments
 (0)