From nobody Tue Feb 10 11:58:55 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1617799809; cv=none; d=zohomail.com; s=zohoarc; b=GF/a/KH4taLl/sH1BRNgmTtUWwinNLht0e8EB0jlOdlp+v38Cw7PrHfQstDKEDww+raYmd5IdRYuKrGs4Gy2EA6037LhuO5qLs93jN7Bn8w8lwRIOkCjyYyUBXZBcaJ7VvzbycImt/SAd/Q7a0fA15z4n/NJPaqhYPpzMKyq4Vk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1617799809; h=Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=TRDlLkWsYQOrhPqF6N9M+2rhdbr4xS3VgnTnaFjbk2c=; b=Jn1HSPSAh6vysk+G9WEhnf3GNdtDUnB38QvV2vtkByHeDb8sO3VZITRSpm5JHYJvGOoRR3gFXzanvJry5SzQqoM6K9l0r0xqQzlsCvwAnvanN3b3FWPPvoq8a2ypMpPFw6tSRbDzOg/SKC8Jv/Ti+7gHL048j434RcDKidNKAm0= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1617799809660368.67042103391543; Wed, 7 Apr 2021 05:50:09 -0700 (PDT) Received: from localhost ([::1]:51676 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lU7dH-00016N-Tw for importer@patchew.org; Wed, 07 Apr 2021 08:50:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60234) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lU7c9-0000gr-JZ for qemu-devel@nongnu.org; Wed, 07 Apr 2021 08:48:57 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:35934 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lU7c6-0004oX-5b for qemu-devel@nongnu.org; Wed, 07 Apr 2021 08:48:57 -0400 Received: from host86-148-103-9.range86-148.btcentralplus.com ([86.148.103.9] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lU7cD-0003MI-39 for qemu-devel@nongnu.org; Wed, 07 Apr 2021 13:49:06 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org Date: Wed, 7 Apr 2021 13:48:42 +0100 Message-Id: <20210407124842.32695-1-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.148.103.9 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH for-6.0] esp: fix setting of ESPState mig_version_id when launching QEMU with -S option X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" If QEMU is launched with the -S option then the ESPState mig_version_id pro= perty is left unset due to the ordering of the VMState fields in the VMStateDescr= iption for sysbusespscsi and pciespscsi. If the VM is migrated and restored in this stopped state, the version tests in the vmstate_esp VMStateDescription and esp_post_load() become confused causing the migration to fail. Fix the ordering problem by moving the setting of mig_version_id to a common esp_pre_save() function which is invoked first by both sysbusespscsi and pciespscsi rather than at the point where ESPState is itself serialised int= o the migration stream. Buglink: https://bugs.launchpad.net/qemu/+bug/1922611 Fixes: 0bd005be78 ("esp: add vmstate_esp version to embedded ESPState") Signed-off-by: Mark Cave-Ayland Reviewed-by: Thomas Huth --- hw/scsi/esp-pci.c | 1 + hw/scsi/esp.c | 7 ++++--- include/hw/scsi/esp.h | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index c3d3dab05e..9db10b1a48 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -332,6 +332,7 @@ static const VMStateDescription vmstate_esp_pci_scsi = =3D { .name =3D "pciespscsi", .version_id =3D 2, .minimum_version_id =3D 1, + .pre_save =3D esp_pre_save, .fields =3D (VMStateField[]) { VMSTATE_PCI_DEVICE(parent_obj, PCIESPState), VMSTATE_BUFFER_UNSAFE(dma_regs, PCIESPState, 0, 8 * sizeof(uint32_= t)), diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 3b9037e4f4..0037197bdb 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1089,9 +1089,10 @@ static bool esp_is_version_5(void *opaque, int versi= on_id) return version_id =3D=3D 5; } =20 -static int esp_pre_save(void *opaque) +int esp_pre_save(void *opaque) { - ESPState *s =3D ESP(opaque); + ESPState *s =3D ESP(object_resolve_path_component( + OBJECT(opaque), "esp")); =20 s->mig_version_id =3D vmstate_esp.version_id; return 0; @@ -1127,7 +1128,6 @@ const VMStateDescription vmstate_esp =3D { .name =3D "esp", .version_id =3D 5, .minimum_version_id =3D 3, - .pre_save =3D esp_pre_save, .post_load =3D esp_post_load, .fields =3D (VMStateField[]) { VMSTATE_BUFFER(rregs, ESPState), @@ -1317,6 +1317,7 @@ static const VMStateDescription vmstate_sysbus_esp_sc= si =3D { .name =3D "sysbusespscsi", .version_id =3D 2, .minimum_version_id =3D 1, + .pre_save =3D esp_pre_save, .fields =3D (VMStateField[]) { VMSTATE_UINT8_V(esp.mig_version_id, SysBusESPState, 2), VMSTATE_STRUCT(esp, SysBusESPState, 0, vmstate_esp, ESPState), diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 95088490aa..aada3680b7 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -157,5 +157,6 @@ void esp_hard_reset(ESPState *s); uint64_t esp_reg_read(ESPState *s, uint32_t saddr); void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val); extern const VMStateDescription vmstate_esp; +int esp_pre_save(void *opaque); =20 #endif --=20 2.20.1