// 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; }
// 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; }