> > We should just qemu_ram_alloc() that memory regardless of whether we > > every map it into the guest. Since roms can be large, we want to send > > their contents over during the live part of migration. If we use > > qemu_ram_alloc(), we get that for free. > > Currently live migration uses ram_addrs, so this would work. But > ram_addrs have no meaning in the guest and thus depend on qemu > implementation details. IMO we should switch live migration to use > guest physical addresses, which would require a different migration > implementation for roms. Most of it can be shared with ram, though.
Ram allocations should be associated with a device. The VMState stuff this should make this fairly straightforward. Guest address space mappings are a completely separate issue. The device should be migrating the mappings (directly or via a PCI BAR) as part of its state migration. The ram regions might not be mapped into guest address space at all. Paul