并发、队列、缓冲与生命周期
1. 上下文
-USB completion在atomic/softirq语义下;
-UART receive callback不可长时间阻塞;
-firmware/setup可睡眠;
-workqueue执行重配置和恢复;
-HCI Core命令等待依赖RX事件推进。
2. SKB ownership
Transport queue持有TX skb;成功提交后completion释放或统计。RX parser分配skb并仅在完整frame后交HCI Core。错误路径必须重置partial state。
3. USB anchors
BTUSB按TX/RX/isoc/deferred anchor组织URB。Suspend/disconnect用kill/poison同步等待completion退出。
4. UART state bits
HCI_UART_SENDING序列化发送循环,HCI_UART_TX_WAKEUP记录发送期间的新数据。Protocol dequeue决定下一frame,并可能附加framing/escaping。
5. H5 timers
H5 link establishment、ack和retrans由timer/work推进。Close必须同步取消,防止访问已释放 hci_uart。
6. SDIO
IRQ通知可读数据/可写credits;work或thread取包。Host claim范围必须短,避免阻塞Wi-Fi同host及PM。
7. Open/Close
状态转换需幂等处理:
-重复open避免重复提交RX;
-close先清running再kill I/O;
-disconnect先unregister阻止Core新请求;
-firmware work必须cancel;
-回调使用device reference。
8. Suspend
Suspend与TX竞态常用:
-suspending flag;
-busy counter;
-deferred queue;
-synchronized URB kill;
-resume后重提RX并flush deferred。
9. Statistics
HCI stat记录byte/packet/error;transport另有USB/SDIO/vendor日志。统计突增应结合btmon时间线,不只看最终值。
10. 内存压力
GFP_ATOMIC分配失败会丢RX frame。高吞吐下关注UART overrun、USB URB数量、SDIO block size、CPU调度和BlueZ消费速度。
正在加载留言…