并发、队列、缓冲与生命周期

并发、队列、缓冲与生命周期

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消费速度。

文章互动

阅读 --

留言

0 条留言

正在加载留言…