From a4534678f978c7ea62b70bc8ab4bdc8f6437f90a Mon Sep 17 00:00:00 2001 From: Timon Kruiper Date: Mon, 16 May 2022 14:42:49 +0200 Subject: [PATCH] Kernel: Implement InterruptDisabler using generic Processor functions Now that the code does not use architectural specific code, it is moved to the generic Arch directory and the paths are modified accordingly. --- Kernel/Arch/InterruptDisabler.h | 32 ++++++++++++++++ Kernel/Arch/x86/InterruptDisabler.h | 38 ------------------- Kernel/Arch/x86/common/Processor.cpp | 2 +- Kernel/Arch/x86/common/TrapFrame.cpp | 2 +- Kernel/DoubleBuffer.cpp | 2 +- Kernel/FileSystem/FileSystem.cpp | 2 +- Kernel/Firmware/ACPI/Parser.cpp | 2 +- Kernel/Firmware/Hypervisor/VMWareBackdoor.cpp | 2 +- Kernel/GlobalProcessExposed.cpp | 2 +- Kernel/Interrupts/IOAPIC.cpp | 2 +- Kernel/Interrupts/IRQHandler.cpp | 2 +- Kernel/Interrupts/InterruptManagement.cpp | 2 +- Kernel/Interrupts/PIC.cpp | 2 +- Kernel/Memory/ScopedAddressSpaceSwitcher.cpp | 2 +- Kernel/Net/NetworkAdapter.cpp | 2 +- Kernel/Process.cpp | 2 +- Kernel/ProcessSpecificExposed.cpp | 2 +- Kernel/Scheduler.cpp | 2 +- Kernel/Syscalls/kill.cpp | 2 +- Kernel/Syscalls/setpgid.cpp | 2 +- Kernel/Syscalls/sigaction.cpp | 2 +- Kernel/TTY/MasterPTY.cpp | 2 +- Kernel/TTY/TTY.cpp | 2 +- Kernel/Thread.cpp | 2 +- Kernel/Time/HPETComparator.cpp | 2 +- Kernel/Time/PIT.cpp | 2 +- Kernel/Time/RTC.cpp | 2 +- Kernel/Time/TimeManagement.cpp | 2 +- 28 files changed, 58 insertions(+), 64 deletions(-) create mode 100644 Kernel/Arch/InterruptDisabler.h delete mode 100644 Kernel/Arch/x86/InterruptDisabler.h diff --git a/Kernel/Arch/InterruptDisabler.h b/Kernel/Arch/InterruptDisabler.h new file mode 100644 index 0000000000..d4e49bb9b4 --- /dev/null +++ b/Kernel/Arch/InterruptDisabler.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022, Timon Kruiper + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +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; +}; + +} diff --git a/Kernel/Arch/x86/InterruptDisabler.h b/Kernel/Arch/x86/InterruptDisabler.h deleted file mode 100644 index 941ddaab2b..0000000000 --- a/Kernel/Arch/x86/InterruptDisabler.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018-2021, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include - -#include - -#include - -#include -VALIDATE_IS_X86() - -namespace Kernel { - -class InterruptDisabler { -public: - InterruptDisabler() - { - m_flags = cpu_flags(); - cli(); - } - - ~InterruptDisabler() - { - if ((m_flags & 0x200) != 0) - sti(); - } - -private: - u32 m_flags; -}; - -} diff --git a/Kernel/Arch/x86/common/Processor.cpp b/Kernel/Arch/x86/common/Processor.cpp index 7e2e2800ad..632d24e2b9 100644 --- a/Kernel/Arch/x86/common/Processor.cpp +++ b/Kernel/Arch/x86/common/Processor.cpp @@ -19,12 +19,12 @@ #include #include +#include #include #include #include #include #include -#include #include #include #include diff --git a/Kernel/Arch/x86/common/TrapFrame.cpp b/Kernel/Arch/x86/common/TrapFrame.cpp index 9e3054c678..2262840d1c 100644 --- a/Kernel/Arch/x86/common/TrapFrame.cpp +++ b/Kernel/Arch/x86/common/TrapFrame.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include namespace Kernel { diff --git a/Kernel/DoubleBuffer.cpp b/Kernel/DoubleBuffer.cpp index 498bf0f538..cc921ef7bb 100644 --- a/Kernel/DoubleBuffer.cpp +++ b/Kernel/DoubleBuffer.cpp @@ -5,7 +5,7 @@ */ #include -#include +#include #include namespace Kernel { diff --git a/Kernel/FileSystem/FileSystem.cpp b/Kernel/FileSystem/FileSystem.cpp index 368d924425..96d19bef43 100644 --- a/Kernel/FileSystem/FileSystem.cpp +++ b/Kernel/FileSystem/FileSystem.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Firmware/ACPI/Parser.cpp b/Kernel/Firmware/ACPI/Parser.cpp index 41ebbecd12..406275bffb 100644 --- a/Kernel/Firmware/ACPI/Parser.cpp +++ b/Kernel/Firmware/ACPI/Parser.cpp @@ -9,8 +9,8 @@ #include #include #include +#include #include -#include #include #include #include diff --git a/Kernel/Firmware/Hypervisor/VMWareBackdoor.cpp b/Kernel/Firmware/Hypervisor/VMWareBackdoor.cpp index 5df1b8d61d..b1b78ed585 100644 --- a/Kernel/Firmware/Hypervisor/VMWareBackdoor.cpp +++ b/Kernel/Firmware/Hypervisor/VMWareBackdoor.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/GlobalProcessExposed.cpp b/Kernel/GlobalProcessExposed.cpp index 025b3ea8be..91288c4531 100644 --- a/Kernel/GlobalProcessExposed.cpp +++ b/Kernel/GlobalProcessExposed.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Interrupts/IOAPIC.cpp b/Kernel/Interrupts/IOAPIC.cpp index f17be74382..0b75722bfd 100644 --- a/Kernel/Interrupts/IOAPIC.cpp +++ b/Kernel/Interrupts/IOAPIC.cpp @@ -5,7 +5,7 @@ */ #include -#include +#include #include #include #include diff --git a/Kernel/Interrupts/IRQHandler.cpp b/Kernel/Interrupts/IRQHandler.cpp index d73ccc94cd..86e53a3404 100644 --- a/Kernel/Interrupts/IRQHandler.cpp +++ b/Kernel/Interrupts/IRQHandler.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include #include diff --git a/Kernel/Interrupts/InterruptManagement.cpp b/Kernel/Interrupts/InterruptManagement.cpp index c7570f3f34..a63f90d94b 100644 --- a/Kernel/Interrupts/InterruptManagement.cpp +++ b/Kernel/Interrupts/InterruptManagement.cpp @@ -6,8 +6,8 @@ #include #include +#include #include -#include #include #include #include diff --git a/Kernel/Interrupts/PIC.cpp b/Kernel/Interrupts/PIC.cpp index 906cdc2018..002e6fbbd8 100644 --- a/Kernel/Interrupts/PIC.cpp +++ b/Kernel/Interrupts/PIC.cpp @@ -6,8 +6,8 @@ #include #include +#include #include -#include #include #include #include diff --git a/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp b/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp index f007141a68..146d37b2b9 100644 --- a/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp +++ b/Kernel/Memory/ScopedAddressSpaceSwitcher.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include diff --git a/Kernel/Net/NetworkAdapter.cpp b/Kernel/Net/NetworkAdapter.cpp index cbc16764a9..c5860813dc 100644 --- a/Kernel/Net/NetworkAdapter.cpp +++ b/Kernel/Net/NetworkAdapter.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include #include diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 0b60ae622d..e709323821 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/ProcessSpecificExposed.cpp b/Kernel/ProcessSpecificExposed.cpp index 653f1c786a..5f9c9399d4 100644 --- a/Kernel/ProcessSpecificExposed.cpp +++ b/Kernel/ProcessSpecificExposed.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Scheduler.cpp b/Kernel/Scheduler.cpp index 9695086004..7159e45fef 100644 --- a/Kernel/Scheduler.cpp +++ b/Kernel/Scheduler.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Syscalls/kill.cpp b/Kernel/Syscalls/kill.cpp index 66067584e5..58c3409b5d 100644 --- a/Kernel/Syscalls/kill.cpp +++ b/Kernel/Syscalls/kill.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include namespace Kernel { diff --git a/Kernel/Syscalls/setpgid.cpp b/Kernel/Syscalls/setpgid.cpp index 9d3f58e13d..d2976c9aa5 100644 --- a/Kernel/Syscalls/setpgid.cpp +++ b/Kernel/Syscalls/setpgid.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include diff --git a/Kernel/Syscalls/sigaction.cpp b/Kernel/Syscalls/sigaction.cpp index 38c5cd19ff..c5a94d27c1 100644 --- a/Kernel/Syscalls/sigaction.cpp +++ b/Kernel/Syscalls/sigaction.cpp @@ -5,8 +5,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include namespace Kernel { diff --git a/Kernel/TTY/MasterPTY.cpp b/Kernel/TTY/MasterPTY.cpp index 6c27d348ee..4739e644e7 100644 --- a/Kernel/TTY/MasterPTY.cpp +++ b/Kernel/TTY/MasterPTY.cpp @@ -5,7 +5,7 @@ */ #include -#include +#include #include #include #include diff --git a/Kernel/TTY/TTY.cpp b/Kernel/TTY/TTY.cpp index 77bb9ed645..c8f0b68999 100644 --- a/Kernel/TTY/TTY.cpp +++ b/Kernel/TTY/TTY.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index b168ea4c6b..5c1306b477 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -9,8 +9,8 @@ #include #include #include +#include #include -#include #include #include #include diff --git a/Kernel/Time/HPETComparator.cpp b/Kernel/Time/HPETComparator.cpp index ce95a93fbf..7cdefd1706 100644 --- a/Kernel/Time/HPETComparator.cpp +++ b/Kernel/Time/HPETComparator.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include #include diff --git a/Kernel/Time/PIT.cpp b/Kernel/Time/PIT.cpp index 455a77240e..f435e23b5c 100644 --- a/Kernel/Time/PIT.cpp +++ b/Kernel/Time/PIT.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include #include #include diff --git a/Kernel/Time/RTC.cpp b/Kernel/Time/RTC.cpp index f8b7a690bb..59de79808e 100644 --- a/Kernel/Time/RTC.cpp +++ b/Kernel/Time/RTC.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include #include #include diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp index 811cd7a4ef..18d42d6d95 100644 --- a/Kernel/Time/TimeManagement.cpp +++ b/Kernel/Time/TimeManagement.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include