memory: RCU ram_list.dirty_memory[] for safe RAM hotplug
commit5b82b703b69acc67b78b98a5efc897a3912719eb
authorStefan Hajnoczi <stefanha@redhat.com>
Mon, 25 Jan 2016 13:33:20 +0000 (25 13:33 +0000)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 9 Feb 2016 14:45:26 +0000 (9 15:45 +0100)
treef0532356113606ee7c64560e69149e865852a43c
parent8bafcb21643a39a5b29109f8bd5ee5a6f0f6850b
memory: RCU ram_list.dirty_memory[] for safe RAM hotplug

Although accesses to ram_list.dirty_memory[] use atomics so multiple
threads can safely dirty the bitmap, the data structure is not fully
thread-safe yet.

This patch handles the RAM hotplug case where ram_list.dirty_memory[] is
grown.  ram_list.dirty_memory[] is change from a regular bitmap to an
RCU array of pointers to fixed-size bitmap blocks.  Threads can continue
accessing bitmap blocks while the array is being extended.  See the
comments in the code for an in-depth explanation of struct
DirtyMemoryBlocks.

I have tested that live migration with virtio-blk dataplane works.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <1453728801-5398-2-git-send-email-stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
exec.c
include/exec/ram_addr.h
migration/ram.c