Lines Matching +full:page +full:- +full:offset
10 * later. See the COPYING file in the top-level directory.
28 #include "exec/exec-all.h"
37 * @shift: guest page number shift
47 * clear_bmap_set: set clear bitmap for the page range. Must be with
51 * @start: the start page number
59 uint8_t shift = rb->clear_bmap_shift; in clear_bmap_set()
61 bitmap_set(rb->clear_bmap, start >> shift, clear_bmap_size(npages, shift)); in clear_bmap_set()
65 * clear_bmap_test_and_clear: test clear bitmap for the page, clear if set.
69 * @page: the page number to check
73 static inline bool clear_bmap_test_and_clear(RAMBlock *rb, uint64_t page) in clear_bmap_test_and_clear() argument
75 uint8_t shift = rb->clear_bmap_shift; in clear_bmap_test_and_clear()
77 return bitmap_test_and_clear(rb->clear_bmap, page >> shift, 1); in clear_bmap_test_and_clear()
80 static inline bool offset_in_ramblock(RAMBlock *b, ram_addr_t offset) in offset_in_ramblock() argument
82 return (b && b->host && offset < b->used_length) ? true : false; in offset_in_ramblock()
85 static inline void *ramblock_ptr(RAMBlock *block, ram_addr_t offset) in ramblock_ptr() argument
87 assert(offset_in_ramblock(block, offset)); in ramblock_ptr()
88 return (char *)block->host + offset; in ramblock_ptr()
95 (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); in ramblock_recv_bitmap_offset()
116 * @offset: Offset into target file
125 off_t offset, Error **errp);
127 uint32_t ram_flags, int fd, off_t offset,
148 qemu_ram_msync(block, 0, block->used_length); in qemu_ram_block_writeback()
151 #define DIRTY_CLIENTS_ALL ((1 << DIRTY_MEMORY_NUM) - 1)
159 unsigned long end, page; in cpu_physical_memory_get_dirty() local
160 unsigned long idx, offset, base; in cpu_physical_memory_get_dirty() local
166 page = start >> TARGET_PAGE_BITS; in cpu_physical_memory_get_dirty()
171 idx = page / DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_get_dirty()
172 offset = page % DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_get_dirty()
173 base = page - offset; in cpu_physical_memory_get_dirty()
174 while (page < end) { in cpu_physical_memory_get_dirty()
176 unsigned long num = next - base; in cpu_physical_memory_get_dirty()
177 unsigned long found = find_next_bit(blocks->blocks[idx], in cpu_physical_memory_get_dirty()
178 num, offset); in cpu_physical_memory_get_dirty()
184 page = next; in cpu_physical_memory_get_dirty()
186 offset = 0; in cpu_physical_memory_get_dirty()
199 unsigned long end, page; in cpu_physical_memory_all_dirty() local
200 unsigned long idx, offset, base; in cpu_physical_memory_all_dirty() local
206 page = start >> TARGET_PAGE_BITS; in cpu_physical_memory_all_dirty()
212 idx = page / DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_all_dirty()
213 offset = page % DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_all_dirty()
214 base = page - offset; in cpu_physical_memory_all_dirty()
215 while (page < end) { in cpu_physical_memory_all_dirty()
217 unsigned long num = next - base; in cpu_physical_memory_all_dirty()
218 unsigned long found = find_next_zero_bit(blocks->blocks[idx], num, offset); in cpu_physical_memory_all_dirty()
224 page = next; in cpu_physical_memory_all_dirty()
226 offset = 0; in cpu_physical_memory_all_dirty()
272 unsigned long page, idx, offset; in cpu_physical_memory_set_dirty_flag() local
277 page = addr >> TARGET_PAGE_BITS; in cpu_physical_memory_set_dirty_flag()
278 idx = page / DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_set_dirty_flag()
279 offset = page % DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_set_dirty_flag()
285 set_bit_atomic(offset, blocks->blocks[idx]); in cpu_physical_memory_set_dirty_flag()
293 unsigned long end, page; in cpu_physical_memory_set_dirty_range() local
294 unsigned long idx, offset, base; in cpu_physical_memory_set_dirty_range() local
302 page = start >> TARGET_PAGE_BITS; in cpu_physical_memory_set_dirty_range()
309 idx = page / DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_set_dirty_range()
310 offset = page % DIRTY_MEMORY_BLOCK_SIZE; in cpu_physical_memory_set_dirty_range()
311 base = page - offset; in cpu_physical_memory_set_dirty_range()
312 while (page < end) { in cpu_physical_memory_set_dirty_range()
316 bitmap_set_atomic(blocks[DIRTY_MEMORY_MIGRATION]->blocks[idx], in cpu_physical_memory_set_dirty_range()
317 offset, next - page); in cpu_physical_memory_set_dirty_range()
320 bitmap_set_atomic(blocks[DIRTY_MEMORY_VGA]->blocks[idx], in cpu_physical_memory_set_dirty_range()
321 offset, next - page); in cpu_physical_memory_set_dirty_range()
324 bitmap_set_atomic(blocks[DIRTY_MEMORY_CODE]->blocks[idx], in cpu_physical_memory_set_dirty_range()
325 offset, next - page); in cpu_physical_memory_set_dirty_range()
328 page = next; in cpu_physical_memory_set_dirty_range()
330 offset = 0; in cpu_physical_memory_set_dirty_range()
356 unsigned long len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS; in cpu_physical_memory_set_dirty_lebitmap()
358 unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); in cpu_physical_memory_set_dirty_lebitmap() local
361 if ((((page * BITS_PER_LONG) << TARGET_PAGE_BITS) == start) && in cpu_physical_memory_set_dirty_lebitmap()
365 unsigned long offset; in cpu_physical_memory_set_dirty_lebitmap() local
370 offset = BIT_WORD((start >> TARGET_PAGE_BITS) % in cpu_physical_memory_set_dirty_lebitmap()
376 qatomic_rcu_read(&ram_list.dirty_memory[i])->blocks; in cpu_physical_memory_set_dirty_lebitmap()
384 qatomic_or(&blocks[DIRTY_MEMORY_VGA][idx][offset], temp); in cpu_physical_memory_set_dirty_lebitmap()
388 &blocks[DIRTY_MEMORY_MIGRATION][idx][offset], in cpu_physical_memory_set_dirty_lebitmap()
399 qatomic_or(&blocks[DIRTY_MEMORY_CODE][idx][offset], in cpu_physical_memory_set_dirty_lebitmap()
404 if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) { in cpu_physical_memory_set_dirty_lebitmap()
405 offset = 0; in cpu_physical_memory_set_dirty_lebitmap()
420 * bitmap-traveling is faster than memory-traveling (for addr...) in cpu_physical_memory_set_dirty_lebitmap()
461 (MemoryRegion *mr, hwaddr offset, hwaddr length, unsigned client);
483 unsigned long word = BIT_WORD((start + rb->offset) >> TARGET_PAGE_BITS); in cpu_physical_memory_sync_dirty_bitmap()
485 unsigned long *dest = rb->bmap; in cpu_physical_memory_sync_dirty_bitmap()
489 (start + rb->offset) && in cpu_physical_memory_sync_dirty_bitmap()
490 !(length & ((BITS_PER_LONG << TARGET_PAGE_BITS) - 1))) { in cpu_physical_memory_sync_dirty_bitmap()
495 unsigned long offset = BIT_WORD((word * BITS_PER_LONG) % in cpu_physical_memory_sync_dirty_bitmap() local
497 unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS); in cpu_physical_memory_sync_dirty_bitmap() local
500 &ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION])->blocks; in cpu_physical_memory_sync_dirty_bitmap()
502 for (k = page; k < page + nr; k++) { in cpu_physical_memory_sync_dirty_bitmap()
503 if (src[idx][offset]) { in cpu_physical_memory_sync_dirty_bitmap()
504 unsigned long bits = qatomic_xchg(&src[idx][offset], 0); in cpu_physical_memory_sync_dirty_bitmap()
512 if (++offset >= BITS_TO_LONGS(DIRTY_MEMORY_BLOCK_SIZE)) { in cpu_physical_memory_sync_dirty_bitmap()
513 offset = 0; in cpu_physical_memory_sync_dirty_bitmap()
521 if (rb->clear_bmap) { in cpu_physical_memory_sync_dirty_bitmap()
530 /* Slow path - still do that in a huge chunk */ in cpu_physical_memory_sync_dirty_bitmap()
531 memory_region_clear_dirty_bitmap(rb->mr, start, length); in cpu_physical_memory_sync_dirty_bitmap()
534 ram_addr_t offset = rb->offset; in cpu_physical_memory_sync_dirty_bitmap() local
538 start + addr + offset, in cpu_physical_memory_sync_dirty_bitmap()