From 334e90a2ac5d36091c2251fc011347c56bc8e2c7 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 10 Mar 2026 15:21:27 -0400 Subject: [PATCH] kernel/smp: Just return free messages using a write spinlock. There isn't much value in using extra atomics here. --- src/system/kernel/smp.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/system/kernel/smp.cpp b/src/system/kernel/smp.cpp index f54e25027e..ad10f31b33 100644 --- a/src/system/kernel/smp.cpp +++ b/src/system/kernel/smp.cpp @@ -722,16 +722,11 @@ return_free_message(struct smp_msg* msg) { TRACE("return_free_message: returning msg %p\n", msg); - acquire_read_spinlock_nocheck(&sFreeMessageSpinlock); + acquire_write_spinlock_nocheck(&sFreeMessageSpinlock); msg->next = sFreeMessages; - while (true) { - smp_msg* result = atomic_pointer_test_and_set(&sFreeMessages, msg, msg->next); - if (result == msg->next) - break; - msg->next = result; - } - atomic_add(&sFreeMessageCount, 1); - release_read_spinlock(&sFreeMessageSpinlock); + sFreeMessages = msg; + sFreeMessageCount++; + release_write_spinlock(&sFreeMessageSpinlock); }