Lines Matching defs:rbnode

41 	struct regcache_rbtree_node *rbnode,
44 *base = rbnode->base_reg;
45 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride);
49 struct regcache_rbtree_node *rbnode, unsigned int idx)
51 return regcache_get_val(map, rbnode->block, idx);
55 struct regcache_rbtree_node *rbnode,
58 set_bit(idx, rbnode->cache_present);
59 regcache_set_val(map, rbnode->block, idx, val);
67 struct regcache_rbtree_node *rbnode;
70 rbnode = rbtree_ctx->cached_rbnode;
71 if (rbnode) {
72 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
75 return rbnode;
80 rbnode = rb_entry(node, struct regcache_rbtree_node, node);
81 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
84 rbtree_ctx->cached_rbnode = rbnode;
85 return rbnode;
97 struct regcache_rbtree_node *rbnode)
108 /* base and top registers of the current rbnode */
111 /* base register of the rbnode to be added */
112 base_reg = rbnode->base_reg;
125 rb_link_node(&rbnode->node, parent, new);
126 rb_insert_color(&rbnode->node, root);
245 struct regcache_rbtree_node *rbnode;
248 rbnode = regcache_rbtree_lookup(map, reg);
249 if (rbnode) {
250 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride;
251 if (!test_bit(reg_tmp, rbnode->cache_present))
253 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp);
263 struct regcache_rbtree_node *rbnode,
276 offset = (rbnode->base_reg - base_reg) / map->reg_stride;
278 blk = krealloc(rbnode->block,
284 rbnode->block = blk;
286 if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) {
287 present = krealloc(rbnode->cache_present,
293 memset(present + BITS_TO_LONGS(rbnode->blklen), 0,
294 (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen))
297 present = rbnode->cache_present;
300 /* insert the register value in the correct place in the rbnode block */
303 blk, rbnode->blklen * map->cache_word_size);
307 /* update the rbnode block, its size and the base register */
308 rbnode->blklen = blklen;
309 rbnode->base_reg = base_reg;
310 rbnode->cache_present = present;
312 regcache_rbtree_set_register(map, rbnode, pos, value);
319 struct regcache_rbtree_node *rbnode;
323 rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags);
324 if (!rbnode)
337 rbnode->blklen = (range->range_max - range->range_min) /
339 rbnode->base_reg = range->range_min;
343 if (!rbnode->blklen) {
344 rbnode->blklen = 1;
345 rbnode->base_reg = reg;
348 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size,
350 if (!rbnode->block)
353 rbnode->cache_present = kcalloc(BITS_TO_LONGS(rbnode->blklen),
354 sizeof(*rbnode->cache_present),
356 if (!rbnode->cache_present)
359 return rbnode;
362 kfree(rbnode->block);
364 kfree(rbnode);
372 struct regcache_rbtree_node *rbnode, *rbnode_tmp;
379 /* if we can't locate it in the cached rbnode we'll have
382 rbnode = regcache_rbtree_lookup(map, reg);
383 if (rbnode) {
384 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride;
385 regcache_rbtree_set_register(map, rbnode, reg_tmp, value);
418 rbnode = rbnode_tmp;
438 if (rbnode) {
439 ret = regcache_rbtree_insert_to_block(map, rbnode,
445 rbtree_ctx->cached_rbnode = rbnode;
450 * an existing block so create a new rbnode.
452 rbnode = regcache_rbtree_node_alloc(map, reg);
453 if (!rbnode)
455 regcache_rbtree_set_register(map, rbnode,
456 (reg - rbnode->base_reg) / map->reg_stride,
458 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode);
459 rbtree_ctx->cached_rbnode = rbnode;
470 struct regcache_rbtree_node *rbnode;
479 rbnode = rb_entry(node, struct regcache_rbtree_node, node);
481 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
496 end = rbnode->blklen;
498 ret = regcache_sync_block(map, rbnode->block,
499 rbnode->cache_present,
500 rbnode->base_reg, start, end);
514 struct regcache_rbtree_node *rbnode;
521 rbnode = rb_entry(node, struct regcache_rbtree_node, node);
523 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
538 end = rbnode->blklen;
540 bitmap_clear(rbnode->cache_present, start, end - start);