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:
parent
11310e7615
commit
d0452a3510
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue