
On Thu, Nov 10, 2016 at 08:56:48 -0500, John Ferlan wrote:
On 11/10/2016 04:11 AM, Peter Krempa wrote:
On Wed, Nov 09, 2016 at 18:40:28 -0500, John Ferlan wrote:
On 11/03/2016 02:12 AM, Peter Krempa wrote:
Detect on reconnect to a running qemu VM whether the alias of a hotpluggable memory device (dimm) does not match the dimm slot number where it's connected to. This is necessary as qemu is actually considering the alias as machine ABI used to connect the backend object to the dimm device.
This will require us to keep them consistent so that we can reliably restore them on migration. In some situations it was currently possible to create a mismatched configuration and qemu would refuse to restore the migration stream.
To avoid breaking existing VMs we'll need to keep the old algorithm though. --- src/qemu/qemu_domain.h | 3 +++ src/qemu/qemu_process.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+)
[...]
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 1b67aee..15b8ec8 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3205,6 +3205,29 @@ qemuDomainPerfRestart(virDomainObjPtr vm) return 0; }
+ +static void +qemuProcessReconnectCheckMemoryHotplugMismatch(virDomainObjPtr vm) +{ + size_t i; + int aliasidx; + virDomainDefPtr def = vm->def; + qemuDomainObjPrivatePtr priv = vm->privateData; + + if (!virDomainDefHasMemoryHotplug(def) || def->nmems == 0) + return; + + for (i = 0; i < def->nmems; i++) { + aliasidx = qemuDomainDeviceAliasIndex(&def->mems[i]->info, "dimm");
When/how does the info.alias get filled in during restart processing?
The live definition along with aliases is saved to the status XML and then reloaded from the disk.
Otherwise if we'd not remember the aliases the whole hotunplug code would not work.
face-palm - I knew I was missing something obvious, but the brain just wasn't able to recognize it, <sigh>.
Still consider the changed XML example from patch1 (without any hotplug), we have:
<address type='dimm' slot='0' ...> => alias == "dimm0" <address type='dimm' slot='2' ...> => alias == "dimm1"
so the bool could be "memAliasOrderMismatch" or "memAliasUnordered".
Okay, I'll go with the former, since that describes exactly the details.
Since it's not necessarily "Hotplug" related, I think changing the variable and function name should be done, but it's not a requirement for the ACK since it's understandable why Hotplug is used.
John
FWIW: One other oddball path that "might" disrupt things is the ignore_value(qemuDomainUpdateMemoryDeviceInfo(...) hotplug code where we're not "guaranteed" that the dimm.slot is filled in...
It should not ever happen, but I thought about this option originally. The code tolerates this for local usage since it's not really fatal, but rejects migration if the slot or base address is missing.