diff --git a/kernel/include/kernel/Terminal/Serial.h b/kernel/include/kernel/Terminal/Serial.h index d666bbf4..3df9250b 100644 --- a/kernel/include/kernel/Terminal/Serial.h +++ b/kernel/include/kernel/Terminal/Serial.h @@ -62,6 +62,7 @@ namespace Kernel BAN::String m_name; Serial m_serial; BAN::CircularQueue m_input; + SpinLock m_input_lock; public: virtual dev_t rdev() const override { return m_rdev; } diff --git a/kernel/kernel/Terminal/Serial.cpp b/kernel/kernel/Terminal/Serial.cpp index c7c64ba0..e60b8021 100644 --- a/kernel/kernel/Terminal/Serial.cpp +++ b/kernel/kernel/Terminal/Serial.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -219,6 +218,8 @@ namespace Kernel void SerialTTY::handle_irq() { uint8_t ch = IO::inb(m_serial.port()); + + SpinLockGuard _(m_input_lock); if (m_input.full()) { dwarnln("Serial buffer full"); @@ -235,7 +236,7 @@ namespace Kernel uint8_t buffer[128]; { - CriticalScope _; + SpinLockGuard _(m_input_lock); if (m_input.empty()) return; uint8_t* ptr = buffer;