第十章 GPU 虚拟地址空间管理:10.4 VA 空间变更:split / merge 与操作序列 绑定请求以区间描述,VM 中已有映射的边界却不一定与请求对齐:新映射可能覆盖若干段已有映射,也可能只覆盖其中一部分;解除映射的区间同样可能落在某段映射的中间。drm_gpuvm 把一次映射或解除映射请求,相对于当前区间树计算为一个有序的操作序列。驱动按序列更新页表与自身的映射对象,同时更新框架记录的地址空间视图。本篇说明操作的类型、映射与解除映射请求的拆分规则、序列的两种交付形式,以及驱动执行序列时需要遵守的约束。1. 操作类型1.1 操作序列的作用Vulkan 的稀疏绑定允许用户态在任意时刻把任意区间绑定到任意 BO 的任意偏移,或者解除任意区间的绑定,各驱动的 VM_BIND 接口都需要支持这种语义。内核收到请求后,要先确定哪些已有映射需要整段移除、哪些需要截断后保留,再建立新映射。这一计算只依赖区间树中的地址与 BO 偏移,与硬件无关,因此由框架统一完成;驱动只负责执行计算结果,即更新页表、分配和释放自身的映射结构。1.2 五种操作操作以struct drm_gpuva_op表示,其op字段区分类型,各类型的参数放在联合体中,如表 10.4.1 所示。表 10.4.1 操作类型类型参数含义DRM_GPUVA_OP_MAP