mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
vmstate, memory: decouple vmstate from memory API
Currently creating a memory region automatically registers it for live migration. This differs from other state (which is enumerated in a VMStateDescription structure) and ties the live migration code into the memory core. Decouple the two by introducing a separate API, vmstate_register_ram(), for registering a RAM block for migration. Currently the same implementation is reused, but later it can be moved into a separate list, and registrations can be moved to VMStateDescription blocks. Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
8991c79b57
commit
c5705a7728
71 changed files with 286 additions and 154 deletions
|
@ -335,8 +335,9 @@ static void create_shared_memory_BAR(IVShmemState *s, int fd) {
|
|||
|
||||
ptr = mmap(0, s->ivshmem_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
|
||||
memory_region_init_ram_ptr(&s->ivshmem, &s->dev.qdev, "ivshmem.bar2",
|
||||
memory_region_init_ram_ptr(&s->ivshmem, "ivshmem.bar2",
|
||||
s->ivshmem_size, ptr);
|
||||
vmstate_register_ram(&s->ivshmem, &s->dev.qdev);
|
||||
memory_region_add_subregion(&s->bar, 0, &s->ivshmem);
|
||||
|
||||
/* region for shared memory */
|
||||
|
@ -451,8 +452,9 @@ static void ivshmem_read(void *opaque, const uint8_t * buf, int flags)
|
|||
/* mmap the region and map into the BAR2 */
|
||||
map_ptr = mmap(0, s->ivshmem_size, PROT_READ|PROT_WRITE, MAP_SHARED,
|
||||
incoming_fd, 0);
|
||||
memory_region_init_ram_ptr(&s->ivshmem, &s->dev.qdev,
|
||||
memory_region_init_ram_ptr(&s->ivshmem,
|
||||
"ivshmem.bar2", s->ivshmem_size, map_ptr);
|
||||
vmstate_register_ram(&s->ivshmem, &s->dev.qdev);
|
||||
|
||||
IVSHMEM_DPRINTF("guest h/w addr = %" PRIu64 ", size = %" PRIu64 "\n",
|
||||
s->ivshmem_offset, s->ivshmem_size);
|
||||
|
@ -753,6 +755,7 @@ static int pci_ivshmem_uninit(PCIDevice *dev)
|
|||
|
||||
memory_region_destroy(&s->ivshmem_mmio);
|
||||
memory_region_del_subregion(&s->bar, &s->ivshmem);
|
||||
vmstate_unregister_ram(&s->ivshmem, &s->dev.qdev);
|
||||
memory_region_destroy(&s->ivshmem);
|
||||
memory_region_destroy(&s->bar);
|
||||
unregister_savevm(&dev->qdev, "ivshmem", s);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue