本节介绍 drm_mm 的设计思想、数据结构和 API 接口。关于内部实现的源码逐行分析(哨兵节点、hole 分裂/合并、对齐算法、驱逐扫描状态机、调试子系统),请见下一篇3.3.1 drm_mm 实现分析。
1. 概述与作用
1.1 基本定位
drm_mm是 Linux DRM子系统提供的通用范围分配器(Range Allocator),用于管理连续的地址空间。它是一个轻量级的内存管理基础设施,被广泛用于 GPU 驱动中管理各种地址空间资源。
例如,drm_mm是 GEM 子系统中两个关键基础设施的底层引擎:
- 3.4 节的
drm_vma_offset_manager用它管理 mmap 偏移空间; - TTM 的
ttm_range_mgr用它管理 GTT 地址空间。
理解 drm_mm 的分配/释放/hole 管理逻辑,是后续读懂"用户态 mmap 如何找到内核对象"和"GTT 地址如何分配"的前提。
核心特点(源自drivers/gpu/drm/drm_mm.c):
“Generic simple memory manager implementation. Intended to be used