Lines Matching full:attr
25 ram_block_attributes_get_block_size(const RamBlockAttributes *attr) in ram_block_attributes_get_block_size() argument
32 g_assert(attr && attr->ram_block); in ram_block_attributes_get_block_size()
33 g_assert(attr->ram_block->page_size == qemu_real_host_page_size()); in ram_block_attributes_get_block_size()
34 return attr->ram_block->page_size; in ram_block_attributes_get_block_size()
42 const RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_is_populated() local
43 const size_t block_size = ram_block_attributes_get_block_size(attr); in ram_block_attributes_rdm_is_populated()
49 first_discarded_bit = find_next_zero_bit(attr->bitmap, last_bit + 1, in ram_block_attributes_rdm_is_populated()
77 ram_block_attributes_for_each_populated_section(const RamBlockAttributes *attr, in ram_block_attributes_for_each_populated_section() argument
84 const size_t block_size = ram_block_attributes_get_block_size(attr); in ram_block_attributes_for_each_populated_section()
88 first_bit = find_next_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_for_each_populated_section()
91 while (first_bit < attr->bitmap_size) { in ram_block_attributes_for_each_populated_section()
95 last_bit = find_next_zero_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_for_each_populated_section()
110 first_bit = find_next_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_for_each_populated_section()
118 ram_block_attributes_for_each_discarded_section(const RamBlockAttributes *attr, in ram_block_attributes_for_each_discarded_section() argument
125 const size_t block_size = ram_block_attributes_get_block_size(attr); in ram_block_attributes_for_each_discarded_section()
129 first_bit = find_next_zero_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_for_each_discarded_section()
132 while (first_bit < attr->bitmap_size) { in ram_block_attributes_for_each_discarded_section()
136 last_bit = find_next_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_for_each_discarded_section()
151 first_bit = find_next_zero_bit(attr->bitmap, in ram_block_attributes_for_each_discarded_section()
152 attr->bitmap_size, in ram_block_attributes_for_each_discarded_section()
163 const RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_get_min_granularity() local
165 g_assert(mr == attr->ram_block->mr); in ram_block_attributes_rdm_get_min_granularity()
166 return ram_block_attributes_get_block_size(attr); in ram_block_attributes_rdm_get_min_granularity()
174 RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_register_listener() local
177 g_assert(section->mr == attr->ram_block->mr); in ram_block_attributes_rdm_register_listener()
180 QLIST_INSERT_HEAD(&attr->rdl_list, rdl, next); in ram_block_attributes_rdm_register_listener()
182 ret = ram_block_attributes_for_each_populated_section(attr, section, rdl, in ram_block_attributes_rdm_register_listener()
195 RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_unregister_listener() local
199 g_assert(rdl->section->mr == attr->ram_block->mr); in ram_block_attributes_rdm_unregister_listener()
204 ret = ram_block_attributes_for_each_populated_section(attr, in ram_block_attributes_rdm_unregister_listener()
237 RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_replay_populated() local
240 g_assert(section->mr == attr->ram_block->mr); in ram_block_attributes_rdm_replay_populated()
241 return ram_block_attributes_for_each_populated_section(attr, section, &data, in ram_block_attributes_rdm_replay_populated()
251 RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm); in ram_block_attributes_rdm_replay_discarded() local
254 g_assert(section->mr == attr->ram_block->mr); in ram_block_attributes_rdm_replay_discarded()
255 return ram_block_attributes_for_each_discarded_section(attr, section, &data, in ram_block_attributes_rdm_replay_discarded()
260 ram_block_attributes_is_valid_range(RamBlockAttributes *attr, uint64_t offset, in ram_block_attributes_is_valid_range() argument
263 MemoryRegion *mr = attr->ram_block->mr; in ram_block_attributes_is_valid_range()
268 const size_t block_size = ram_block_attributes_get_block_size(attr); in ram_block_attributes_is_valid_range()
283 static void ram_block_attributes_notify_discard(RamBlockAttributes *attr, in ram_block_attributes_notify_discard() argument
289 QLIST_FOREACH(rdl, &attr->rdl_list, next) { in ram_block_attributes_notify_discard()
300 ram_block_attributes_notify_populate(RamBlockAttributes *attr, in ram_block_attributes_notify_populate() argument
306 QLIST_FOREACH(rdl, &attr->rdl_list, next) { in ram_block_attributes_notify_populate()
321 int ram_block_attributes_state_change(RamBlockAttributes *attr, in ram_block_attributes_state_change() argument
325 const size_t block_size = ram_block_attributes_get_block_size(attr); in ram_block_attributes_state_change()
329 const bool is_discarded = find_next_bit(attr->bitmap, attr->bitmap_size, in ram_block_attributes_state_change()
331 const bool is_populated = find_next_zero_bit(attr->bitmap, in ram_block_attributes_state_change()
332 attr->bitmap_size, first_bit) > last_bit; in ram_block_attributes_state_change()
336 if (!ram_block_attributes_is_valid_range(attr, offset, size)) { in ram_block_attributes_state_change()
353 bitmap_clear(attr->bitmap, first_bit, nbits); in ram_block_attributes_state_change()
354 ram_block_attributes_notify_discard(attr, offset, size); in ram_block_attributes_state_change()
358 if (!test_bit(bit, attr->bitmap)) { in ram_block_attributes_state_change()
361 clear_bit(bit, attr->bitmap); in ram_block_attributes_state_change()
362 ram_block_attributes_notify_discard(attr, bit * block_size, in ram_block_attributes_state_change()
371 bitmap_set(attr->bitmap, first_bit, nbits); in ram_block_attributes_state_change()
372 ret = ram_block_attributes_notify_populate(attr, offset, size); in ram_block_attributes_state_change()
376 if (test_bit(bit, attr->bitmap)) { in ram_block_attributes_state_change()
379 set_bit(bit, attr->bitmap); in ram_block_attributes_state_change()
380 ret = ram_block_attributes_notify_populate(attr, in ram_block_attributes_state_change()
396 RamBlockAttributes *attr; in ram_block_attributes_create() local
399 attr = RAM_BLOCK_ATTRIBUTES(object_new(TYPE_RAM_BLOCK_ATTRIBUTES)); in ram_block_attributes_create()
401 attr->ram_block = ram_block; in ram_block_attributes_create()
402 if (memory_region_set_ram_discard_manager(mr, RAM_DISCARD_MANAGER(attr))) { in ram_block_attributes_create()
403 object_unref(OBJECT(attr)); in ram_block_attributes_create()
406 attr->bitmap_size = in ram_block_attributes_create()
408 attr->bitmap = bitmap_new(attr->bitmap_size); in ram_block_attributes_create()
410 return attr; in ram_block_attributes_create()
413 void ram_block_attributes_destroy(RamBlockAttributes *attr) in ram_block_attributes_destroy() argument
415 g_assert(attr); in ram_block_attributes_destroy()
417 g_free(attr->bitmap); in ram_block_attributes_destroy()
418 memory_region_set_ram_discard_manager(attr->ram_block->mr, NULL); in ram_block_attributes_destroy()
419 object_unref(OBJECT(attr)); in ram_block_attributes_destroy()
424 RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(obj); in ram_block_attributes_init() local
426 QLIST_INIT(&attr->rdl_list); in ram_block_attributes_init()