diff --git a/kernel/include/kernel/USB/XHCI/Controller.h b/kernel/include/kernel/USB/XHCI/Controller.h index 76861432..1ee724a1 100644 --- a/kernel/include/kernel/USB/XHCI/Controller.h +++ b/kernel/include/kernel/USB/XHCI/Controller.h @@ -73,10 +73,11 @@ namespace Kernel Mutex m_mutex; - Process* m_port_updater { nullptr }; + BAN::Atomic m_port_updater { nullptr }; ThreadBlocker m_port_thread_blocker; BAN::Atomic m_port_changed { false }; + bool m_running { true }; bool m_ports_initialized { false }; PCI::Device& m_pci_device; diff --git a/kernel/kernel/USB/XHCI/Controller.cpp b/kernel/kernel/USB/XHCI/Controller.cpp index cea3c61e..e9ceb40e 100644 --- a/kernel/kernel/USB/XHCI/Controller.cpp +++ b/kernel/kernel/USB/XHCI/Controller.cpp @@ -16,8 +16,9 @@ namespace Kernel XHCIController::~XHCIController() { - if (m_port_updater) - m_port_updater->exit(0, SIGKILL); + m_running = false; + while (m_port_updater) + Processor::yield(); for (auto paddr : m_scratchpad_buffers) if (paddr) @@ -308,7 +309,7 @@ namespace Kernel uint64_t last_port_update = SystemTimer::get().ms_since_boot(); - while (true) + while (m_running) { { bool expected { true }; @@ -389,6 +390,8 @@ namespace Kernel } } } + + m_port_updater = nullptr; } BAN::ErrorOr XHCIController::initialize_device(uint32_t route_string, uint8_t depth, USB::SpeedClass speed_class, XHCIDevice* parent_hub, uint8_t parent_port_id)