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(rbnode->block, in regcache_rbtree_insert_to_block()
284 rbnode->block = blk; in regcache_rbtree_insert_to_block()
286 if (BITS_TO_LONGS(blklen) > BITS_TO_LONGS(rbnode->blklen)) { in regcache_rbtree_insert_to_block()
287 present = krealloc(rbnode->cache_present, in regcache_rbtree_insert_to_block()
293 memset(present + BITS_TO_LONGS(rbnode->blklen), 0, in regcache_rbtree_insert_to_block()
294 (BITS_TO_LONGS(blklen) - BITS_TO_LONGS(rbnode->blklen)) in regcache_rbtree_insert_to_block()
297 present = rbnode->cache_present; in regcache_rbtree_insert_to_block()
303 blk, rbnode->blklen * map->cache_word_size); in regcache_rbtree_insert_to_block()
308 rbnode->blklen = blklen; in regcache_rbtree_insert_to_block()
309 rbnode->base_reg = base_reg; in regcache_rbtree_insert_to_block()
310 rbnode->cache_present = present; in regcache_rbtree_insert_to_block()
312 regcache_rbtree_set_register(map, rbnode, pos, value); in regcache_rbtree_insert_to_block()
319 struct regcache_rbtree_node *rbnode; in regcache_rbtree_node_alloc() local
323 rbnode = kzalloc(sizeof(*rbnode), GFP_KERNEL); in regcache_rbtree_node_alloc()
324 if (!rbnode) in regcache_rbtree_node_alloc()
337 rbnode->blklen = (range->range_max - range->range_min) / in regcache_rbtree_node_alloc()
339 rbnode->base_reg = range->range_min; in regcache_rbtree_node_alloc()
343 if (!rbnode->blklen) { in regcache_rbtree_node_alloc()
344 rbnode->blklen = 1; in regcache_rbtree_node_alloc()
345 rbnode->base_reg = reg; in regcache_rbtree_node_alloc()
348 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size, in regcache_rbtree_node_alloc()
350 if (!rbnode->block) in regcache_rbtree_node_alloc()
353 rbnode->cache_present = kcalloc(BITS_TO_LONGS(rbnode->blklen), in regcache_rbtree_node_alloc()
354 sizeof(*rbnode->cache_present), in regcache_rbtree_node_alloc()
356 if (!rbnode->cache_present) in regcache_rbtree_node_alloc()
359 return rbnode; in regcache_rbtree_node_alloc()
362 kfree(rbnode->block); in regcache_rbtree_node_alloc()
364 kfree(rbnode); in regcache_rbtree_node_alloc()
372 struct regcache_rbtree_node *rbnode, *rbnode_tmp; in regcache_rbtree_write() local
382 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_write()
383 if (rbnode) { in regcache_rbtree_write()
384 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_write()
385 regcache_rbtree_set_register(map, rbnode, reg_tmp, value); in regcache_rbtree_write()
418 rbnode = rbnode_tmp; in regcache_rbtree_write()
438 if (rbnode) { in regcache_rbtree_write()
439 ret = regcache_rbtree_insert_to_block(map, rbnode, in regcache_rbtree_write()
445 rbtree_ctx->cached_rbnode = rbnode; in regcache_rbtree_write()
452 rbnode = regcache_rbtree_node_alloc(map, reg); in regcache_rbtree_write()
453 if (!rbnode) in regcache_rbtree_write()
455 regcache_rbtree_set_register(map, rbnode, in regcache_rbtree_write()
456 reg - rbnode->base_reg, value); in regcache_rbtree_write()
457 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); in regcache_rbtree_write()
458 rbtree_ctx->cached_rbnode = rbnode; in regcache_rbtree_write()
469 struct regcache_rbtree_node *rbnode; in regcache_rbtree_sync() local
476 rbnode = rb_entry(node, struct regcache_rbtree_node, node); in regcache_rbtree_sync()
478 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_sync()
493 end = rbnode->blklen; in regcache_rbtree_sync()
495 ret = regcache_sync_block(map, rbnode->block, in regcache_rbtree_sync()
496 rbnode->cache_present, in regcache_rbtree_sync()
497 rbnode->base_reg, start, end); in regcache_rbtree_sync()
509 struct regcache_rbtree_node *rbnode; in regcache_rbtree_drop() local
516 rbnode = rb_entry(node, struct regcache_rbtree_node, node); in regcache_rbtree_drop()
518 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_drop()
533 end = rbnode->blklen; in regcache_rbtree_drop()
535 bitmap_clear(rbnode->cache_present, start, end - start); in regcache_rbtree_drop()