v1
2026-08-19
IOVA 分配器改用 maple tree · v1
将 IOMMU IOVA 分配器从 rbtree 转换为 maple tree,并处理 GFP_ATOMIC 失败后延迟 erase。
原始补丁链接
子 Patch(3)
1/3
iommu/iova: convert from rbtree to maple tree
alloc_iova 原线性扫 rbtree 导致软锁;改用 maple tree 的 mas_empty_area_rev() 找空洞。remove_iova 以 mas_store_gfp(…,NULL,GFP_ATOMIC) 擦除,失败由后续 drain 重试。
2/3
iommu/iova: defer maple tree erase on GFP_ATOMIC failure
maple erase 在原子上下文可能因 rebalance 分配失败;改成写 IOVA_DEFERRED 标记保留区间并释放 iova,非 NULL 存储不会扩展邻区故不会失败,再由 iova_drain_deferred() 重试。
3/3
iommu/iova: add KUnit test suite
新增 KUnit 套件与 iova_domain_verify_invariants(),校验 pfn_lo/pfn_hi 与重叠;覆盖对齐、top-down、保留、耗尽分配等;固定种子随机 alloc/free,并 hook remove_iova 强制 erase 失败验证 deferred 机制。