本文整理汇总了C++中rb_link_node函数的典型用法代码示例。如果您正苦于以下问题:C++ rb_link_node函数的具体用法?C++ rb_link_node怎么用?C++ rb_link_node使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rb_link_node函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ion_handle_add
static void ion_handle_add(struct ion_client *client, struct ion_handle *handle)
{
struct rb_node **p = &client->handles.rb_node;
struct rb_node *parent = NULL;
struct ion_handle *entry;
while (*p) {
parent = *p;
entry = rb_entry(parent, struct ion_handle, node);
if (handle < entry)
p = &(*p)->rb_left;
else if (handle > entry)
p = &(*p)->rb_right;
else
WARN(1, "%s: buffer already found.", __func__);
}
rb_link_node(&handle->node, parent, p);
rb_insert_color(&handle->node, &client->handles);
}
开发者ID:deeiko,项目名称:lge-kernel-msm7x27-ics-3.0.8,代码行数:21,代码来源:ion.c
示例2: rb_insert_callchain
static void
rb_insert_callchain(struct rb_root *root, struct callchain_node *chain,
enum chain_mode mode)
{
struct rb_node **p = &root->rb_node;
struct rb_node *parent = NULL;
struct callchain_node *rnode;
u64 chain_cumul = callchain_cumul_hits(chain);
while (*p) {
u64 rnode_cumul;
parent = *p;
rnode = rb_entry(parent, struct callchain_node, rb_node);
rnode_cumul = callchain_cumul_hits(rnode);
switch (mode) {
case CHAIN_FLAT:
case CHAIN_FOLDED:
if (rnode->hit < chain->hit)
p = &(*p)->rb_left;
else
p = &(*p)->rb_right;
break;
case CHAIN_GRAPH_ABS: /* Falldown */
case CHAIN_GRAPH_REL:
if (rnode_cumul < chain_cumul)
p = &(*p)->rb_left;
else
p = &(*p)->rb_right;
break;
case CHAIN_NONE:
default:
break;
}
}
rb_link_node(&chain->rb_node, parent, p);
rb_insert_color(&chain->rb_node, root);
}
开发者ID:koll1009,项目名称:linux,代码行数:40,代码来源:callchain.c
示例3: while
/*
* find/create a frag in the tree
*/
static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci,
u32 f)
{
struct rb_node **p;
struct rb_node *parent = NULL;
struct ceph_inode_frag *frag;
int c;
p = &ci->i_fragtree.rb_node;
while (*p) {
parent = *p;
frag = rb_entry(parent, struct ceph_inode_frag, node);
c = ceph_frag_compare(f, frag->frag);
if (c < 0)
p = &(*p)->rb_left;
else if (c > 0)
p = &(*p)->rb_right;
else
return frag;
}
frag = kmalloc(sizeof(*frag), GFP_NOFS);
if (!frag) {
pr_err("__get_or_create_frag ENOMEM on %p %llx.%llx "
"frag %x\n", &ci->vfs_inode,
ceph_vinop(&ci->vfs_inode), f);
return ERR_PTR(-ENOMEM);
}
frag->frag = f;
frag->split_by = 0;
frag->mds = -1;
frag->ndist = 0;
rb_link_node(&frag->node, parent, p);
rb_insert_color(&frag->node, &ci->i_fragtree);
dout("get_or_create_frag added %llx.%llx frag %x\n",
ceph_vinop(&ci->vfs_inode), f);
return frag;
}
开发者ID:nos1609,项目名称:Chrono_Kernel-1,代码行数:43,代码来源:inode.c
示例4: _drm_vma_offset_add_rb
/* internal helper to link @node into the rb-tree */
static void _drm_vma_offset_add_rb(struct drm_vma_offset_manager *mgr,
struct drm_vma_offset_node *node)
{
struct rb_node **iter = &mgr->vm_addr_space_rb.rb_node;
struct rb_node *parent = NULL;
struct drm_vma_offset_node *iter_node;
while (likely(*iter)) {
parent = *iter;
iter_node = rb_entry(*iter, struct drm_vma_offset_node, vm_rb);
if (node->vm_node.start < iter_node->vm_node.start)
iter = &(*iter)->rb_left;
else if (node->vm_node.start > iter_node->vm_node.start)
iter = &(*iter)->rb_right;
else
BUG();
}
rb_link_node(&node->vm_rb, parent, iter);
rb_insert_color(&node->vm_rb, &mgr->vm_addr_space_rb);
}
开发者ID:wan721,项目名称:DragonFlyBSD,代码行数:23,代码来源:drm_vma_manager.c
示例5: zswap_rb_insert
/*
* In the case that a entry with the same offset is found, a pointer to
* the existing entry is stored in dupentry and the function returns -EEXIST
*/
static int zswap_rb_insert(struct rb_root *root, struct zswap_entry *entry,
struct zswap_entry **dupentry)
{
struct rb_node **link = &root->rb_node, *parent = NULL;
struct zswap_entry *myentry;
while (*link) {
parent = *link;
myentry = rb_entry(parent, struct zswap_entry, rbnode);
if (myentry->offset > entry->offset)
link = &(*link)->rb_left;
else if (myentry->offset < entry->offset)
link = &(*link)->rb_right;
else {
*dupentry = myentry;
return -EEXIST;
}
}
rb_link_node(&entry->rbnode, parent, link);
rb_insert_color(&entry->rbnode, root);
return 0;
}
开发者ID:barryjabshire,项目名称:SimplKernel-LL-G925F,代码行数:26,代码来源:zswap.c
示例6: jffs2_add_tn_to_tree
/*
* Put a new tmp_dnode_info into the temporaty RB-tree, keeping the list in
* order of increasing version.
*/
static void jffs2_add_tn_to_tree(struct jffs2_tmp_dnode_info *tn, struct rb_root *list)
{
struct rb_node **p = &list->rb_node;
struct rb_node * parent = NULL;
struct jffs2_tmp_dnode_info *this;
while (*p) {
parent = *p;
this = rb_entry(parent, struct jffs2_tmp_dnode_info, rb);
/* There may actually be a collision here, but it doesn't
actually matter. As long as the two nodes with the same
version are together, it's all fine. */
if (tn->version > this->version)
p = &(*p)->rb_left;
else
p = &(*p)->rb_right;
}
rb_link_node(&tn->rb, parent, p);
rb_insert_color(&tn->rb, list);
}
开发者ID:me-oss,项目名称:me-linux,代码行数:26,代码来源:readinode.c
示例7: __rb_insert
static rb_node_t * __rb_insert(rb_node_t ** root,
rb_node_t * node)
{
rb_node_t ** p = root;
rb_node_t * parent = NULL;
while (*p)
{
parent = *p;
if (node->key < parent->key)
p = &(*p)->rb_left;
else if (node->key > parent->key)
p = &(*p)->rb_right;
else
return parent;
}
rb_link_node(node, parent, p);
return NULL;
}
开发者ID:brills,项目名称:pfpa,代码行数:22,代码来源:rbtree.c
示例8: aeInsertTimeEvent
static void aeInsertTimeEvent(struct rb_root *root, struct aeTimeEvent *data)
{
struct rb_node **new_node = &(root->rb_node), *parent = NULL;
/* Figure out where to put new node */
while (*new_node) {
struct aeTimeEvent *this_node = container_of(*new_node, struct aeTimeEvent, rb_node);
parent = *new_node;
if (data->when_sec < this_node->when_sec
|| (data->when_sec == this_node->when_sec
&& data->when_ms < this_node->when_ms))
new_node = &((*new_node)->rb_left);
else
new_node = &((*new_node)->rb_right);
}
/* Add new node and rebalance tree. */
rb_link_node(&data->rb_node, parent, new_node);
rb_insert_color(&data->rb_node, root);
}
开发者ID:pandyxu,项目名称:enhanced-redis-event-lib,代码行数:22,代码来源:ae.c
示例9: _mali_vma_offset_add_rb
/**
*internal helper to link node into the rb-tree
*/
static inline void _mali_vma_offset_add_rb(struct mali_allocation_manager *mgr,
struct mali_vma_node *node)
{
struct rb_node **iter = &mgr->allocation_mgr_rb.rb_node;
struct rb_node *parent = NULL;
struct mali_vma_node *iter_node;
while (likely(*iter)) {
parent = *iter;
iter_node = rb_entry(*iter, struct mali_vma_node, vm_rb);
if (node->vm_node.start < iter_node->vm_node.start)
iter = &(*iter)->rb_left;
else if (node->vm_node.start > iter_node->vm_node.start)
iter = &(*iter)->rb_right;
else
MALI_DEBUG_ASSERT(0);
}
rb_link_node(&node->vm_rb, parent, iter);
rb_insert_color(&node->vm_rb, &mgr->allocation_mgr_rb);
}
开发者ID:AOSC-Dev,项目名称:aosc-os-armel-sunxi-boot,代码行数:25,代码来源:mali_memory_virtual.c
示例10: insert_data
//---------------------------------------------------------------------
SAWON* insert_data(struct rb_root *root, int sid, struct rb_node *node)
{
struct rb_node **p = &root->rb_node;
struct rb_node * parent = NULL;
SAWON *s;
while(*p)
{
parent = *p;
s = rb_entry(parent, SAWON, tree);
if(sid < s->sid)
p = &(*p)->rb_left;
else if(sid > s->sid)
p = &(*p)->rb_right;
else
return s;
}
rb_link_node(node, parent, p);
rb_insert_color(node, root);
return NULL;
}
开发者ID:rumidier,项目名称:Bit,代码行数:23,代码来源:rb_wootree.c
示例11: insert_alloc_stat
static void insert_alloc_stat(unsigned long call_site, unsigned long ptr,
int bytes_req, int bytes_alloc, int cpu)
{
struct rb_node **node = &root_alloc_stat.rb_node;
struct rb_node *parent = NULL;
struct alloc_stat *data = NULL;
while (*node) {
parent = *node;
data = rb_entry(*node, struct alloc_stat, node);
if (ptr > data->ptr)
node = &(*node)->rb_right;
else if (ptr < data->ptr)
node = &(*node)->rb_left;
else
break;
}
if (data && data->ptr == ptr) {
data->hit++;
data->bytes_req += bytes_req;
data->bytes_alloc += bytes_alloc;
} else {
data = malloc(sizeof(*data));
if (!data)
die("malloc");
data->ptr = ptr;
data->pingpong = 0;
data->hit = 1;
data->bytes_req = bytes_req;
data->bytes_alloc = bytes_alloc;
rb_link_node(&data->node, parent, node);
rb_insert_color(&data->node, &root_alloc_stat);
}
data->call_site = call_site;
data->alloc_cpu = cpu;
}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:39,代码来源:builtin-kmem.c
示例12: add_rbtree_timer
int add_rbtree_timer(struct rte_timer *tim, uint32_t expire)
{
uint32_t thread_idx = rte_get_thread_id();
struct rbtree_timer_base *base=global_rbt_base + thread_idx;
struct rb_node **link = &base->active.rb_node;
struct rb_node *parent=NULL;
struct rte_timer *entry=NULL;
int leftmost=1;
if(!(tim->flags & RTE_TIMER_INITED)){
return -1;
}
if(tim->flags & RTE_TIMER_ADDED){
return -1;
}
tim->expire = rte_get_cur_time() + expire;
// tim->expire = expire;
while(*link){
parent = *link;
entry = rb_entry(parent, struct rte_timer, node);
if(tim->expire<entry->expire){
link = &(*link)->rb_left;
}else{
link = &(*link)->rb_right;
leftmost=0;
}
}
if(leftmost){
base->first = &tim->node;
}
rb_link_node(&tim->node, parent, link);
rb_insert_color(&tim->node, &base->active);
tim->flags |= RTE_TIMER_ADDED;
return 0;
}
开发者ID:chenfangxin,项目名称:modern-linux-platform,代码行数:38,代码来源:rbtree_timer.c
示例13: while
struct thread *machine__findnew_thread(struct machine *self, pid_t pid)
{
struct rb_node **p = &self->threads.rb_node;
struct rb_node *parent = NULL;
struct thread *th;
/*
* Font-end cache - PID lookups come in blocks,
* so most of the time we dont have to look up
* the full rbtree:
*/
if (self->last_match && self->last_match->pid == pid)
return self->last_match;
while (*p != NULL) {
parent = *p;
th = rb_entry(parent, struct thread, rb_node);
if (th->pid == pid) {
self->last_match = th;
return th;
}
if (pid < th->pid)
p = &(*p)->rb_left;
else
p = &(*p)->rb_right;
}
th = thread__new(pid);
if (th != NULL) {
rb_link_node(&th->rb_node, parent, p);
rb_insert_color(&th->rb_node, &self->threads);
self->last_match = th;
}
return th;
}
开发者ID:33d,项目名称:linux-2.6.21-hh20,代码行数:38,代码来源:thread.c
示例14: id_rb_insert
static void
id_rb_insert(struct rb_root *root, struct cifs_sid *sidptr,
struct cifs_sid_id **psidid, char *typestr)
{
int rc;
char *strptr;
struct rb_node *node = root->rb_node;
struct rb_node *parent = NULL;
struct rb_node **linkto = &(root->rb_node);
struct cifs_sid_id *lsidid;
while (node) {
lsidid = rb_entry(node, struct cifs_sid_id, rbnode);
parent = node;
rc = compare_sids(sidptr, &((lsidid)->sid));
if (rc > 0) {
linkto = &(node->rb_left);
node = node->rb_left;
} else if (rc < 0) {
linkto = &(node->rb_right);
node = node->rb_right;
}
}
memcpy(&(*psidid)->sid, sidptr, sizeof(struct cifs_sid));
(*psidid)->time = jiffies - (SID_MAP_RETRY + 1);
(*psidid)->refcount = 0;
sprintf((*psidid)->sidstr, "%s", typestr);
strptr = (*psidid)->sidstr + strlen((*psidid)->sidstr);
sid_to_str(&(*psidid)->sid, strptr);
clear_bit(SID_ID_PENDING, &(*psidid)->state);
clear_bit(SID_ID_MAPPED, &(*psidid)->state);
rb_link_node(&(*psidid)->rbnode, parent, linkto);
rb_insert_color(&(*psidid)->rbnode, root);
}
开发者ID:MiniBlu,项目名称:cm11_kernel_htc_msm8974a3ul,代码行数:38,代码来源:cifsacl.c
示例15: ubifs_add_bud
/**
* ubifs_add_bud - add bud LEB to the tree of buds and its journal head list.
* @c: UBIFS file-system description object
* @bud: the bud to add
*/
void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud)
{
struct rb_node **p, *parent = NULL;
struct ubifs_bud *b;
struct ubifs_jhead *jhead;
spin_lock(&c->buds_lock);
p = &c->buds.rb_node;
while (*p) {
parent = *p;
b = rb_entry(parent, struct ubifs_bud, rb);
ubifs_assert(bud->lnum != b->lnum);
if (bud->lnum < b->lnum)
p = &(*p)->rb_left;
else
p = &(*p)->rb_right;
}
rb_link_node(&bud->rb, parent, p);
rb_insert_color(&bud->rb, &c->buds);
if (c->jheads) {
jhead = &c->jheads[bud->jhead];
list_add_tail(&bud->list, &jhead->buds_list);
} else
ubifs_assert(c->replaying && c->ro_mount);
/*
* Note, although this is a new bud, we anyway account this space now,
* before any data has been written to it, because this is about to
* guarantee fixed mount time, and this bud will anyway be read and
* scanned.
*/
c->bud_bytes += c->leb_size - bud->start;
dbg_log("LEB %d:%d, jhead %s, bud_bytes %lld", bud->lnum,
bud->start, dbg_jhead(bud->jhead), c->bud_bytes);
spin_unlock(&c->buds_lock);
}
开发者ID:4Fwolf,项目名称:motorola-hawk-kernel-3.4.67,代码行数:43,代码来源:log.c
示例16: my_insert
int my_insert(struct rb_root *root, struct mynode *data)
{
struct rb_node **new1 = &(root->rb_node), *parent = NULL;
/* Figure out where to put new node */
while (*new1) {
struct mynode *this1 = container_of(*new1, struct mynode, node);
int result = strcmp(data->string, this1->string);
parent = *new1;
if (result < 0)
new1 = &((*new1)->rb_left);
else
new1 = &((*new1)->rb_right);
}
/* Add new node and rebalance tree. */
rb_link_node(&data->node, parent, new1);
rb_insert_color(&data->node, root);
return 1;
}
开发者ID:fremaks,项目名称:fremaks_utils,代码行数:23,代码来源:fms_mem_tree.c
示例17: ion_debug_mem_map_add
static void ion_debug_mem_map_add(struct rb_root *mem_map,
struct mem_map_data *data)
{
struct rb_node **p = &mem_map->rb_node;
struct rb_node *parent = NULL;
struct mem_map_data *entry;
while (*p) {
parent = *p;
entry = rb_entry(parent, struct mem_map_data, node);
if (data->addr < entry->addr) {
p = &(*p)->rb_left;
} else if (data->addr > entry->addr) {
p = &(*p)->rb_right;
} else {
pr_err("%s: mem_map_data already found.", __func__);
BUG();
}
}
rb_link_node(&data->node, parent, p);
rb_insert_color(&data->node, mem_map);
}
开发者ID:fulmix,项目名称:fulmix.Kernel,代码行数:23,代码来源:ion.c
示例18: while
/* returns NULL if the insertion worked, or it returns the node it did find
* in the tree
*/
static struct rb_node *tree_insert(struct rb_root *root, u64 file_offset,
struct rb_node *node)
{
struct rb_node **p = &root->rb_node;
struct rb_node *parent = NULL;
struct btrfs_ordered_extent *entry;
while (*p) {
parent = *p;
entry = rb_entry(parent, struct btrfs_ordered_extent, rb_node);
if (file_offset < entry->file_offset)
p = &(*p)->rb_left;
else if (file_offset >= entry_end(entry))
p = &(*p)->rb_right;
else
return parent;
}
rb_link_node(node, parent, p);
rb_insert_color(node, root);
return NULL;
}
开发者ID:Felixneu,项目名称:10G-TCPCubic-Variation,代码行数:26,代码来源:ordered-data.c
示例19: bfq_insert
/**
* bfq_insert - generic tree insertion.
* @root: tree root.
* @entity: entity to insert.
*
* This is used for the idle and the active tree, since they are both
* ordered by finish time.
*/
static void bfq_insert(struct rb_root *root, struct bfq_entity *entity)
{
struct bfq_entity *entry;
struct rb_node **node = &root->rb_node;
struct rb_node *parent = NULL;
BUG_ON(entity->tree != NULL);
while (*node != NULL) {
parent = *node;
entry = rb_entry(parent, struct bfq_entity, rb_node);
if (bfq_gt(entry->finish, entity->finish))
node = &parent->rb_left;
else
node = &parent->rb_right;
}
rb_link_node(&entity->rb_node, parent, node);
rb_insert_color(&entity->rb_node, root);
entity->tree = root;
}
开发者ID:Jeongduckho,项目名称:E250_KITKAT,代码行数:31,代码来源:bfq-sched.c
示例20: fq_flow_set_throttled
static void fq_flow_set_throttled(struct fq_sched_data *q, struct fq_flow *f)
{
struct rb_node **p = &q->delayed.rb_node, *parent = NULL;
while (*p) {
struct fq_flow *aux;
parent = *p;
aux = container_of(parent, struct fq_flow, rate_node);
if (f->time_next_packet >= aux->time_next_packet)
p = &parent->rb_right;
else
p = &parent->rb_left;
}
rb_link_node(&f->rate_node, parent, p);
rb_insert_color(&f->rate_node, &q->delayed);
q->throttled_flows++;
q->stat_throttled++;
f->next = &throttled;
if (q->time_next_delayed_flow > f->time_next_packet)
q->time_next_delayed_flow = f->time_next_packet;
}
开发者ID:AK101111,项目名称:linux,代码行数:23,代码来源:sch_fq.c
注:本文中的rb_link_node函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论