> > > > > > >> + /* we will need a new memory slot for kvm and vhost */ > > >> + if (kvm_enabled() && !kvm_has_free_slot(machine)) { > > >> + error_setg(errp, "hypervisor has no free memory slots left"); > > >> + return; > > >> + } > > >> + if (!vhost_has_free_slot()) { > > >> + error_setg(errp, "a used vhost backend has no free memory slots > > >> left"); > > >> + return; > > >> + } > > > move these checks to pre_plug time > > > > > >> + > > >> + memory_region_add_subregion(&hpms->mr, addr - hpms->base, mr); > > > missing vmstate registration? > > > > Missed this one: To be called by the caller. Important because e.g. for > > virtio-pmem we don't want this (I assume :) ). > if pmem isn't on shared storage, then We'd probably want to migrate > it as well, otherwise target would experience data loss. > Anyways, I'd just reat it as normal RAM in migration case
Main difference between RAM and pmem it acts like combination of RAM and disk. Saying this, in normal use-case size would be 100 GB's - few TB's range. I am not sure we really want to migrate it for non-shared storage use-case. One reason why nvdimm added vmstate info could be: still there would be transient writes in memory with fake DAX and there is no way(till now) to flush the guest writes. But with virtio-pmem we can flush such writes before migration and automatically at destination host with shared disk we will have updated data. Thanks, Pankaj