From f70d9507665f905dcf84e8ad38a44baf860d4b78 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 4 Aug 2026 12:14:59 -0400 Subject: [PATCH] nvmm: preempt_disable should be able to be nested. May fix #20224. Change-Id: Ide859c35c76b525af1dd6bc5ab3b640e89039503 Reviewed-on: https://review.haiku-os.org/c/haiku/+/11415 Reviewed-by: waddlesplash (cherry picked from commit 4fc9b717c3e4e5d22a9d434b25c032f78a56f5c4) Reviewed-on: https://review.haiku-os.org/c/haiku/+/11418 --- src/add-ons/kernel/drivers/nvmm/nvmm_haiku.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/drivers/nvmm/nvmm_haiku.cpp b/src/add-ons/kernel/drivers/nvmm/nvmm_haiku.cpp index a389021a5c..ae99e5b25a 100644 --- a/src/add-ons/kernel/drivers/nvmm/nvmm_haiku.cpp +++ b/src/add-ons/kernel/drivers/nvmm/nvmm_haiku.cpp @@ -192,14 +192,15 @@ haiku_thread_unpin() extern "C" void os_preempt_disable() { - thread_get_current_thread()->cpu->reschedule_disabled = true; + thread_get_current_thread()->cpu->reschedule_disabled++; } extern "C" void os_preempt_enable() { - thread_get_current_thread()->cpu->reschedule_disabled = false; + ASSERT(os_preempt_disabled()); + thread_get_current_thread()->cpu->reschedule_disabled--; if (os_return_needed()) scheduler_reschedule_if_necessary(); }