我正在编写自定义的USB HCI驱动程序,并看到由硬件延迟引起的挂起问题。
基本上,在HCI驱动程序API(例如urb_enqueue()/ hub_control()/ hub_status())中,spin_lock用于确保端口状态更改的同步。当HCI驱动程序发送GetPortStatus()并对结果进行轮询时,我的硬件响应速度有点慢,因此导致其他进程等待相同的spin_lock饿死并挂起内核。
我正在考虑使用信号量而不是spin_lock,但是不确定这是否是个好主意,因为我不确定USB内核稍后将如何处理此类延迟...
任何人都知道有什么更好的解决方案?