Pārlūkot izejas kodu

Kernel: Disable interrupts for aarch64 in WorkQueue's main loop

This code expects to be executed with interrupts disabled, however we
currently spawn (kernel) threads with interrupts enabled on aarch64.
Timon Kruiper 2 gadi atpakaļ
vecāks
revīzija
aa40cef2b7
1 mainītis faili ar 8 papildinājumiem un 0 dzēšanām
  1. 8 0
      Kernel/WorkQueue.cpp

+ 8 - 0
Kernel/WorkQueue.cpp

@@ -5,6 +5,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  * SPDX-License-Identifier: BSD-2-Clause
  */
  */
 
 
+#include <Kernel/Arch/Processor.h>
 #include <Kernel/Process.h>
 #include <Kernel/Process.h>
 #include <Kernel/Sections.h>
 #include <Kernel/Sections.h>
 #include <Kernel/WaitQueue.h>
 #include <Kernel/WaitQueue.h>
@@ -28,6 +29,13 @@ UNMAP_AFTER_INIT WorkQueue::WorkQueue(StringView name)
     if (name_kstring.is_error())
     if (name_kstring.is_error())
         TODO();
         TODO();
     (void)Process::create_kernel_process(thread, name_kstring.release_value(), [this] {
     (void)Process::create_kernel_process(thread, name_kstring.release_value(), [this] {
+#if ARCH(AARCH64)
+        // FIXME: This function expects to be executed with interrupts disabled, however on
+        //        aarch64 we spawn (kernel) threads with interrupts enabled, so we need to disable them.
+        //        This code should be written in a way that it is able to be executed with interrupts enabled.
+        Processor::disable_interrupts();
+#endif
+
         for (;;) {
         for (;;) {
             WorkItem* item;
             WorkItem* item;
             bool have_more;
             bool have_more;