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;
Process* m_port_updater { nullptr };
BAN::Atomic<Process*> m_port_updater { nullptr };
ThreadBlocker m_port_thread_blocker;
BAN::Atomic<bool> m_port_changed { false };
bool m_running { true };
bool m_ports_initialized { false };
PCI::Device& m_pci_device;

View File

@ -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<uint8_t> XHCIController::initialize_device(uint32_t route_string, uint8_t depth, USB::SpeedClass speed_class, XHCIDevice* parent_hub, uint8_t parent_port_id)