Lines Matching refs:rbnode

41 	struct regcache_rbtree_node *rbnode,  in regcache_rbtree_get_base_top_reg()  argument
44 *base = rbnode->base_reg; in regcache_rbtree_get_base_top_reg()
45 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride); in regcache_rbtree_get_base_top_reg()
49 struct regcache_rbtree_node *rbnode, unsigned int idx) in regcache_rbtree_get_register() argument
51 return regcache_get_val(map, rbnode->block, idx); in regcache_rbtree_get_register()
55 struct regcache_rbtree_node *rbnode, in regcache_rbtree_set_register() argument
58 set_bit(idx, rbnode->cache_present); in regcache_rbtree_set_register()
59 regcache_set_val(map, rbnode->block, idx, val); in regcache_rbtree_set_register()
67 struct regcache_rbtree_node *rbnode; in regcache_rbtree_lookup() local
70 rbnode = rbtree_ctx->cached_rbnode; in regcache_rbtree_lookup()
71 if (rbnode) { in regcache_rbtree_lookup()
72 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
75 return rbnode; in regcache_rbtree_lookup()
80 rbnode = rb_entry(node, struct regcache_rbtree_node, node); in regcache_rbtree_lookup()
81 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
84 rbtree_ctx->cached_rbnode = rbnode; in regcache_rbtree_lookup()
85 return rbnode; in regcache_rbtree_lookup()
97 struct regcache_rbtree_node *rbnode) in regcache_rbtree_insert() argument
112 base_reg = rbnode->base_reg; in regcache_rbtree_insert()
125 rb_link_node(&rbnode->node, parent, new); in regcache_rbtree_insert()
126 rb_insert_color(&rbnode->node, root); in regcache_rbtree_insert()
245 struct regcache_rbtree_node *rbnode; in regcache_rbtree_read() local
248 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_read()
249 if (rbnode) { in regcache_rbtree_read()
250 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_read()
251 if (!test_bit(reg_tmp, rbnode->cache_present)) in regcache_rbtree_read()
253 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp); in regcache_rbtree_read()
263 struct regcache_rbtree_node *rbnode, in regcache_rbtree_insert_to_block() argument
276 offset = (rbnode->base_reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
278 blk = krealloc_array(rbnode->block, blklen, map->cache_word_size, map->alloc_flags); in regcache_rbtree_insert_to_block()
282 rbnode->block = blk; in regcache_rbtree_insert_to_block()
284 if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) { in regcache_rbtree_insert_to_block()
285 present = krealloc_array(rbnode->cache_present, in regcache_rbtree_insert_to_block()
291 memset(present + BITS_TO_LONGS(rbnode->blklen), 0, in regcache_rbtree_insert_to_block()
292 (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen)) in regcache_rbtree_insert_to_block()
295 present = rbnode->cache_present; in regcache_rbtree_insert_to_block()
301 blk, rbnode->blklen * map->cache_word_size); in regcache_rbtree_insert_to_block()
306 rbnode->blklen = blklen; in regcache_rbtree_insert_to_block()
307 rbnode->base_reg = base_reg; in regcache_rbtree_insert_to_block()
308 rbnode->cache_present = present; in regcache_rbtree_insert_to_block()
310 regcache_rbtree_set_register(map, rbnode, pos, value); in regcache_rbtree_insert_to_block()
317 struct regcache_rbtree_node *rbnode; in regcache_rbtree_node_alloc() local
321 rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags); in regcache_rbtree_node_alloc()
322 if (!rbnode) in regcache_rbtree_node_alloc()
335 rbnode->blklen = (range->range_max - range->range_min) / in regcache_rbtree_node_alloc()
337 rbnode->base_reg = range->range_min; in regcache_rbtree_node_alloc()
341 if (!rbnode->blklen) { in regcache_rbtree_node_alloc()
342 rbnode->blklen = 1; in regcache_rbtree_node_alloc()
343 rbnode->base_reg = reg; in regcache_rbtree_node_alloc()
346 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size, in regcache_rbtree_node_alloc()
348 if (!rbnode->block) in regcache_rbtree_node_alloc()
351 rbnode->cache_present = kcalloc(BITS_TO_LONGS(rbnode->blklen), in regcache_rbtree_node_alloc()
352 sizeof(*rbnode->cache_present), in regcache_rbtree_node_alloc()
354 if (!rbnode->cache_present) in regcache_rbtree_node_alloc()
357 return rbnode; in regcache_rbtree_node_alloc()
360 kfree(rbnode->block); in regcache_rbtree_node_alloc()
362 kfree(rbnode); in regcache_rbtree_node_alloc()
370 struct regcache_rbtree_node *rbnode, *rbnode_tmp; in regcache_rbtree_write() local
380 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_write()
381 if (rbnode) { in regcache_rbtree_write()
382 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_write()
383 regcache_rbtree_set_register(map, rbnode, reg_tmp, value); in regcache_rbtree_write()
416 rbnode = rbnode_tmp; in regcache_rbtree_write()
436 if (rbnode) { in regcache_rbtree_write()
437 ret = regcache_rbtree_insert_to_block(map, rbnode, in regcache_rbtree_write()
443 rbtree_ctx->cached_rbnode = rbnode; in regcache_rbtree_write()
450 rbnode = regcache_rbtree_node_alloc(map, reg); in regcache_rbtree_write()
451 if (!rbnode) in regcache_rbtree_write()
453 regcache_rbtree_set_register(map, rbnode, in regcache_rbtree_write()
454 (reg - rbnode->base_reg) / map->reg_stride, in regcache_rbtree_write()
456 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); in regcache_rbtree_write()
457 rbtree_ctx->cached_rbnode = rbnode; in regcache_rbtree_write()
468 struct regcache_rbtree_node *rbnode; in regcache_rbtree_sync() local
477 rbnode = rb_entry(node, struct regcache_rbtree_node, node); in regcache_rbtree_sync()
479 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_sync()
494 end = rbnode->blklen; in regcache_rbtree_sync()
496 ret = regcache_sync_block(map, rbnode->block, in regcache_rbtree_sync()
497 rbnode->cache_present, in regcache_rbtree_sync()
498 rbnode->base_reg, start, end); in regcache_rbtree_sync()
512 struct regcache_rbtree_node *rbnode; in regcache_rbtree_drop() local
519 rbnode = rb_entry(node, struct regcache_rbtree_node, node); in regcache_rbtree_drop()
521 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_drop()
536 end = rbnode->blklen; in regcache_rbtree_drop()
538 bitmap_clear(rbnode->cache_present, start, end - start); in regcache_rbtree_drop()