*参照元 [#sb1b9402] #backlinks *説明 [#nafba36f] -パス: [[linux-2.6.33/mm/vmalloc.c]] -FIXME: これは何? --説明 **引数 [#j1847322] -struct vmap_area *va -- --[[linux-2.6.33/vmap_area]] **返り値 [#yc2aea14] -なし **参考 [#d206c5b1] *実装 [#ra8032cb] static void __insert_vmap_area(struct vmap_area *va) { struct rb_node **p = &vmap_area_root.rb_node; struct rb_node *parent = NULL; struct rb_node *tmp; - --[[linux-2.6.33/rb_node]] - --[[linux-2.6.33/vmap_area_root(global)]] while (*p) { struct vmap_area *tmp; parent = *p; tmp = rb_entry(parent, struct vmap_area, rb_node); - --[[linux-2.6.33/rb_entry()]] if (va->va_start < tmp->va_end) p = &(*p)->rb_left; else if (va->va_end > tmp->va_start) p = &(*p)->rb_right; else BUG(); - --[[linux-2.6.33/BUG()]] } rb_link_node(&va->rb_node, parent, p); rb_insert_color(&va->rb_node, &vmap_area_root); - --[[linux-2.6.33/rb_link_node()]] - --[[linux-2.6.33/rb_insert_color()]] /* address-sort this list so it is usable like the vmlist */ tmp = rb_prev(&va->rb_node); - --[[linux-2.6.33/rb_prev()]] if (tmp) { struct vmap_area *prev; prev = rb_entry(tmp, struct vmap_area, rb_node); list_add_rcu(&va->list, &prev->list); - --[[linux-2.6.33/list_add_rcu()]] } else list_add_rcu(&va->list, &vmap_area_list); } *コメント [#hb751266]