262 struct vmap_area *va;
263
264 va = rb_entry(n, struct vmap_area, rb_node);
265 if (addr < va->va_start)
266 n = n->rb_left;
267 else if (addr > va->va_start)
268 n = n->rb_right;
269 else
270 return va;
271 }
272
273 return NULL;
274}
275
276static void __insert_vmap_area(struct vmap_area *va)
277{
278 struct rb_node **p = &vmap_area_root.rb_node;
279 struct rb_node *parent = NULL;
280 struct rb_node *tmp;
281
282 while (*p) {
283 struct vmap_area *tmp;
284
285 parent = *p;
286 tmp = rb_entry(parent, struct vmap_area, rb_node);
287 if (va->va_start < tmp->va_end)
288 p = &(*p)->rb_left;
289 else if (va->va_end > tmp->va_start)
290 p = &(*p)->rb_right;
291 else
292 BUG();
293 }
294
295 rb_link_node(&va->rb_node, parent, p);
296 rb_insert_color(&va->rb_node, &vmap_area_root);
297
298
299 tmp = rb_prev(&va->rb_node);
300 if (tmp) {
301 struct vmap_area *prev;
302 prev = rb_entry(tmp, struct vmap_area, rb_node);