diff --git a/include/metalsvm/spinlock.h b/include/metalsvm/spinlock.h index af4a973d..a71be6be 100644 --- a/include/metalsvm/spinlock.h +++ b/include/metalsvm/spinlock.h @@ -183,10 +183,14 @@ inline static int spinlock_irqsave_lock(spinlock_irqsave_t* s) { return 0; } +#if 0 ticket = atomic_int32_inc(&s->queue); while (atomic_int32_read(&s->dequeue) != ticket) { NOP1; } +#else + while( atomic_int32_test_and_set(&s->dequeue,0) ); +#endif s->coreid = CORE_ID; s->flags = flags; @@ -211,7 +215,11 @@ inline static int spinlock_irqsave_unlock(spinlock_irqsave_t* s) { flags = s->flags; s->coreid = (uint32_t) -1; s->flags = 0; +#if 0 atomic_int32_inc(&s->dequeue); +#else + atomic_int32_set(&s->dequeue,1); +#endif irq_nested_enable(flags); }