Esempio n. 1
0
// find_vma_rb - find a vma  (vma->vm_start <= addr < vma_vm_end) in rb tree
static inline struct vma_struct *find_vma_rb(rb_tree * tree, uintptr_t addr)
{
	rb_node *node = rb_node_root(tree);
	struct vma_struct *vma = NULL, *tmp;
    //kprintf("  find_vma_rb begin:: addr is %d\n",addr);
	while (node != NULL) {
		tmp = rbn2vma(node, rb_link);
        //kprintf("find_vma_rb while:: vma tmp start %d, end %d, addr %d\n",tmp->vm_start, tmp->vm_end, addr);
		if (tmp->vm_end > addr) {
			vma = tmp;
			if (tmp->vm_start <= addr) {
				break;
			}
			vma = NULL;
			node = rb_node_left(tree, node);
		} else {
			vma = NULL;
			node = rb_node_right(tree, node);
		}
	}
#if 0
    if (vma!=NULL) 
      kprintf("  find_vma_rb end:: addr %d, vma %x, start %d, end %d\n",addr, vma, vma->vm_start, vma->vm_end);
    else
      kprintf("  find_vma_rb end:: vma is NULL\n");
#endif
	return vma;
}
Esempio n. 2
0
File: vmm.c Progetto: jefjin/ucore
// find_vma_rb - find a vma  (vma->vm_start <= addr <= vma_vm_end) in rb tree
static inline struct vma_struct *
find_vma_rb(rb_tree *tree, uintptr_t addr) {
    rb_node *node = rb_node_root(tree);
    struct vma_struct *vma = NULL, *tmp;
    while (node != NULL) {
        tmp = rbn2vma(node, rb_link);
        if (tmp->vm_end > addr) {
            vma = tmp;
            if (tmp->vm_start <= addr) {
                break;
            }
            node = rb_node_left(tree, node);
        }
        else {
            node = rb_node_right(tree, node);
        }
    }
    return vma;
}