From patchwork Tue May 21 22:32:57 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 245429 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id AABE52C00AD for ; Wed, 22 May 2013 08:34:13 +1000 (EST) Received: from localhost ([::1]:40102 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uev8F-0007Mh-C0 for incoming@patchwork.ozlabs.org; Tue, 21 May 2013 18:34:11 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42238) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uev7v-0007MP-CI for qemu-devel@nongnu.org; Tue, 21 May 2013 18:33:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uev7q-0003j2-Mw for qemu-devel@nongnu.org; Tue, 21 May 2013 18:33:51 -0400 Received: from mail-ob0-x232.google.com ([2607:f8b0:4003:c01::232]:42271) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uev7q-0003iw-HW; Tue, 21 May 2013 18:33:46 -0400 Received: by mail-ob0-f178.google.com with SMTP id v19so1457644obq.9 for ; Tue, 21 May 2013 15:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer; bh=Gs6UsTyYoPZ9AAythLsxOtcRCoRVXRXy6M+W6FoKBuo=; b=ZpQEsgclLFuab27wbuVz3jzA5p+uuLwVlYajCM6vf49KER5B+hsfuDu2GxNGmze3EN XuuMLyvPOHUjjeTmNJesT3rSEL2TJkgYLO56u8o+3CFDvhO6gb2kSv1IJEIq5WCa+Dgo BdCFKvQyeeYRdsQgKxDds4R8p0DBYt9579tEiIq7qCFxjn+pfRYGnIV7kssrR+Y8YMDJ 3FVb4B2n4Y6hQqi1+JE0ELc1j3zJjIMp7csX2AGdFQyqIwVs3xA7GhamCiYibQ5kU8ZU keXtj+kTQTjb1N3xQwLcVXLPgJhjxf9JNhTBBc17ZyM3fGNqBhZ3eEmHJJZnRUYYvAho sEeQ== X-Received: by 10.60.96.105 with SMTP id dr9mr2903884oeb.59.1369175625901; Tue, 21 May 2013 15:33:45 -0700 (PDT) Received: from localhost ([32.97.110.51]) by mx.google.com with ESMTPSA id ri8sm4840174oeb.0.2013.05.21.15.33.44 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 21 May 2013 15:33:45 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Date: Tue, 21 May 2013 17:32:57 -0500 Message-Id: <1369175577-18130-1-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.9.5 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4003:c01::232 Cc: peter.maydell@linaro.org, qemu-stable@nongnu.org, nick@bytemark.co.uk Subject: [Qemu-devel] [PATCH] wdt_i6300esb: fix vmstate versioning X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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: Nicholas Thomas Suggested-by: Peter Maydell Cc: qemu-stable@nongnu.org Signed-off-by: Michael Roth Reviewed-by: Amit Shah --- hw/watchdog/wdt_i6300esb.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c index 1407fba..851b664 100644 --- a/hw/watchdog/wdt_i6300esb.c +++ b/hw/watchdog/wdt_i6300esb.c @@ -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 except 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),