mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:47:37 +00:00
Kernel/aarch64: Correctly implement Processor::leave_critical
This commit is contained in:
parent
1fa1f09c38
commit
1f68ac600c
2 changed files with 25 additions and 6 deletions
|
@ -121,6 +121,28 @@ void Processor::flush_tlb(Memory::PageDirectory const*, VirtualAddress vaddr, si
|
||||||
flush_tlb_local(vaddr, page_count);
|
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()
|
u32 Processor::clear_critical()
|
||||||
{
|
{
|
||||||
InterruptDisabler disabler;
|
InterruptDisabler disabler;
|
||||||
|
|
|
@ -189,12 +189,7 @@ public:
|
||||||
current_processor.m_in_critical = current_processor.m_in_critical + 1;
|
current_processor.m_in_critical = current_processor.m_in_critical + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ALWAYS_INLINE static void leave_critical()
|
static void leave_critical();
|
||||||
{
|
|
||||||
auto& current_processor = current();
|
|
||||||
current_processor.m_in_critical = current_processor.m_in_critical - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u32 clear_critical();
|
static u32 clear_critical();
|
||||||
|
|
||||||
ALWAYS_INLINE static void restore_critical(u32 prev_critical)
|
ALWAYS_INLINE static void restore_critical(u32 prev_critical)
|
||||||
|
@ -285,6 +280,8 @@ public:
|
||||||
private:
|
private:
|
||||||
Processor(Processor const&) = delete;
|
Processor(Processor const&) = delete;
|
||||||
|
|
||||||
|
void do_leave_critical();
|
||||||
|
|
||||||
u32 m_cpu;
|
u32 m_cpu;
|
||||||
CPUFeature::Type m_features;
|
CPUFeature::Type m_features;
|
||||||
u8 m_physical_address_bit_width;
|
u8 m_physical_address_bit_width;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue