[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 21/22] memory: make cpu_physical_memory_sync_dirty_b
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 21/22] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic |
Date: |
Thu, 26 Mar 2015 18:38:39 +0100 |
From: Stefan Hajnoczi <address@hidden>
The fast path of cpu_physical_memory_sync_dirty_bitmap() directly
manipulates the dirty bitmap. Use atomic_xchg() to make the
test-and-clear atomic.
Signed-off-by: Stefan Hajnoczi <address@hidden>
Message-Id: <address@hidden>
[Only do xchg on nonzero words. - Paolo]
Signed-off-by: Paolo Bonzini <address@hidden>
---
include/exec/ram_addr.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index b7357ac..c4e5624 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -220,12 +220,12 @@ uint64_t cpu_physical_memory_sync_dirty_bitmap(unsigned
long *dest,
for (k = page; k < page + nr; k++) {
if (src[k]) {
+ unsigned long bits = atomic_xchg(&src[k], 0);
unsigned long new_dirty;
new_dirty = ~dest[k];
- dest[k] |= src[k];
- new_dirty &= src[k];
+ dest[k] |= bits;
+ new_dirty &= bits;
num_dirty += ctpopl(new_dirty);
- src[k] = 0;
}
}
} else {
--
2.3.3
- [Qemu-devel] [PATCH 10/22] ram_addr: tweaks to xen_modified_memory, (continued)
- [Qemu-devel] [PATCH 10/22] ram_addr: tweaks to xen_modified_memory, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 08/22] memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 13/22] exec: pass client mask to cpu_physical_memory_set_dirty_range, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 11/22] exec: simplify notdirty_mem_write, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 14/22] exec: only check relevant bitmaps for cleanliness, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 15/22] memory: do not touch code dirty bitmap unless TCG is enabled, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 17/22] bitmap: add atomic test and clear, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 18/22] memory: use atomic ops for setting dirty memory bits, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 16/22] bitmap: add atomic set functions, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 19/22] migration: move dirty bitmap sync to ram_addr.h, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 21/22] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 20/22] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear, Paolo Bonzini, 2015/03/26
- [Qemu-devel] [PATCH 22/22] migration: run bitmap sync outside iothread lock, Paolo Bonzini, 2015/03/26