summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorGuEe-GUI <[email protected]>2024-09-11 12:54:03 +0800
committerRbb666 <[email protected]>2024-09-19 21:14:42 +0800
commit584f4b869d0cb57d7ee625f3c255dffa4649d205 (patch)
treecdecb7803f74bc6ba4a40831b46c9d5cd20a5e3e /components
parent2a8aba4c8b8c5a9f415cfa24316eba8a5573cc4a (diff)
[PIC/FIXUP] pirq reinit fail
don't reinit pirq's list if cascade Signed-off-by: GuEe-GUI <[email protected]>
Diffstat (limited to 'components')
-rw-r--r--components/drivers/pic/pic.c17
1 files 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);
}