From fbfe669f6dbd2b19bd863db4eab54f90116bf5fa Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Thu, 22 Dec 2022 13:39:47 +0100 Subject: [PATCH] Kernel/aarch64: Implement Processor::{clear,restore}_critical() --- Kernel/Arch/aarch64/Processor.cpp | 9 ++++++++- Kernel/Arch/aarch64/Processor.h | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Kernel/Arch/aarch64/Processor.cpp b/Kernel/Arch/aarch64/Processor.cpp index 4639717317..0433bf9bd6 100644 --- a/Kernel/Arch/aarch64/Processor.cpp +++ b/Kernel/Arch/aarch64/Processor.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -60,7 +61,13 @@ void Processor::flush_tlb(Memory::PageDirectory const*, VirtualAddress vaddr, si u32 Processor::clear_critical() { - TODO_AARCH64(); + InterruptDisabler disabler; + auto prev_critical = in_critical(); + auto& proc = current(); + proc.m_in_critical = 0; + if (proc.m_in_irq == 0) + proc.check_invoke_scheduler(); + return prev_critical; } u32 Processor::smp_wake_n_idle_processors(u32 wake_count) diff --git a/Kernel/Arch/aarch64/Processor.h b/Kernel/Arch/aarch64/Processor.h index 26940b1d6e..8bca91d587 100644 --- a/Kernel/Arch/aarch64/Processor.h +++ b/Kernel/Arch/aarch64/Processor.h @@ -192,8 +192,7 @@ public: ALWAYS_INLINE static void restore_critical(u32 prev_critical) { - (void)prev_critical; - TODO_AARCH64(); + current().m_in_critical = prev_critical; } ALWAYS_INLINE static u32 in_critical()