]> git.proxmox.com Git - mirror_qemu.git/commit - exec.c
exec.c: fix dirty bitmap reallocation
authorIgor Mitsyanko <i.mitsyanko@samsung.com>
Fri, 10 Aug 2012 14:45:11 +0000 (18:45 +0400)
committerBlue Swirl <blauwirbel@gmail.com>
Sat, 11 Aug 2012 12:23:46 +0000 (12:23 +0000)
commit5fda043f9c8b8ab18da2704de8e77b7c86fa9435
tree259e39dee57e364caa95b354779fb794b69949cf
parent0521d375a154a27d90eabab035303c6806a37920
exec.c: fix dirty bitmap reallocation

For each newly created RAM block, dirty bitmap is reallocated with g_realloc, which doesn't
make any promises on initial content of new extra data in returned buffer. In theory,
we initialize this new data with cpu_physical_memory_set_dirty_range() call. The
problem is, cpu_physical_memory_set_dirty_range() has a side effect of incrementing
ram_list.dirty_pages variable, but only for pages which are not already dirty. And
page "cleanliness" is determined using the same not yet uninitialized dirty bitmap
we've just reallocated. This results in inconsistency between real dirty page number
and value in ram_list.dirty_pages variable, which in turn could (and will) result
in errors during VM migration.
Zero initialize new dirty bitmap bytes to fix this problem.

Signed-off-by: Igor Mitsyanko <i.mitsyanko@samsung.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
exec.c