1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:47:45 +00:00

Kernel/aarch64: Correctly implement Processor::leave_critical

This commit is contained in:
Timon Kruiper 2023-02-22 23:26:30 +01:00 committed by Andrew Kaster
parent 1fa1f09c38
commit 1f68ac600c
2 changed files with 25 additions and 6 deletions

View file

@ -121,6 +121,28 @@ void Processor::flush_tlb(Memory::PageDirectory const*, VirtualAddress vaddr, si
flush_tlb_local(vaddr, page_count);
}
void Processor::leave_critical()
{
InterruptDisabler disabler;
current().do_leave_critical();
}
void Processor::do_leave_critical()
{
VERIFY(m_in_critical > 0);
if (m_in_critical == 1) {
if (m_in_irq == 0) {
// FIXME: Call deferred_call_execute_pending()!
VERIFY(m_in_critical == 1);
}
m_in_critical = 0;
if (m_in_irq == 0)
check_invoke_scheduler();
} else {
m_in_critical = m_in_critical - 1;
}
}
u32 Processor::clear_critical()
{
InterruptDisabler disabler;