diff options
Diffstat (limited to 'Kernel/Interrupts/InterruptDisabler.h')
-rw-r--r-- | Kernel/Interrupts/InterruptDisabler.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Kernel/Interrupts/InterruptDisabler.h b/Kernel/Interrupts/InterruptDisabler.h new file mode 100644 index 0000000000..d4e49bb9b4 --- /dev/null +++ b/Kernel/Interrupts/InterruptDisabler.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022, Timon Kruiper <timonkruiper@gmail.com> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <AK/Types.h> +#include <Kernel/Arch/Processor.h> + +namespace Kernel { + +class InterruptDisabler { +public: + InterruptDisabler() + : m_interrupts_were_enabled(Processor::are_interrupts_enabled()) + { + Processor::disable_interrupts(); + } + + ~InterruptDisabler() + { + if (m_interrupts_were_enabled) + Processor::enable_interrupts(); + } + +private: + bool m_interrupts_were_enabled; +}; + +} |