本文主要是介绍OK6410A 开发板 (八) 37 linux-5.11 OK6410A 内存管理第五阶段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
vmalloc
vmalloc_initfor_each_possible_cpu(i) {// vfree_deferred 类型变量的 链表 和 工作任务 free_work// free_work用于vfree执行时延迟异步释放vmalloc内存struct vfree_deferred *p;...// vmap_block_queue 类型变量的链表和锁// vmap_block_queue 是 非连续内存块队列管理结构struct vmap_block_queue *vbq;...}// 将vmalloc_init之前的过程中分配的vmalloc区域插入红黑树vmap_area_root中// 将挂接在vmlist链表的各项__insert_vmap_area()输入到非连续内存块的管理中// vmlist的初始化是通过iotable_init初始化(arm32)// 最终所有的vmalloc的eara都会挂到vmap_area_list链表中for (tmp = vmlist; tmp; tmp = tmp->next) {struct vmap_area *va = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);va->vm = tmp;...insert_vmap_area(va, &vmap_area_root, &vmap_area_list);}vmap_init_free_space();vmap_initialized = true;
vmap_area 结构体 中 有两个成员1. list , 用来挂 在 vmap_area_list2. rb_node , 用来挂 在 vmap_area_root其他成员
va_start vmalloc区的虚拟区间起始地址
va_end vmalloc区的虚拟区间结束地址
flags 类型标识
rb_node 插入红黑树vmap_area_root的节点
list 用于加入链表vmap_area_list的节点
purge_list 用于加入到全局链表vmap_purge_list中
vm 指向对应的vm_struct
这篇关于OK6410A 开发板 (八) 37 linux-5.11 OK6410A 内存管理第五阶段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!