Kernel: Fix xHCI controller destruction

Port updater task was not actually able to exit without a kernel panic.
This patch makes controller wait until port updater exits itself :D
This commit is contained in:
Bananymous 2025-02-10 22:58:57 +02:00
parent 11310e7615
commit d0452a3510
2 changed files with 8 additions and 4 deletions

View File

@ -73,10 +73,11 @@ namespace Kernel
Mutex m_mutex; Mutex m_mutex;
Process* m_port_updater { nullptr }; BAN::Atomic<Process*> m_port_updater { nullptr };
ThreadBlocker m_port_thread_blocker; ThreadBlocker m_port_thread_blocker;
BAN::Atomic<bool> m_port_changed { false }; BAN::Atomic<bool> m_port_changed { false };
bool m_running { true };
bool m_ports_initialized { false }; bool m_ports_initialized { false };
PCI::Device& m_pci_device; PCI::Device& m_pci_device;

View File

@ -16,8 +16,9 @@ namespace Kernel
XHCIController::~XHCIController() XHCIController::~XHCIController()
{ {
if (m_port_updater) m_running = false;
m_port_updater->exit(0, SIGKILL); while (m_port_updater)
Processor::yield();
for (auto paddr : m_scratchpad_buffers) for (auto paddr : m_scratchpad_buffers)
if (paddr) if (paddr)
@ -308,7 +309,7 @@ namespace Kernel
uint64_t last_port_update = SystemTimer::get().ms_since_boot(); uint64_t last_port_update = SystemTimer::get().ms_since_boot();
while (true) while (m_running)
{ {
{ {
bool expected { true }; bool expected { true };
@ -389,6 +390,8 @@ namespace Kernel
} }
} }
} }
m_port_updater = nullptr;
} }
BAN::ErrorOr<uint8_t> XHCIController::initialize_device(uint32_t route_string, uint8_t depth, USB::SpeedClass speed_class, XHCIDevice* parent_hub, uint8_t parent_port_id) BAN::ErrorOr<uint8_t> XHCIController::initialize_device(uint32_t route_string, uint8_t depth, USB::SpeedClass speed_class, XHCIDevice* parent_hub, uint8_t parent_port_id)