diff options
| author | GuEe-GUI <[email protected]> | 2024-09-11 12:54:03 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2024-09-19 21:14:42 +0800 |
| commit | 584f4b869d0cb57d7ee625f3c255dffa4649d205 (patch) | |
| tree | cdecb7803f74bc6ba4a40831b46c9d5cd20a5e3e /components | |
| parent | 2a8aba4c8b8c5a9f415cfa24316eba8a5573cc4a (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.c | 17 |
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); } |
