OK6410A 开发板 (八) 37 linux-5.11 OK6410A 内存管理第五阶段

vmalloc
vmalloc_init
	for_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_list
	2. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值