diff --git a/ChangeLog b/ChangeLog index 73651f5..2895f53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ the condition inside. (chx_timer_expired, chx_handle_intr): Call unconditionally. (intr_lock): New variable. + (chx_handle_intr, chopstx_claim_irq, chopstx_release_irq) + (chopstx_release_irq_thread): Add spin lock with intr_lock. * chopstx.h (chx_intr): Remove member LOCK. diff --git a/chopstx.c b/chopstx.c index 2df444a..914b372 100644 --- a/chopstx.c +++ b/chopstx.c @@ -1331,6 +1331,7 @@ chopstx_release_irq_thread (struct chx_thread *tp) chopstx_intr_t *intr, *intr_prev; chx_cpu_sched_lock (); + chx_spin_lock (&intr_lock); intr_prev = intr_top; for (intr = intr_top; intr; intr = intr->next) if (intr->tp == tp) @@ -1344,6 +1345,7 @@ chopstx_release_irq_thread (struct chx_thread *tp) else intr_prev->next = intr->next; } + chx_spin_unlock (&intr_lock); chx_cpu_sched_unlock (); }