v9
2026-11-05
共享粒度主机共享内存分配器 · v9
v9为CoCo共享内存增加分配器,并让GIC ITS、DMA与swiotlb按共享粒度对齐。
原始补丁链接
子 Patch(14)
1/14
mm: Add an allocator for CoCo shared memory
新增 alloc_cc_shared_pages_node:按共享粒度对齐分配连续页并整段转 shared,__GFP_ZERO 延后清零;释放前恢复 private,失败则保留页面,防止共享页回流 buddy。
2/14
mm: Zero memory during shared memory transitions
将清零内建于 set_memory_decrypted:TDX/AMD/SEV-SNP 在 finish 回调转换后清,未加密平台保留 __GFP_ZERO 原路径,并删除重复 memset。
3/14
irqchip/gic-v3-its: Resolve the default NUMA node explicitly
在 its_alloc_pages_node 中把 NUMA_NO_NODE 显式解析为 numa_mem_id(),避免 CoCo 分配器将其当作任务 mempolicy,保持原最近节点分配。
4/14
irqchip/gic-v3-its: Allocate shared tables using CoCo shared memory allocator
ITS 命令队列和表改用 alloc_cc_shared_pages_node 分配;释放时用原 ITS order 与架构共享粒度重建元数据,恢复同一转换范围和 buddy order。
5/14
dma-contiguous: Derive shared alignment from DMA attributes
DMA contiguous 入口接收分配属性,按 __DMA_ATTR_ALLOC_CC_SHARED 派生共享粒度对齐;普通分配保留 clamp,共享粒度超过 CMA 对齐上限则拒绝并回退页分配器。
6/14
dma-pool: Allocate CoCo atomic pools using CoCo shared memory allocator
cc_shared 原子池大小按共享粒度取整并限制最低 order,向 CMA 传 __DMA_ATTR_ALLOC_CC_SHARED 强制对齐,不满足则回退 buddy;用 cc_make_shared/private 转换并校验 backing。
7/14
dma-direct: Align CoCo shared DMA allocations to the shared granule size
dma-direct 对 CMA/页分配器路径按共享粒度取整并用公共 helper 整段转换,释放前重算布局;恢复 private 失败则泄漏,避免共享页回到分配器。
8/14
swiotlb: Align shared IO TLB pools to the shared granule size
SWIOTLB early 池按共享粒度对齐定尺寸,转换/释放共用取整范围;slot 数不变且尾部不暴露,默认/动态池改用 helper,私有恢复失败则泄漏。
9/14
swiotlb: Reject misaligned restricted DMA pools for CoCo guests
restricted DMA 池基址和大小不可移动,先用共享范围 helper 校验物理基址与完整区域,再用 cc_make_shared 转换,避免不满足粒度导致 set_memory_decrypted 失败。
10/14
dma-buf: system_heap: Limit scatterlist entries to the buffer size
共享 backing 会按粒度取整,system_heap 构造 scatterlist 时跟踪剩余长度,每项取 compound 页大小与剩余长度较小值,避免把取整尾部暴露给 dma-buf 消费者。
11/14
dma-buf: system_heap: Allocate shared buffers using CoCo shared memory allocator
system_cc_shared 改由 alloc_cc_shared_pages 按共享粒度整段分配转换,候选 order 按字节请求并加 __GFP_COMP;内部长度取整,dma_buf::size 保留原长。
12/14
swiotlb: Make rounded shared pool capacity allocatable
early 和 persistent dynamic SWIOTLB 池已按共享粒度取整并转换,现把取整范围计入 slot 数并同步元数据,利用额外容量;transient dynamic 池仍不重用尾部容量。
13/14
mm: Assert CoCo shared allocations may sleep
alloc_cc_shared_pages_node 会调用可能睡眠的 set_memory_decrypted,加入 might_sleep 断言,确保共享转换只在可睡眠上下文执行,便于捕获原子路径误用。
14/14
irqchip/gic-v3-its: Preallocate VPE L1 tables
把 VPE L1 表从 CPU-starting 原子路径移出:boot CPU 阻塞分配并记 order,次级 CPU 在 hotplug prepare 预分配,按需消费,online 或 bring-up 中止时回收未用页。