diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c --- a/sys/kern/kern_rmlock.c +++ b/sys/kern/kern_rmlock.c @@ -449,17 +449,13 @@ THREAD_NO_SLEEPING(); td->td_critnest++; /* critical_enter(); */ - atomic_interrupt_fence(); pc = get_pcpu(); - rm_tracker_add(pc, tracker); - sched_pin(); atomic_interrupt_fence(); - td->td_critnest--; /* @@ -517,8 +513,12 @@ return; td->td_critnest++; /* critical_enter(); */ + atomic_interrupt_fence(); + pc = get_pcpu(); rm_tracker_remove(pc, tracker); + + atomic_interrupt_fence(); td->td_critnest--; sched_unpin();