Skip to content
Snippets Groups Projects
Commit c1990468 authored by Michael Roth's avatar Michael Roth Committed by Anthony Liguori
Browse files

wdt_i6300esb: fix vmstate versioning


When this VMSD was introduced it's version fields were set to
sizeof(I6300State), making them essentially random from build to build,
version to version.

To fix this, we lock in a high version id and low minimum version id to
support old->new migration from all prior versions of this device's
state. This should work since the device state has not changed since
its introduction.

The potentially breaks migration from 1.5+ to 1.5, but since the
versioning was essentially random prior to this patch, new->old
migration was not consistently functional to begin with.

Reported-by: default avatarNicholas Thomas <nick@bytemark.co.uk>
Suggested-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Cc: qemu-stable@nongnu.org
Signed-off-by: default avatarMichael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 3ed8a843
No related branches found
No related tags found
No related merge requests found
......@@ -374,9 +374,22 @@ static const MemoryRegionOps i6300esb_ops = {
static const VMStateDescription vmstate_i6300esb = {
.name = "i6300esb_wdt",
.version_id = sizeof(I6300State),
.minimum_version_id = sizeof(I6300State),
.minimum_version_id_old = sizeof(I6300State),
/* With this VMSD's introduction, version_id/minimum_version_id were
* erroneously set to sizeof(I6300State), causing a somewhat random
* version_id to be set for every build. This eventually broke
* migration.
*
* To correct this without breaking old->new migration for older versions
* of QEMU, we've set version_id to a value high enough to exceed all past
* values of sizeof(I6300State) across various build environments, and have
* reset minimum_version_id_old/minimum_version_id to 1, since this VMSD
* has never changed and thus can accept all past versions.
*
* For future changes we can treat these values as we normally would.
*/
.version_id = 10000,
.minimum_version_id = 1,
.minimum_version_id_old = 1,
.fields = (VMStateField []) {
VMSTATE_PCI_DEVICE(dev, I6300State),
VMSTATE_INT32(reboot_enabled, I6300State),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment