@@ -192,10 +192,17 @@ static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, in
192
192
int rt_pic_config_ipi (struct rt_pic * pic , int ipi_index , int hwirq )
193
193
{
194
194
int ipi = ipi_index ;
195
+ struct rt_pic_irq * pirq ;
195
196
196
197
if (pic && ipi < RT_ARRAY_SIZE (_ipi_hash ) && hwirq >= 0 && pic -> ops -> irq_send_ipi )
197
198
{
198
- config_pirq (pic , & _pirq_hash [ipi ], ipi , hwirq );
199
+ pirq = & _pirq_hash [ipi ];
200
+ config_pirq (pic , pirq , ipi , hwirq );
201
+
202
+ for (int cpuid = 0 ; cpuid < RT_CPUS_NR ; ++ cpuid )
203
+ {
204
+ RT_IRQ_AFFINITY_SET (pirq -> affinity , cpuid );
205
+ }
199
206
200
207
LOG_D ("%s config %s %d to hwirq %d" , pic -> ops -> name , "ipi" , ipi , hwirq );
201
208
}
@@ -404,7 +411,7 @@ rt_err_t rt_pic_detach_irq(int irq, void *uid)
404
411
}
405
412
else
406
413
{
407
- struct rt_pic_isr * next_isr = rt_list_entry ( isr -> list . next , struct rt_pic_isr , list );
414
+ struct rt_pic_isr * next_isr = rt_list_first_entry ( & isr -> list , struct rt_pic_isr , list );
408
415
409
416
rt_list_remove (& next_isr -> list );
410
417
@@ -518,9 +525,6 @@ rt_err_t rt_pic_handle_isr(struct rt_pic_irq *pirq)
518
525
pirq -> stat .current_irq_begin [rt_hw_cpu_id ()] = ts .tv_sec * (1000UL * 1000 * 1000 ) + ts .tv_nsec ;
519
526
#endif
520
527
521
- /* Corrected irq affinity */
522
- rt_bitmap_set_bit (pirq -> affinity , rt_hw_cpu_id ());
523
-
524
528
handler_nodes = & pirq -> isr .list ;
525
529
action = & pirq -> isr .action ;
526
530
0 commit comments