From 584f4b869d0cb57d7ee625f3c255dffa4649d205 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 12:54:03 +0800 Subject: [PATCH] [PIC/FIXUP] pirq reinit fail don't reinit pirq's list if cascade Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/pic.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 4525c7d49e..75f629f974 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -177,15 +177,24 @@ static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, in { rt_ubase_t level = rt_spin_lock_irqsave(&pirq->rw_lock); + if (pirq->irq < 0) + { + rt_list_init(&pirq->list); + rt_list_init(&pirq->children_nodes); + rt_list_init(&pirq->isr.list); + } + else if (pirq->pic != pic) + { + RT_ASSERT(rt_list_isempty(&pirq->list) == RT_TRUE); + RT_ASSERT(rt_list_isempty(&pirq->children_nodes) == RT_TRUE); + RT_ASSERT(rt_list_isempty(&pirq->isr.list) == RT_TRUE); + } + pirq->irq = irq; pirq->hwirq = hwirq; pirq->pic = pic; - rt_list_init(&pirq->list); - rt_list_init(&pirq->children_nodes); - rt_list_init(&pirq->isr.list); - rt_spin_unlock_irqrestore(&pirq->rw_lock, level); }