From b18a7297c58a97fcfe501f7df0fb628125884278 Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Tue, 25 Oct 2022 22:17:57 +0200 Subject: Kernel: Move ScopedCritical.cpp to Kernel base directory This file does not contain any architecture specific implementations, so we can move it to the Kernel base directory. Also update the relevant include paths. --- Kernel/ScopedCritical.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Kernel/ScopedCritical.cpp (limited to 'Kernel/ScopedCritical.cpp') diff --git a/Kernel/ScopedCritical.cpp b/Kernel/ScopedCritical.cpp new file mode 100644 index 0000000000..c97478c6d5 --- /dev/null +++ b/Kernel/ScopedCritical.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include + +namespace Kernel { + +ScopedCritical::ScopedCritical() +{ + enter(); +} + +ScopedCritical::~ScopedCritical() +{ + if (m_valid) + leave(); +} + +ScopedCritical::ScopedCritical(ScopedCritical&& from) + : m_valid(exchange(from.m_valid, false)) +{ +} + +ScopedCritical& ScopedCritical::operator=(ScopedCritical&& from) +{ + if (&from != this) { + m_valid = exchange(from.m_valid, false); + } + return *this; +} + +void ScopedCritical::leave() +{ + VERIFY(m_valid); + m_valid = false; + Processor::leave_critical(); +} + +void ScopedCritical::enter() +{ + VERIFY(!m_valid); + m_valid = true; + Processor::enter_critical(); +} + +} -- cgit v1.2.3