vmalloc
vmalloc_init
for_each_possible_cpu(i) {
struct vfree_deferred *p;
...
struct vmap_block_queue *vbq;
...
}
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