From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693432; cv=none; d=zohomail.com; s=zohoarc; b=mqtiNC3vSwUEddhSvw0LQgOUn2QlXDc/VUUTFx9VRA/8g0k8SnjdaEuErGuEocyci0CxpvAsgb0SndBQOaSeNKlzpwIUNymZ1cCSr13ZQeMJ/NJFZYIFCrS1oJ0Zy8SDHr3a8rTxTZTsn6J/Svi3JMlTT/X+P69QHb+Iqk+wzTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693432; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=H2NIorVqRNjHxH8pDqqhipiNE/AFKe2aszIwI7b1Er8=; b=fVt+W6tLHxqjAaBKrVXtkaQPPUTeAzkvNMTmr+UnbgzqYN6iqQ3yZVxOzTxX39s7PCoYexSQTbo89u4Qw1x2vS1+ngPNNOEPXYnP45xJ+SRfgg9mPkhOw0Vwam6w1XtvDzd8HlwzHhc3BfBBqD8Fi6aPbuve95exel9ryet6pzw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693432524208.35630855358716; Tue, 28 Oct 2025 16:17:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstT-0002wd-QG; Tue, 28 Oct 2025 19:14:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstQ-0002vl-JT for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:20 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst7-000146-1A for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:20 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 1EA128171D; Wed, 29 Oct 2025 02:13:53 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-2Fr0JDOO; Wed, 29 Oct 2025 02:13:52 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693232; bh=H2NIorVqRNjHxH8pDqqhipiNE/AFKe2aszIwI7b1Er8=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=XEBXyqOFYG9GyFOuQWqZNZh8vcpp45JXIw4BYsuTgbiJ6EdLomR5yJfWHHEc1foXc b3mGMyzbBYivJ1Y3AjsMxQzfcqzioyEnWPkpBP117jqsCmLjkuG3Ccdj2dKa7aAygO CsCttTrjrGXHPlGtL6MC5iY+zkDW+kVaLVcIqfJU= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 01/22] migration: introduce vmstate_load_vmsd() and vmstate_save_vmsd() Date: Wed, 29 Oct 2025 02:13:25 +0300 Message-ID: <20251028231347.194844-2-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693435720158500 Content-Type: text/plain; charset="utf-8" Introduce new APIs, returning bool. The analysis https://lore.kernel.org/qemu-devel/aQDdRn8t0B8oE3gf@x1.local/ shows, that vmstate_load_state() return value actually only used to check for success, specific errno values doesn't make sense. With this commit we introduce new functions with modern bool interface, and in following commits we'll update the whole code base to use them, and finally remove old vmstate_load_state() and vmstate_save_state(). During this update, we'll see, that return values of both functions is not significantly used, other then to check for success. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/migration/vmstate.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index dbe330dd5f..0aac3b7a66 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -1228,6 +1228,20 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateD= escription *vmsd, void *opaque, JSONWriter *vmdesc, int version_id, Error **errp); =20 +static inline bool vmstate_load_vmsd( + QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, int version_id, Error **errp) +{ + return vmstate_load_state(f, vmsd, opaque, version_id, errp) >=3D 0; +} + +static inline bool vmstate_save_vmsd( + QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, JSONWriter *vmdesc, Error **errp) +{ + return vmstate_save_state(f, vmsd, opaque, vmdesc, errp) >=3D 0; +} + bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque); =20 #define VMSTATE_INSTANCE_ID_ANY -1 --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693376; cv=none; d=zohomail.com; s=zohoarc; b=GhVaQuXSBVY51PX1rVyJFF+QYllAo4mmImXXIq/Ycktzkx9wXkSw1NZduKkq7Af/EAsiFg1ESNEqBmC7gy4Fwme/1vdKs11nYHmLHynRvO5r8GfoiOM/R63Q51IrCP6EjpsnGIyLD4ZVInqlto4TGZFBRg3D0ykq28IYhNfkiQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693376; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lLdUY3HJY+EAhmA9vc28UfAQF17pyF94N7tH58szokw=; b=k1ULlVXtKEW/MUE5EYWKz2rIhK1WqNRDIia7tatI1esKfkdlpeQYr5I5X4dBdtPfcFRxut5N2vmpWq33QwD3xG46UnkNrxK27x0oBzpbAIQ6ezpeceJRG0IeRJ4DmrC2Kiee2rL3CXn6XsG4DUxQtR/wcf+/Nis05w+8mTvOiG8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693376982618.890558462625; Tue, 28 Oct 2025 16:16:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstO-0002vS-Ry; Tue, 28 Oct 2025 19:14:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstM-0002te-ER for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:16 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst8-000148-Th for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:15 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id B64BA8174D; Wed, 29 Oct 2025 02:13:53 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-YA4SyPGP; Wed, 29 Oct 2025 02:13:53 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693233; bh=lLdUY3HJY+EAhmA9vc28UfAQF17pyF94N7tH58szokw=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=KE8KAaPPRO0JStcAlDnkeM00eRvQFXYOB7519g407aSVWOynYglEJbM4/Ycow0J2v VMjzRIqhSbjaO/XGGP26Nz9fewnOsQj0x2wXy6gVGlBzb+XAdCxE48nomkvClK7U2k ke/CXp07Nt64Q0vlTtCaxhrOfvsOKaJ85wmDiMG8= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 02/22] migration: VMStateInfo: introduce new handlers with errp Date: Wed, 29 Oct 2025 02:13:26 +0300 Message-ID: <20251028231347.194844-3-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693379478158500 Content-Type: text/plain; charset="utf-8" Add new APIs with errp, to allow handlers report good error messages. We'll convert existing handlers soon. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/migration/vmstate.h | 7 +++++++ migration/vmstate.c | 37 +++++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 0aac3b7a66..f0ffd8f9c5 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -46,6 +46,13 @@ struct VMStateInfo { int coroutine_mixed_fn (*put)(QEMUFile *f, void *pv, size_t size, const VMStateField *field, JSONWriter *vmdesc); + bool coroutine_mixed_fn (*load)(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + Error **errp); + bool coroutine_mixed_fn (*save)(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + JSONWriter *vmdesc, + Error **errp); }; =20 enum VMStateFlags { diff --git a/migration/vmstate.c b/migration/vmstate.c index 4d28364f7b..1d291ff556 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -212,13 +212,22 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, inner_field->struct_version_i= d, errp); } else { - ret =3D inner_field->info->get(f, curr_elem, size, - inner_field); - if (ret < 0) { - error_setg(errp, - "Failed to load element of type %s for = %s: " - "%d", inner_field->info->name, - inner_field->name, ret); + if (inner_field->info->get) { + ret =3D inner_field->info->get(f, curr_elem, size, + inner_field); + if (ret < 0) { + error_setg(errp, + "Failed to load element of type %s = for %s: " + "%d", inner_field->info->name, + inner_field->name, ret); + } + } else if (!inner_field->info->load( + f, curr_elem, size, inner_field, errp)) { + error_prepend( + errp, + "Failed to load element of type %s for %s:= ", + inner_field->info->name, inner_field->name= ); + ret =3D -EINVAL; } } =20 @@ -536,9 +545,12 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDes= cription *vmsd, curr_elem, vmdesc_loop, inner_field->struct_version= _id, errp); - } else { + } else if (inner_field->info->put) { ret =3D inner_field->info->put(f, curr_elem, size, inner_field, vmdesc_loop); + } else if (!inner_field->info->save( + f, curr_elem, size, inner_field, vmdesc_loop, errp)) { + ret =3D -EINVAL; } =20 written_bytes =3D qemu_file_transferred(f) - old_offset; @@ -551,8 +563,13 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDes= cription *vmsd, } =20 if (ret) { - error_setg(errp, "Save of field %s/%s failed", - vmsd->name, field->name); + if (*errp) { + error_prepend(errp, "Save of field %s/%s failed: ", + vmsd->name, field->name); + } else { + error_setg(errp, "Save of field %s/%s failed", + vmsd->name, field->name); + } if (vmsd->post_save) { vmsd->post_save(opaque); } --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693722; cv=none; d=zohomail.com; s=zohoarc; b=iQG14FcmaeC1UJpcr5FwrBjNl86v909KWkM5zEC4VWlx0gGwdCDmirNNfY02rEwtvinCoy/hxBNxRzlM9kvuXtwFA3dKt6p6DEVv1bEvqesCJ2MwKFjwdbpVlRfod34dTmFMRsd8G2lTQpQxIBYTAQNyC6cH6NPc2rzdm20z5iE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693722; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NZZux5qx2us8NWhaN9HZ/+ms++4266YHMgSH/roMby4=; b=GLGWOQKuUGsKHugGyyPmAF1PR2yaJq3DgyvZbmrBonPOzYI/I5eotMhgK6+FLwbZ67cYKD6WAQxKVitgJcu7TL5EUjBa1QlIGBHKs5WYnKx/33+KfKdKjG7ZB1soEq9U5lb+57vYmuzeFDYwyULGCUBKH2g8vr/lUjA2qQHN2QE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693721445775.3799477317845; Tue, 28 Oct 2025 16:22:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstR-0002w8-Tv; Tue, 28 Oct 2025 19:14:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstP-0002vV-B3 for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:19 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst8-00014M-FX for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:19 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 6D40E81727; Wed, 29 Oct 2025 02:13:54 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-BZNXFpHN; Wed, 29 Oct 2025 02:13:53 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693234; bh=NZZux5qx2us8NWhaN9HZ/+ms++4266YHMgSH/roMby4=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=S6adQcjh1V2r0657ovalazXt8/r2jC5B+uALHfIrYFiRdPQZ1Wd8W2QBcll3vgeLm PnfmwR+eECMAouwUosZ6xVvUHer19cqUIl+mKLv1zyxX3/wIpQr7Bxg5xOvY7pbmt7 9YfJ3kBTmlMFsKDYsyZ7yuqPEb9SAnCcmghIf7Sc= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 03/22] tests/unit/test-vmstate: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:27 +0300 Message-ID: <20251028231347.194844-4-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693728966158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- tests/unit/test-vmstate.c | 116 ++++++++++---------------------------- 1 file changed, 29 insertions(+), 87 deletions(-) diff --git a/tests/unit/test-vmstate.c b/tests/unit/test-vmstate.c index cadbab3c5e..2379b369cd 100644 --- a/tests/unit/test-vmstate.c +++ b/tests/unit/test-vmstate.c @@ -67,14 +67,9 @@ static QEMUFile *open_test_file(bool write) static void save_vmstate(const VMStateDescription *desc, void *obj) { QEMUFile *f =3D open_test_file(true); - Error *local_err =3D NULL; =20 /* Save file with vmstate */ - int ret =3D vmstate_save_state(f, desc, obj, NULL, &local_err); - if (ret) { - error_report_err(local_err); - } - g_assert(!ret); + vmstate_save_vmsd(f, desc, obj, NULL, &error_abort); qemu_put_byte(f, QEMU_VM_EOF); g_assert(!qemu_file_get_error(f)); qemu_fclose(f); @@ -112,7 +107,6 @@ static int load_vmstate_one(const VMStateDescription *d= esc, void *obj, int version, const uint8_t *wire, size_t size) { QEMUFile *f; - int ret; Error *local_err =3D NULL; =20 f =3D open_test_file(true); @@ -120,15 +114,16 @@ static int load_vmstate_one(const VMStateDescription = *desc, void *obj, qemu_fclose(f); =20 f =3D open_test_file(false); - ret =3D vmstate_load_state(f, desc, obj, version, &local_err); - if (ret) { + if (!vmstate_load_vmsd(f, desc, obj, version, &local_err)) { error_report_err(local_err); g_assert(qemu_file_get_error(f)); + qemu_fclose(f); + return -1; } else{ g_assert(!qemu_file_get_error(f)); + qemu_fclose(f); + return 0; } - qemu_fclose(f); - return ret; } =20 =20 @@ -362,8 +357,6 @@ static const VMStateDescription vmstate_versioned =3D { =20 static void test_load_v1(void) { - Error *local_err =3D NULL; - int ret; uint8_t buf[] =3D { 0, 0, 0, 10, /* a */ 0, 0, 0, 30, /* c */ @@ -374,10 +367,7 @@ static void test_load_v1(void) =20 QEMUFile *loading =3D open_test_file(false); TestStruct obj =3D { .b =3D 200, .e =3D 500, .f =3D 600 }; - ret =3D vmstate_load_state(loading, &vmstate_versioned, &obj, 1, &loca= l_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(loading, &vmstate_versioned, &obj, 1, &error_abort); g_assert(!qemu_file_get_error(loading)); g_assert_cmpint(obj.a, =3D=3D, 10); g_assert_cmpint(obj.b, =3D=3D, 200); @@ -390,8 +380,6 @@ static void test_load_v1(void) =20 static void test_load_v2(void) { - Error *local_err =3D NULL; - int ret; uint8_t buf[] =3D { 0, 0, 0, 10, /* a */ 0, 0, 0, 20, /* b */ @@ -405,10 +393,7 @@ static void test_load_v2(void) =20 QEMUFile *loading =3D open_test_file(false); TestStruct obj; - ret =3D vmstate_load_state(loading, &vmstate_versioned, &obj, 2, &loca= l_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(loading, &vmstate_versioned, &obj, 2, &error_abort); g_assert_cmpint(obj.a, =3D=3D, 10); g_assert_cmpint(obj.b, =3D=3D, 20); g_assert_cmpint(obj.c, =3D=3D, 30); @@ -442,16 +427,10 @@ static const VMStateDescription vmstate_skipping =3D { =20 static void test_save_noskip(void) { - Error *local_err =3D NULL; QEMUFile *fsave =3D open_test_file(true); TestStruct obj =3D { .a =3D 1, .b =3D 2, .c =3D 3, .d =3D 4, .e =3D 5,= .f =3D 6, .skip_c_e =3D false }; - int ret =3D vmstate_save_state(fsave, &vmstate_skipping, &obj, NULL, - &local_err); - if (ret) { - error_report_err(local_err); - } - g_assert(!ret); + vmstate_save_vmsd(fsave, &vmstate_skipping, &obj, NULL, &error_abort); g_assert(!qemu_file_get_error(fsave)); =20 uint8_t expected[] =3D { @@ -469,16 +448,10 @@ static void test_save_noskip(void) =20 static void test_save_skip(void) { - Error *local_err =3D NULL; QEMUFile *fsave =3D open_test_file(true); TestStruct obj =3D { .a =3D 1, .b =3D 2, .c =3D 3, .d =3D 4, .e =3D 5,= .f =3D 6, .skip_c_e =3D true }; - int ret =3D vmstate_save_state(fsave, &vmstate_skipping, &obj, NULL, - &local_err); - if (ret) { - error_report_err(local_err); - } - g_assert(!ret); + vmstate_save_vmsd(fsave, &vmstate_skipping, &obj, NULL, &error_abort); g_assert(!qemu_file_get_error(fsave)); =20 uint8_t expected[] =3D { @@ -494,8 +467,6 @@ static void test_save_skip(void) =20 static void test_load_noskip(void) { - Error *local_err =3D NULL; - int ret; uint8_t buf[] =3D { 0, 0, 0, 10, /* a */ 0, 0, 0, 20, /* b */ @@ -509,10 +480,7 @@ static void test_load_noskip(void) =20 QEMUFile *loading =3D open_test_file(false); TestStruct obj =3D { .skip_c_e =3D false }; - ret =3D vmstate_load_state(loading, &vmstate_skipping, &obj, 2, &local= _err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(loading, &vmstate_skipping, &obj, 2, &error_abort); g_assert(!qemu_file_get_error(loading)); g_assert_cmpint(obj.a, =3D=3D, 10); g_assert_cmpint(obj.b, =3D=3D, 20); @@ -525,8 +493,6 @@ static void test_load_noskip(void) =20 static void test_load_skip(void) { - Error *local_err =3D NULL; - int ret; uint8_t buf[] =3D { 0, 0, 0, 10, /* a */ 0, 0, 0, 20, /* b */ @@ -538,10 +504,7 @@ static void test_load_skip(void) =20 QEMUFile *loading =3D open_test_file(false); TestStruct obj =3D { .skip_c_e =3D true, .c =3D 300, .e =3D 500 }; - ret =3D vmstate_load_state(loading, &vmstate_skipping, &obj, 2, &local= _err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(loading, &vmstate_skipping, &obj, 2, &error_abort); g_assert(!qemu_file_get_error(loading)); g_assert_cmpint(obj.a, =3D=3D, 10); g_assert_cmpint(obj.b, =3D=3D, 20); @@ -781,8 +744,6 @@ static void test_save_q(void) =20 static void test_load_q(void) { - int ret; - Error *local_err =3D NULL; TestQtailq obj_q =3D { .i16 =3D -512, .i32 =3D 70000, @@ -812,10 +773,7 @@ static void test_load_q(void) TestQtailq tgt; =20 QTAILQ_INIT(&tgt.q); - ret =3D vmstate_load_state(fload, &vmstate_q, &tgt, 1, &local_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(fload, &vmstate_q, &tgt, 1, &error_abort); char eof =3D qemu_get_byte(fload); g_assert(!qemu_file_get_error(fload)); g_assert_cmpint(tgt.i16, =3D=3D, obj_q.i16); @@ -933,29 +891,29 @@ static void destroy_domain(gpointer data) g_free(domain); } =20 -static int domain_preload(void *opaque) +static bool domain_preload(void *opaque, Error **errp) { TestGTreeDomain *domain =3D opaque; =20 domain->mappings =3D g_tree_new_full((GCompareDataFunc)interval_cmp, NULL, g_free, g_free); - return 0; + return true; } =20 -static int iommu_preload(void *opaque) +static bool iommu_preload(void *opaque, Error **errp) { TestGTreeIOMMU *iommu =3D opaque; =20 iommu->domains =3D g_tree_new_full((GCompareDataFunc)int_cmp, NULL, NULL, destroy_domain); - return 0; + return true; } =20 static const VMStateDescription vmstate_domain =3D { .name =3D "domain", .version_id =3D 1, .minimum_version_id =3D 1, - .pre_load =3D domain_preload, + .pre_load_errp =3D domain_preload, .fields =3D (const VMStateField[]) { VMSTATE_INT32(id, TestGTreeDomain), VMSTATE_GTREE_V(mappings, TestGTreeDomain, 1, @@ -991,7 +949,7 @@ static const VMStateDescription vmstate_iommu =3D { .name =3D "iommu", .version_id =3D 1, .minimum_version_id =3D 1, - .pre_load =3D iommu_preload, + .pre_load_errp =3D iommu_preload, .fields =3D (const VMStateField[]) { VMSTATE_INT32(id, TestGTreeIOMMU), VMSTATE_GTREE_DIRECT_KEY_V(domains, TestGTreeIOMMU, 1, @@ -1157,8 +1115,6 @@ static void diff_iommu(TestGTreeIOMMU *iommu1, TestGT= reeIOMMU *iommu2) =20 static void test_gtree_load_domain(void) { - Error *local_err =3D NULL; - int ret; TestGTreeDomain *dest_domain =3D g_new0(TestGTreeDomain, 1); TestGTreeDomain *orig_domain =3D create_first_domain(); QEMUFile *fload, *fsave; @@ -1171,11 +1127,7 @@ static void test_gtree_load_domain(void) =20 fload =3D open_test_file(false); =20 - ret =3D vmstate_load_state(fload, &vmstate_domain, dest_domain, 1, - &local_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(fload, &vmstate_domain, dest_domain, 1, &error_abort= ); eof =3D qemu_get_byte(fload); g_assert(!qemu_file_get_error(fload)); g_assert_cmpint(orig_domain->id, =3D=3D, dest_domain->id); @@ -1278,8 +1230,6 @@ static void test_gtree_save_iommu(void) =20 static void test_gtree_load_iommu(void) { - Error *local_err =3D NULL; - int ret; TestGTreeIOMMU *dest_iommu =3D g_new0(TestGTreeIOMMU, 1); TestGTreeIOMMU *orig_iommu =3D create_iommu(); QEMUFile *fsave, *fload; @@ -1291,10 +1241,7 @@ static void test_gtree_load_iommu(void) qemu_fclose(fsave); =20 fload =3D open_test_file(false); - ret =3D vmstate_load_state(fload, &vmstate_iommu, dest_iommu, 1, &loca= l_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(fload, &vmstate_iommu, dest_iommu, 1, &error_abort); eof =3D qemu_get_byte(fload); g_assert(!qemu_file_get_error(fload)); g_assert_cmpint(orig_iommu->id, =3D=3D, dest_iommu->id); @@ -1416,8 +1363,6 @@ static void test_save_qlist(void) =20 static void test_load_qlist(void) { - Error *local_err =3D NULL; - int ret; QEMUFile *fsave, *fload; TestQListContainer *orig_container =3D alloc_container(); TestQListContainer *dest_container =3D g_new0(TestQListContainer, 1); @@ -1431,11 +1376,8 @@ static void test_load_qlist(void) qemu_fclose(fsave); =20 fload =3D open_test_file(false); - ret =3D vmstate_load_state(fload, &vmstate_container, dest_container, = 1, - &local_err); - if (ret < 0) { - error_report_err(local_err); - } + vmstate_load_vmsd(fload, &vmstate_container, dest_container, 1, + &error_abort); eof =3D qemu_get_byte(fload); g_assert(!qemu_file_get_error(fload)); g_assert_cmpint(eof, =3D=3D, QEMU_VM_EOF); @@ -1452,22 +1394,22 @@ typedef struct TmpTestStruct { int64_t diff; } TmpTestStruct; =20 -static int tmp_child_pre_save(void *opaque) +static bool tmp_child_pre_save(void *opaque, Error **errp) { struct TmpTestStruct *tts =3D opaque; =20 tts->diff =3D tts->parent->b - tts->parent->a; =20 - return 0; + return true; } =20 -static int tmp_child_post_load(void *opaque, int version_id) +static bool tmp_child_post_load(void *opaque, int version_id, Error **errp) { struct TmpTestStruct *tts =3D opaque; =20 tts->parent->b =3D tts->parent->a + tts->diff; =20 - return 0; + return true; } =20 static const VMStateDescription vmstate_tmp_back_to_parent =3D { @@ -1480,8 +1422,8 @@ static const VMStateDescription vmstate_tmp_back_to_p= arent =3D { =20 static const VMStateDescription vmstate_tmp_child =3D { .name =3D "test/tmp_child", - .pre_save =3D tmp_child_pre_save, - .post_load =3D tmp_child_post_load, + .pre_save_errp =3D tmp_child_pre_save, + .post_load_errp =3D tmp_child_post_load, .fields =3D (const VMStateField[]) { VMSTATE_INT64(diff, TmpTestStruct), VMSTATE_STRUCT_POINTER(parent, TmpTestStruct, --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693431; cv=none; d=zohomail.com; s=zohoarc; b=ZPLZxpip0YX8DnzMBRkoK60SJpVQXhZloWIDeyKCjsnOuJaWqXaIquRSwVPOfLfdvx+mLDKrw+JWdCItpZVLUF0m8XEu2dvqjH1pewp3BbNPWZNisbp+XLBQZrhGIZT/yOfL5mXx6mbfxcQZWWNLBeuFsFeg3ObEJobygW/RcTc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693431; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EZgFRHRD0OzlmlPv1yQVuHzPOzY9kMBfHCFRUSxoT20=; b=a1u/RdPHpkm7E/GwuLG0r9FH+caLMe5DPVrxduVMHDzb3MFfPEFCdA7ojTkOxgO4xlv8Da/87pTow9DXnnlxBfSvMWrbHAZvOogxjupvk1tinp0mz0AIt9Q2z9W0rpD1MWiWQiyYERk1neFInDbhXCxDoG7dhhFD0OOgCim6Pyc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693431957558.770417081897; Tue, 28 Oct 2025 16:17:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstI-0002sN-AG; Tue, 28 Oct 2025 19:14:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstG-0002s5-Sp for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:10 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst7-00014V-7x for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:10 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 095A08174E; Wed, 29 Oct 2025 02:13:55 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-SDlcWWZH; Wed, 29 Oct 2025 02:13:54 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693234; bh=EZgFRHRD0OzlmlPv1yQVuHzPOzY9kMBfHCFRUSxoT20=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=y+lJEsuJYbbI9AxRUrFp94119eKIgC4UaADH/VWc1rijssSLwwI4savdwXSve89aJ GLRu+V6tI2oEfehr77FsClOfz48wRdbRjpEDUOaJ9+XsBXFHSvMPK2hKKLnNbY9aaZ caHc1fl8JunphcT0XwTGDmNvcdM4xT6qa1g49ucc= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 04/22] ui/vdagent: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:28 +0300 Message-ID: <20251028231347.194844-5-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693435733158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- ui/vdagent.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/ui/vdagent.c b/ui/vdagent.c index ddb91e75c6..4388e90c0b 100644 --- a/ui/vdagent.c +++ b/ui/vdagent.c @@ -923,7 +923,7 @@ static void vdagent_chr_class_init(ObjectClass *oc, con= st void *data) cc->chr_accept_input =3D vdagent_chr_accept_input; } =20 -static int post_load(void *opaque, int version_id) +static bool post_load(void *opaque, int version_id, Error **errp) { VDAgentChardev *vd =3D QEMU_VDAGENT_CHARDEV(opaque); =20 @@ -935,7 +935,7 @@ static int post_load(void *opaque, int version_id) vdagent_clipboard_peer_register(vd); } =20 - return 0; + return true; } =20 static const VMStateDescription vmstate_chunk =3D { @@ -975,15 +975,16 @@ static const VMStateDescription vmstate_cbinfo_array = =3D { } }; =20 -static int put_cbinfo(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_cbinfo(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { VDAgentChardev *vd =3D QEMU_VDAGENT_CHARDEV(pv); struct CBInfoArray cbinfo =3D {}; int i; =20 if (!have_clipboard(vd)) { - return 0; + return true; } =20 for (i =3D 0; i < QEMU_CLIPBOARD_SELECTION__COUNT; i++) { @@ -992,29 +993,24 @@ static int put_cbinfo(QEMUFile *f, void *pv, size_t s= ize, } } =20 - return vmstate_save_state(f, &vmstate_cbinfo_array, &cbinfo, vmdesc, - &error_fatal); + return vmstate_save_vmsd(f, &vmstate_cbinfo_array, &cbinfo, vmdesc, er= rp); } =20 -static int get_cbinfo(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_cbinfo(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { VDAgentChardev *vd =3D QEMU_VDAGENT_CHARDEV(pv); struct CBInfoArray cbinfo =3D {}; - int i, ret; - Error *local_err =3D NULL; + int i; =20 if (!have_clipboard(vd)) { - return 0; + return true; } =20 vdagent_clipboard_peer_register(vd); =20 - ret =3D vmstate_load_state(f, &vmstate_cbinfo_array, &cbinfo, 0, - &local_err); - if (ret) { - error_report_err(local_err); - return ret; + if (!vmstate_load_vmsd(f, &vmstate_cbinfo_array, &cbinfo, 0, errp)) { + return false; } =20 for (i =3D 0; i < cbinfo.n; i++) { @@ -1025,20 +1021,20 @@ static int get_cbinfo(QEMUFile *f, void *pv, size_t= size, qemu_clipboard_update(info); } =20 - return 0; + return true; } =20 static const VMStateInfo vmstate_cbinfos =3D { .name =3D "vdagent/cbinfos", - .get =3D get_cbinfo, - .put =3D put_cbinfo, + .load =3D load_cbinfo, + .save =3D save_cbinfo, }; =20 static const VMStateDescription vmstate_vdagent =3D { .name =3D "vdagent", .version_id =3D 0, .minimum_version_id =3D 0, - .post_load =3D post_load, + .post_load_errp =3D post_load, .fields =3D (const VMStateField[]) { VMSTATE_BOOL(connected, VDAgentChardev), VMSTATE_UINT32(caps, VDAgentChardev), --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693374; cv=none; d=zohomail.com; s=zohoarc; b=d3W9qDIvPdUvP/q+SVhdDGL6Byyu/DSPiIwYZG6eVuc6y6c+l90H/XsD4GcduyAFQTvAcfddZi5MO9IX1odPU9RK8Bp1T88JbG23REvkLFkHVKpBilo+/frnnKeUjC8jz+cg9LB6NFRQhI5srTVy6WjYM5oA6tx6Y3z9yI5u0xU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693374; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1/MGi/tsP2KZAQxhpYMWKHlovow3Rr/el/C7tdrzP30=; b=YLACtFliGZO9WtKT6hbidl+rT5I2xbgiQ/Tt2cjeJXChkPnErYFlyt+W6HC+ZL/Zey3UGwuIyhXE1QRrK8j93z9aB7mPB2FHxgclirSokwXfdu33lMHu2FqN7ekAv5HL2d8HSIKcOSpYoWyMzKVQajjAtTRiqb6A1uUztUW6fJ4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17616933747971001.3701549751445; Tue, 28 Oct 2025 16:16:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstM-0002uB-UH; Tue, 28 Oct 2025 19:14:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstK-0002tY-TQ for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:15 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst9-00014g-1N for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:14 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id ACB9F81756; Wed, 29 Oct 2025 02:13:55 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-kSdLoIY9; Wed, 29 Oct 2025 02:13:55 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693235; bh=1/MGi/tsP2KZAQxhpYMWKHlovow3Rr/el/C7tdrzP30=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=fJNleDlJvqjIlqmTUqR4UYjOUfRCj11H+nGYeudRI9z7zHQx3E524LxWoNy/tmfxi f9OyJRHpDYYtVlZPlNsFY/QJVdgY4USpqT3T1C0NyZle/3qvFUmNKAwAdZ3bsMRqys LAnR7IKPrpOKobR0yMjyd7PfmXmL5nRPCWU7qfbQ= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 05/22] hw/s390x/virtio-ccw.c: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:29 +0300 Message-ID: <20251028231347.194844-6-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693377916154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/s390x/virtio-ccw.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 4cb1ced001..f456856d42 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -38,7 +38,7 @@ =20 bool have_virtio_ccw =3D true; =20 -static int virtio_ccw_dev_post_load(void *opaque, int version_id) +static bool virtio_ccw_dev_post_load(void *opaque, int version_id, Error *= *errp) { VirtioCcwDevice *dev =3D VIRTIO_CCW_DEVICE(opaque); CcwDevice *ccw_dev =3D CCW_DEVICE(dev); @@ -54,7 +54,7 @@ static int virtio_ccw_dev_post_load(void *opaque, int ver= sion_id) if (ck->refill_ids) { ck->refill_ids(ccw_dev); } - return 0; + return true; } =20 typedef struct VirtioCcwDeviceTmp { @@ -62,7 +62,7 @@ typedef struct VirtioCcwDeviceTmp { uint16_t config_vector; } VirtioCcwDeviceTmp; =20 -static int virtio_ccw_dev_tmp_pre_save(void *opaque) +static bool virtio_ccw_dev_tmp_pre_save(void *opaque, Error **errp) { VirtioCcwDeviceTmp *tmp =3D opaque; VirtioCcwDevice *dev =3D tmp->parent; @@ -70,23 +70,24 @@ static int virtio_ccw_dev_tmp_pre_save(void *opaque) =20 tmp->config_vector =3D vdev->config_vector; =20 - return 0; + return true; } =20 -static int virtio_ccw_dev_tmp_post_load(void *opaque, int version_id) +static bool virtio_ccw_dev_tmp_post_load(void *opaque, int version_id, + Error **errp) { VirtioCcwDeviceTmp *tmp =3D opaque; VirtioCcwDevice *dev =3D tmp->parent; VirtIODevice *vdev =3D virtio_bus_get_device(&dev->bus); =20 vdev->config_vector =3D tmp->config_vector; - return 0; + return true; } =20 const VMStateDescription vmstate_virtio_ccw_dev_tmp =3D { .name =3D "s390_virtio_ccw_dev_tmp", - .pre_save =3D virtio_ccw_dev_tmp_pre_save, - .post_load =3D virtio_ccw_dev_tmp_post_load, + .pre_save_errp =3D virtio_ccw_dev_tmp_pre_save, + .post_load_errp =3D virtio_ccw_dev_tmp_post_load, .fields =3D (const VMStateField[]) { VMSTATE_UINT16(config_vector, VirtioCcwDeviceTmp), VMSTATE_END_OF_LIST() @@ -97,7 +98,7 @@ const VMStateDescription vmstate_virtio_ccw_dev =3D { .name =3D "s390_virtio_ccw_dev", .version_id =3D 1, .minimum_version_id =3D 1, - .post_load =3D virtio_ccw_dev_post_load, + .post_load_errp =3D virtio_ccw_dev_post_load, .fields =3D (const VMStateField[]) { VMSTATE_CCW_DEVICE(parent_obj, VirtioCcwDevice), VMSTATE_PTR_TO_IND_ADDR(indicators, VirtioCcwDevice), @@ -105,7 +106,7 @@ const VMStateDescription vmstate_virtio_ccw_dev =3D { VMSTATE_PTR_TO_IND_ADDR(summary_indicator, VirtioCcwDevice), /* * Ugly hack because VirtIODevice does not migrate itself. - * This also makes legacy via vmstate_save_state possible. + * This also makes legacy via vmstate_save_vmsd possible. */ VMSTATE_WITH_TMP(VirtioCcwDevice, VirtioCcwDeviceTmp, vmstate_virtio_ccw_dev_tmp), @@ -1130,13 +1131,13 @@ static int virtio_ccw_load_queue(DeviceState *d, in= t n, QEMUFile *f) static void virtio_ccw_save_config(DeviceState *d, QEMUFile *f) { VirtioCcwDevice *dev =3D VIRTIO_CCW_DEVICE(d); - vmstate_save_state(f, &vmstate_virtio_ccw_dev, dev, NULL, &error_fatal= ); + vmstate_save_vmsd(f, &vmstate_virtio_ccw_dev, dev, NULL, &error_fatal); } =20 static int virtio_ccw_load_config(DeviceState *d, QEMUFile *f) { VirtioCcwDevice *dev =3D VIRTIO_CCW_DEVICE(d); - return vmstate_load_state(f, &vmstate_virtio_ccw_dev, dev, 1, &error_f= atal); + return vmstate_load_vmsd(f, &vmstate_virtio_ccw_dev, dev, 1, &error_fa= tal); } =20 static void virtio_ccw_pre_plugged(DeviceState *d, Error **errp) --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693433; cv=none; d=zohomail.com; s=zohoarc; b=XJWvqZTK1l+yPBE1kziJXbuBaESJTHbJtSFjnmR+f00QsWKTzZcLhwuCS+q5n27Wvdc7paeo2d6tTHAof6fEm/RmXtxb1HI+nRsXVisjN+HlPWE4efs1JN1Ho9ZrwgWIK8iMMtHUO2UVha5Os6vNDZzv5/fYMJuZiIb4zwzQh+g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693433; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=np7XWMeyfsJTuCib+x7NKEfDLVhTrKKEDFyAgwT/O9A=; b=DnxHzEBGAb3SRiHCeDFeJjy8JxLvGfgsCE20sH67OlXFJBBc+KWNEhknbb+qsuC+6jCGoVi2y9GkmOlH+eI7PZZ2TgnIg7xlOf183dpznV4+GJbodUudzogyYv+GUxQ6QEt65FGFiiTCoQjm7r3l5ok3yYbRPd64Q5GOuZ4r4rE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693433234415.854292144547; Tue, 28 Oct 2025 16:17:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstK-0002tA-3M; Tue, 28 Oct 2025 19:14:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstG-0002s3-Uz for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:10 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst7-000150-1G for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:08 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 433F181758; Wed, 29 Oct 2025 02:13:56 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-HAGtewB3; Wed, 29 Oct 2025 02:13:55 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693235; bh=np7XWMeyfsJTuCib+x7NKEfDLVhTrKKEDFyAgwT/O9A=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=0YjLBJnET45O3W5IHfuXo8l2drf2ALJNmUTy61ABRBkPHb6JpyD3JQ2xpDgMTE1NP 7nnn4rax+zlTPOMHo4TIymwHVVnodo6bKPYTnqbMh05yBjiLtp9uzeM5ugfGbVIYic jYZUojwEhKdWUzTtGU+ifXZZCKTRquRIXO/cfecE= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 06/22] hw/scsi/spapr_vscsi: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:30 +0300 Message-ID: <20251028231347.194844-7-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693435694158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/scsi/spapr_vscsi.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index f0a7dd2b88..55388454af 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -630,7 +630,7 @@ static void vscsi_save_request(QEMUFile *f, SCSIRequest= *sreq) vscsi_req *req =3D sreq->hba_private; assert(req->active); =20 - vmstate_save_state(f, &vmstate_spapr_vscsi_req, req, NULL, &error_fata= l); + vmstate_save_vmsd(f, &vmstate_spapr_vscsi_req, req, NULL, &error_fatal= ); =20 trace_spapr_vscsi_save_request(req->qtag, req->cur_desc_num, req->cur_desc_offset); @@ -641,7 +641,6 @@ static void *vscsi_load_request(QEMUFile *f, SCSIReques= t *sreq) SCSIBus *bus =3D sreq->bus; VSCSIState *s =3D VIO_SPAPR_VSCSI_DEVICE(bus->qbus.parent); vscsi_req *req; - int rc; Error *local_err =3D NULL; =20 assert(sreq->tag < VSCSI_REQ_LIMIT); @@ -649,8 +648,7 @@ static void *vscsi_load_request(QEMUFile *f, SCSIReques= t *sreq) assert(!req->active); =20 memset(req, 0, sizeof(*req)); - rc =3D vmstate_load_state(f, &vmstate_spapr_vscsi_req, req, 1, &local_= err); - if (rc) { + if (!vmstate_load_vmsd(f, &vmstate_spapr_vscsi_req, req, 1, &local_err= )) { fprintf(stderr, "VSCSI: failed loading request tag#%u\n", sreq->ta= g); error_report_err(local_err); return NULL; --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693662; cv=none; d=zohomail.com; s=zohoarc; b=lS/GTHsNh8i9X8I0c1Q43PK7U/UGYbvUn7W4tmFOj7cWaGkeM1y7zcPgtXRFylkawKl4HEpOKDxUA8Ya0xbEzOLlGMi5lSZCvp5nhWVh7slq+GTSDk4RNmFtWeCDgI1I0l2iYiz3m4wTPDJni52jQxBD5+8fah0vDHApGES3qfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693662; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eUNtf8Fv6YhCPh7tMB37uPwoLbYqG4nreTVa98r1+AY=; b=ksgV+qTSqWSubIO5dUCYsbFmJIzKKyfpDymg/67QsMKOnmSngTB+P88Qb5oj/5KQcz7W+c0EnQ2z+Z561hSqCYjF/CAuMqcC3sThRFpHfLEB2k9WUKEn3b24g887VeMpTMIA5aYRhKbi94SIGwA+tzgV9mLmZtherGUjv4pAOyM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693662985270.406538935611; Tue, 28 Oct 2025 16:21:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstN-0002uG-1E; Tue, 28 Oct 2025 19:14:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstJ-0002sS-Ne for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:13 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst7-00015L-Sk for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:11 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id CA6C98175A; Wed, 29 Oct 2025 02:13:56 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-jWYe7vL6; Wed, 29 Oct 2025 02:13:56 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693236; bh=eUNtf8Fv6YhCPh7tMB37uPwoLbYqG4nreTVa98r1+AY=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=1CpmAHDqwQXnBVXWoWDipZfxTgwvrT5+6YW4XkcyXQc95ATqB7EDorf4bY7f4r1i7 OKs1lssa5AYHZYGr5NS++SMHkGkoRjHk4lI42065IQmbPw0Iay1lFPaXunjKk7WIH6 oot4NRUsChZ4S+heL2M8QgLXR1RSs+ISpMUDSvA8= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 07/22] hw/scsi/scsi-bus.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:31 +0300 Message-ID: <20251028231347.194844-8-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693664603158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/scsi/scsi-bus.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index 9b12ee7f1c..d8d4b8ceae 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -1888,18 +1888,19 @@ static void put_scsi_req(SCSIRequest *req, void *op= aque) } } =20 -static int put_scsi_requests(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool put_scsi_requests(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdes= c, + Error **errp) { SCSIDevice *s =3D pv; =20 scsi_device_for_each_req_sync(s, put_scsi_req, f); qemu_put_sbyte(f, 0); - return 0; + return true; } =20 -static int get_scsi_requests(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool get_scsi_requests(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { SCSIDevice *s =3D pv; SCSIBus *bus =3D DO_UPCAST(SCSIBus, qbus, s->qdev.parent_bus); @@ -1938,13 +1939,13 @@ static int get_scsi_requests(QEMUFile *f, void *pv,= size_t size, scsi_req_unref(req); } =20 - return 0; + return true; } =20 static const VMStateInfo vmstate_info_scsi_requests =3D { .name =3D "scsi-requests", - .get =3D get_scsi_requests, - .put =3D put_scsi_requests, + .load =3D get_scsi_requests, + .save =3D put_scsi_requests, }; =20 static bool scsi_sense_state_needed(void *opaque) --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693719; cv=none; d=zohomail.com; s=zohoarc; b=S9+7fRkkTisNgdtV85+NJHB3zo8v2B1A9ZFn9/paljsp3vdqDTUEHsHtad93God2cT7ZBzaUlSNkV0iBCtGEoihA5GcZLg/mIpU39yjdXkyfD01i2tmpuaMyUjUE32n6RcaBrdHVtfMaCvsifKtYK9iYbMU65XAz/tvwTpFoGhU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693719; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2RdqmSqfNG0TgINlHqYz9mlYzWrFLPE9G7i68j2dG0c=; b=awg8xwSZcOP9EbWJSiPElcywaJKS8h5IIpHhp7UTe2z6gHUA9Glw2db4h7HHeZKPzW+OwE/8jh7TzMUFmxFbFYFWTq2UimsDggrtr/0x1todVF5utuwK9gMTds0H6X+dN9zLHHcmS+YmPmih9WDrIWC3HXJFe5rsAZYUfg9Zgjg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693719218207.62446193731273; Tue, 28 Oct 2025 16:21:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstL-0002tX-Aw; Tue, 28 Oct 2025 19:14:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstH-0002sJ-H7 for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:11 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDst8-00015Q-Kx for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:11 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 67C248175B; Wed, 29 Oct 2025 02:13:57 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-hDAe9Lg5; Wed, 29 Oct 2025 02:13:57 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693237; bh=2RdqmSqfNG0TgINlHqYz9mlYzWrFLPE9G7i68j2dG0c=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=WNc3Dh8W5EzfDlgLVcpXALx87a6xHFAvkO/Deny11QE5jE+Wzkpy+9sMz3Cp+Cagt jCb1jOj97Wkw5ssHY5ccZP9ibS8Jgk4jK3oUBYvxGsffYrj5YFdtNBkOP8fvsgxpaV XEb1lZTMQ3RY8AtlKIIyUGMdHJMv/deZFcispRkQ= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 08/22] hw/vfio/pci: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:32 +0300 Message-ID: <20251028231347.194844-9-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693721547154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/vfio/pci.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 8b8bc5a421..152015d2f7 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2821,8 +2821,8 @@ static int vfio_pci_save_config(VFIODevice *vbasedev,= QEMUFile *f, Error **errp) { VFIOPCIDevice *vdev =3D container_of(vbasedev, VFIOPCIDevice, vbasedev= ); =20 - return vmstate_save_state(f, &vmstate_vfio_pci_config, vdev, NULL, - errp); + return vmstate_save_vmsd( + f, &vmstate_vfio_pci_config, vdev, NULL, errp) ? 0 : -EINVAL; } =20 static int vfio_pci_load_config(VFIODevice *vbasedev, QEMUFile *f) @@ -2830,18 +2830,16 @@ static int vfio_pci_load_config(VFIODevice *vbasede= v, QEMUFile *f) VFIOPCIDevice *vdev =3D container_of(vbasedev, VFIOPCIDevice, vbasedev= ); PCIDevice *pdev =3D PCI_DEVICE(vdev); pcibus_t old_addr[PCI_NUM_REGIONS - 1]; - int bar, ret; + int bar; Error *local_err =3D NULL; =20 for (bar =3D 0; bar < PCI_ROM_SLOT; bar++) { old_addr[bar] =3D pdev->io_regions[bar].addr; } =20 - ret =3D vmstate_load_state(f, &vmstate_vfio_pci_config, vdev, 1, - &local_err); - if (ret) { + if (!vmstate_load_vmsd(f, &vmstate_vfio_pci_config, vdev, 1, &local_er= r)) { error_report_err(local_err); - return ret; + return -EINVAL; } =20 vfio_pci_write_config(pdev, PCI_COMMAND, @@ -2865,7 +2863,7 @@ static int vfio_pci_load_config(VFIODevice *vbasedev,= QEMUFile *f) vfio_msix_enable(vdev); } =20 - return ret; + return 0; } =20 /* Transform from VFIODevice to VFIOPCIDevice. Return NULL if fails. */ --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693534; cv=none; d=zohomail.com; s=zohoarc; b=IJDRp6Nnd8MP5QmBXu2VQ3C928tcIW1m6Drt1r/dYqupPBavEhbU5lj2mp/hb9KXRIWZSj8mtt/Fx2s0Nha/XJEEvY7i0rNnwjg2kfLaXUxPpcsmfMDN4fyDAN6GgDEfyh7qkk+K07CpjAap1a453FpSj+yl7ujmQMw7OJLUlHs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693534; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ll76idKmX5Ptpr+6lLa70BZKdy1c2Q/mIS+RNqLYjdY=; b=cvv+4pewSeo5iOUaRUpFSviGKxtH7o2ml+Y6x2QFV4TLkDvn4/Vu5rh61YqR50rmTEmg3/olnncKcWVlCg70qaG1KTKLoBDEO2agSPzaZaLb+6BQmeD3baD+V6iNiuaXJfNanaw+5Of4/8xcLVtDsyj3u4BLjSBYU3ORLfAUn7g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693534966308.18666477114425; Tue, 28 Oct 2025 16:18:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstU-0002wj-E7; Tue, 28 Oct 2025 19:14:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstS-0002wV-Ny for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:22 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstA-00015S-4f for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:22 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 2453281706; Wed, 29 Oct 2025 02:13:58 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-KqnPbGSV; Wed, 29 Oct 2025 02:13:57 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693237; bh=Ll76idKmX5Ptpr+6lLa70BZKdy1c2Q/mIS+RNqLYjdY=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=hcsXQXMjxTzkA4W7Jl3CF+Y/J5SBGZcPgyZWhHi4p8pwW3+zvMuLk1T5r8FvNZlw9 C6Z2W5GxmhbExxIR4Q9YC7UVcJdyDXpKhrp4QLJxcR8Y/uyaGdLAj9fzyCjilBv0gO w1Rn8sI7NVF/YHjP6IDMxBlj+JCFoG6XyFzYAwck= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 09/22] hw/pci/pci: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:33 +0300 Message-ID: <20251028231347.194844-10-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693537196158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/pci/pci.c | 66 +++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index acc03fd470..c66bfd96fa 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -786,8 +786,9 @@ int pci_bus_numa_node(PCIBus *bus) return PCI_BUS_GET_CLASS(bus)->numa_node(bus); } =20 -static int get_pci_config_device(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_pci_config_device(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + Error **errp) { PCIDevice *s =3D container_of(pv, PCIDevice, config); uint8_t *config; @@ -800,12 +801,12 @@ static int get_pci_config_device(QEMUFile *f, void *p= v, size_t size, for (i =3D 0; i < size; ++i) { if ((config[i] ^ s->config[i]) & s->cmask[i] & ~s->wmask[i] & ~s->w1cmask[i]) { - error_report("%s: Bad config data: i=3D0x%x read: %x device: %= x " - "cmask: %x wmask: %x w1cmask:%x", __func__, - i, config[i], s->config[i], - s->cmask[i], s->wmask[i], s->w1cmask[i]); + error_setg(errp, "%s: Bad config data: i=3D0x%x read: %x devic= e: %x " + "cmask: %x wmask: %x w1cmask:%x", __func__, + i, config[i], s->config[i], + s->cmask[i], s->wmask[i], s->w1cmask[i]); g_free(config); - return -EINVAL; + return false; } } memcpy(s->config, config, size); @@ -819,28 +820,30 @@ static int get_pci_config_device(QEMUFile *f, void *p= v, size_t size, & PCI_COMMAND_MASTER); =20 g_free(config); - return 0; + return true; } =20 /* just put buffer */ -static int put_pci_config_device(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vm= desc) +static bool save_pci_config_device(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + JSONWriter *vmdesc, Error **errp) { const uint8_t **v =3D pv; assert(size =3D=3D pci_config_size(container_of(pv, PCIDevice, config)= )); qemu_put_buffer(f, *v, size); =20 - return 0; + return true; } =20 static const VMStateInfo vmstate_info_pci_config =3D { .name =3D "pci config", - .get =3D get_pci_config_device, - .put =3D put_pci_config_device, + .load =3D load_pci_config_device, + .save =3D save_pci_config_device, }; =20 -static int get_pci_irq_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_pci_irq_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + Error **errp) { PCIDevice *s =3D container_of(pv, PCIDevice, irq_state); uint32_t irq_state[PCI_NUM_PINS]; @@ -848,9 +851,9 @@ static int get_pci_irq_state(QEMUFile *f, void *pv, siz= e_t size, for (i =3D 0; i < PCI_NUM_PINS; ++i) { irq_state[i] =3D qemu_get_be32(f); if (irq_state[i] !=3D 0x1 && irq_state[i] !=3D 0) { - fprintf(stderr, "irq state %d: must be 0 or 1.\n", - irq_state[i]); - return -EINVAL; + error_setg(errp, "irq state %d: must be 0 or 1.", + irq_state[i]); + return false; } } =20 @@ -858,11 +861,12 @@ static int get_pci_irq_state(QEMUFile *f, void *pv, s= ize_t size, pci_set_irq_state(s, i, irq_state[i]); } =20 - return 0; + return true; } =20 -static int put_pci_irq_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_pci_irq_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmde= sc, + Error **errp) { int i; PCIDevice *s =3D container_of(pv, PCIDevice, irq_state); @@ -871,13 +875,13 @@ static int put_pci_irq_state(QEMUFile *f, void *pv, s= ize_t size, qemu_put_be32(f, pci_irq_state(s, i)); } =20 - return 0; + return true; } =20 static const VMStateInfo vmstate_info_pci_irq_state =3D { .name =3D "pci irq state", - .get =3D get_pci_irq_state, - .put =3D put_pci_irq_state, + .load =3D load_pci_irq_state, + .save =3D save_pci_irq_state, }; =20 static bool migrate_is_pcie(void *opaque, int version_id) @@ -890,17 +894,17 @@ static bool migrate_is_not_pcie(void *opaque, int ver= sion_id) return !pci_is_express((PCIDevice *)opaque); } =20 -static int pci_post_load(void *opaque, int version_id) +static bool pci_post_load(void *opaque, int version_id, Error **errp) { pcie_sriov_pf_post_load(opaque); - return 0; + return true; } =20 const VMStateDescription vmstate_pci_device =3D { .name =3D "PCIDevice", .version_id =3D 2, .minimum_version_id =3D 1, - .post_load =3D pci_post_load, + .post_load_errp =3D pci_post_load, .fields =3D (const VMStateField[]) { VMSTATE_INT32_POSITIVE_LE(version_id, PCIDevice), VMSTATE_BUFFER_UNSAFE_INFO_TEST(config, PCIDevice, @@ -926,19 +930,17 @@ void pci_device_save(PCIDevice *s, QEMUFile *f) * This makes us compatible with old devices * which never set or clear this bit. */ s->config[PCI_STATUS] &=3D ~PCI_STATUS_INTERRUPT; - vmstate_save_state(f, &vmstate_pci_device, s, NULL, &error_fatal); + vmstate_save_vmsd(f, &vmstate_pci_device, s, NULL, &error_fatal); /* Restore the interrupt status bit. */ pci_update_irq_status(s); } =20 int pci_device_load(PCIDevice *s, QEMUFile *f) { - int ret; - ret =3D vmstate_load_state(f, &vmstate_pci_device, s, s->version_id, - &error_fatal); + vmstate_load_vmsd(f, &vmstate_pci_device, s, s->version_id, &error_fat= al); /* Restore the interrupt status bit. */ pci_update_irq_status(s); - return ret; + return 0; } =20 static void pci_set_default_subsystem_id(PCIDevice *pci_dev) --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693393; cv=none; d=zohomail.com; s=zohoarc; b=UWVObwIFXlBU1Vfllx87duRUCdfTdiWsz9aqkoRPc8V7vTkLQ/WDZUMyHu3hyTUiAXaNIS01Sb6kCgKNJnKGaAX1nsKRg9H0vX5K4P4NcIAqBrjYEuajK1xlDqjscyvYTy2jM/D7WF+BD8fFuD77fy/lIKhrTBdzmjjaPbzUGw0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693393; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=peA71T7i9sOO5KdvHDZvmvhSBq1lY7n/g0KzoECVD0o=; b=jfTbEVIof4Qinl2rZnQGSsZ0I46SGn6IeQHnZTWbBHJOLaOpIYhOhhTuh6a3ZeDFZZdOVuI0J3iw2j4Z2GZ/WKWglJLLsQutLP752VGR6Bki0R8inUong+fNUnNf9bbhWi6dQ+P2zJktZ4dfupZjwi4kQ/sdXeeZDegN7XUoXeM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693392804569.6366209209384; Tue, 28 Oct 2025 16:16:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstS-0002wU-KS; Tue, 28 Oct 2025 19:14:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstP-0002vR-NW for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:19 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstI-00016z-Mc for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:18 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id E109A81755; Wed, 29 Oct 2025 02:13:58 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-RnhBXWm1; Wed, 29 Oct 2025 02:13:58 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693238; bh=peA71T7i9sOO5KdvHDZvmvhSBq1lY7n/g0KzoECVD0o=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Yuhr3aF0dCCoYRl4Gd1l37QWUk5Z0UiIdWjp4Q3GUCP3TsshcSkKtZnOyqZXjdfDI m4/+fVSqowOI6E1Y9yn2YEzVEMlPybu7LSdd7jhom2RqnP+NdM4I+vmcE6u1GFTSwo eNHOZG8dgw37Zw0KOqjgvXCmHt2e7JBjkfZx6+qw= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 10/22] hw/pci/msix.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:34 +0300 Message-ID: <20251028231347.194844-11-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693395865154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/pci/msix.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/hw/pci/msix.c b/hw/pci/msix.c index 8c7f6709e2..b915edf35c 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -679,25 +679,26 @@ void msix_unset_vector_notifiers(PCIDevice *dev) dev->msix_vector_poll_notifier =3D NULL; } =20 -static int put_msix_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool put_msix_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { msix_save(pv, f); =20 - return 0; + return true; } =20 -static int get_msix_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool get_msix_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { msix_load(pv, f); - return 0; + return true; } =20 static const VMStateInfo vmstate_info_msix =3D { .name =3D "msix state", - .get =3D get_msix_state, - .put =3D put_msix_state, + .load =3D get_msix_state, + .save =3D put_msix_state, }; =20 const VMStateDescription vmstate_msix =3D { --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693543; cv=none; d=zohomail.com; s=zohoarc; b=iM96HKXzO8zfEq3prVxUSl45WlIkO0cB9mGFPHzLNpQyPbQc1McOUPEQOr/qRUkjkPw6bpKCobh8e9SAOWWX+ApJ1HciTPnQrU2XTaE2o16wPJ8/GIOhMBvGsY7sPbHPs0CLvrLKlg/9GCpA+0cP7P/4xHSQwCKtK6f7UCEu1PQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693543; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2XoO4sK3PyosnJP9ENpDuxfvkqVmRhLmWENx1ysV1oc=; b=f4Gs7FRK3u19oXBbzbFlfSZlgqFgI7PIXKjwYsPmRgt98TrE4wd3jyU6Wfd9aH2wQGiWx0z0BoBkvOFiMU3yOqm2Q8CPaLHq7BDxDzIsNP60Xel77SITV09vEyoAxkT8xBBbCo0Of1M+dhThSq8pyizcIUGepllZnc91BtCN63U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693543403244.98247916389926; Tue, 28 Oct 2025 16:19:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstY-0002zC-2e; Tue, 28 Oct 2025 19:14:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstW-0002yi-Ib for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:26 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstJ-00016y-LB for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:25 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 8E2DA81762; Wed, 29 Oct 2025 02:13:59 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-2mUnRvaE; Wed, 29 Oct 2025 02:13:59 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693239; bh=2XoO4sK3PyosnJP9ENpDuxfvkqVmRhLmWENx1ysV1oc=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=lky/sMJ1rxIIeo3fifHeTmvSUf9OxxHCAFpOoh+pB8GTrzh+LQgrIhw26VJKVBxrW CErMVZowtxZEPbDkdu5V7y0Rparx+o6EH7Uon5gPjOYf5HHwpTd+LDkZ65v5OQiZSF HwMufkUGOQ67osyDvQIq/+keKaN40Fs0ot84lpjo= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 11/22] hw/pci/shpc.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:35 +0300 Message-ID: <20251028231347.194844-12-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693545767154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/pci/shpc.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/hw/pci/shpc.c b/hw/pci/shpc.c index aac6f2d034..15f79d6bec 100644 --- a/hw/pci/shpc.c +++ b/hw/pci/shpc.c @@ -759,31 +759,35 @@ void shpc_cap_write_config(PCIDevice *d, uint32_t add= r, uint32_t val, int l) shpc_cap_update_dword(d); } =20 -static int shpc_save(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool shpc_save(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { PCIDevice *d =3D container_of(pv, PCIDevice, shpc); qemu_put_buffer(f, d->shpc->config, SHPC_SIZEOF(d)); =20 - return 0; + return true; } =20 -static int shpc_load(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool shpc_load(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { PCIDevice *d =3D container_of(pv, PCIDevice, shpc); int ret =3D qemu_get_buffer(f, d->shpc->config, SHPC_SIZEOF(d)); if (ret !=3D SHPC_SIZEOF(d)) { - return -EINVAL; + error_setg(errp, + "Failed to load SHPC config: expected %d bytes, got %d", + SHPC_SIZEOF(d), ret); + return false; } /* Make sure we don't lose notifications. An extra interrupt is harmle= ss. */ d->shpc->msi_requested =3D 0; shpc_interrupt_update(d); - return 0; + return true; } =20 const VMStateInfo shpc_vmstate_info =3D { .name =3D "shpc", - .get =3D shpc_load, - .put =3D shpc_save, + .load =3D shpc_load, + .save =3D shpc_save, }; --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693368; cv=none; d=zohomail.com; s=zohoarc; b=XE2JrJ72hPUOPMZDXx8o00qxDZt/z7SVVKVPeYPL3zWXZjzHi4efE8HGIc6oZs+eoqTbBISOIlGxOMuNPEUHlCxUQt0S5/ivdzq1gLIaKz5QKUpjU5IZHtdChz0HGbYhrP8/RXMAWPryA9p/sHompmSxPHge+5Gj7Ac9VSc/hnY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693368; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=p+nRtrNPovY55BdLG50N9jkuwP8uMv1quoi1fFi1LL4=; b=NoJGbBjSFy756ZVS7HByEYhLAPqQ48jy2if6RAm8q2Ey/oUKkGCYuFq0YSmCM9jMac7MIORV2jjb9yUiGpGwuJpNDcglHFbVCg5/+cTgcOStgwhPz1TM+P7Pj6Pon0wKEtlSueSKL6vUv16HqsBzGrcfqt8NsixmOS/x9R+yo3o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693368036753.9303382505751; Tue, 28 Oct 2025 16:16:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstW-0002yT-AI; Tue, 28 Oct 2025 19:14:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstT-0002we-Uu for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:24 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstL-00017L-2v for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:23 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 4887F81765; Wed, 29 Oct 2025 02:14:00 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-CMWkYUWR; Wed, 29 Oct 2025 02:13:59 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693239; bh=p+nRtrNPovY55BdLG50N9jkuwP8uMv1quoi1fFi1LL4=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=RKL/BrIqwq6WUN4kJdnyWEOkzi2suqmvqAo22/xkimWjBgbq8GTp7yHY6r4Tj2b6g j/emSDPUlsFf2J3tY8HXnZOpqDrp2geqT3WgUE5iQurLCFh4okIbiEPL3PoB1QEp2x OxlpC3EBHm+OQ0S1s8xjR+kIh/aJbjRbw4waZ/9o= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 12/22] hw/virtio: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:36 +0300 Message-ID: <20251028231347.194844-13-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693371510158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/virtio/vhost-user-fs.c | 65 ++++++++++++++-------------- hw/virtio/virtio-mmio.c | 10 +++-- hw/virtio/virtio-pci.c | 10 +++-- hw/virtio/virtio.c | 78 ++++++++++++++++++++-------------- include/hw/virtio/virtio-bus.h | 4 +- include/hw/virtio/virtio.h | 2 - 6 files changed, 94 insertions(+), 75 deletions(-) diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index e77c69eb12..84a7663ea8 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -306,9 +306,11 @@ static struct vhost_dev *vuf_get_vhost(VirtIODevice *v= dev) /** * Fetch the internal state from virtiofsd and save it to `f`. */ -static int vuf_save_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool vuf_save_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { + ERRP_GUARD(); VirtIODevice *vdev =3D pv; VHostUserFS *fs =3D VHOST_USER_FS(vdev); Error *local_error =3D NULL; @@ -316,39 +318,39 @@ static int vuf_save_state(QEMUFile *f, void *pv, size= _t size, =20 ret =3D vhost_save_backend_state(&fs->vhost_dev, f, &local_error); if (ret < 0) { - error_reportf_err(local_error, - "Error saving back-end state of %s device %s " - "(tag: \"%s\"): ", - vdev->name, vdev->parent_obj.canonical_path, - fs->conf.tag ?: ""); - return ret; + error_prepend(errp, + "Error saving back-end state of %s device %s " + "(tag: \"%s\"): ", + vdev->name, vdev->parent_obj.canonical_path, + fs->conf.tag ?: ""); + return false; } =20 - return 0; + return true; } =20 /** * Load virtiofsd's internal state from `f` and send it over to virtiofsd. */ -static int vuf_load_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool vuf_load_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { + ERRP_GUARD(); VirtIODevice *vdev =3D pv; VHostUserFS *fs =3D VHOST_USER_FS(vdev); - Error *local_error =3D NULL; int ret; =20 - ret =3D vhost_load_backend_state(&fs->vhost_dev, f, &local_error); + ret =3D vhost_load_backend_state(&fs->vhost_dev, f, errp); if (ret < 0) { - error_reportf_err(local_error, - "Error loading back-end state of %s device %s " - "(tag: \"%s\"): ", - vdev->name, vdev->parent_obj.canonical_path, - fs->conf.tag ?: ""); - return ret; + error_prepend(errp, + "Error loading back-end state of %s device %s " + "(tag: \"%s\"): ", + vdev->name, vdev->parent_obj.canonical_path, + fs->conf.tag ?: ""); + return false; } =20 - return 0; + return true; } =20 static bool vuf_is_internal_migration(void *opaque) @@ -357,20 +359,21 @@ static bool vuf_is_internal_migration(void *opaque) return true; } =20 -static int vuf_check_migration_support(void *opaque) +static bool vuf_check_migration_support(void *opaque, Error **errp) { VirtIODevice *vdev =3D opaque; VHostUserFS *fs =3D VHOST_USER_FS(vdev); =20 if (!vhost_supports_device_state(&fs->vhost_dev)) { - error_report("Back-end of %s device %s (tag: \"%s\") does not supp= ort " - "migration through qemu", - vdev->name, vdev->parent_obj.canonical_path, - fs->conf.tag ?: ""); - return -ENOTSUP; + error_setg(errp, + "Back-end of %s device %s (tag: \"%s\") does not suppor= t " + "migration through qemu", + vdev->name, vdev->parent_obj.canonical_path, + fs->conf.tag ?: ""); + return false; } =20 - return 0; + return true; } =20 static const VMStateDescription vuf_backend_vmstate; @@ -392,15 +395,15 @@ static const VMStateDescription vuf_backend_vmstate = =3D { .name =3D "vhost-user-fs-backend", .version_id =3D 0, .needed =3D vuf_is_internal_migration, - .pre_load =3D vuf_check_migration_support, - .pre_save =3D vuf_check_migration_support, + .pre_load_errp =3D vuf_check_migration_support, + .pre_save_errp =3D vuf_check_migration_support, .fields =3D (const VMStateField[]) { { .name =3D "back-end", .info =3D &(const VMStateInfo) { .name =3D "virtio-fs back-end state", - .get =3D vuf_load_state, - .put =3D vuf_save_state, + .load =3D vuf_load_state, + .save =3D vuf_save_state, }, }, VMSTATE_END_OF_LIST() diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c index fb58c36452..9d37ee029b 100644 --- a/hw/virtio/virtio-mmio.c +++ b/hw/virtio/virtio-mmio.c @@ -609,18 +609,20 @@ static const VMStateDescription vmstate_virtio_mmio = =3D { } }; =20 -static void virtio_mmio_save_extra_state(DeviceState *opaque, QEMUFile *f) +static bool virtio_mmio_save_extra_state(DeviceState *opaque, QEMUFile *f, + Error **errp) { VirtIOMMIOProxy *proxy =3D VIRTIO_MMIO(opaque); =20 - vmstate_save_state(f, &vmstate_virtio_mmio, proxy, NULL, &error_fatal); + return vmstate_save_vmsd(f, &vmstate_virtio_mmio, proxy, NULL, errp); } =20 -static int virtio_mmio_load_extra_state(DeviceState *opaque, QEMUFile *f) +static bool virtio_mmio_load_extra_state(DeviceState *opaque, QEMUFile *f, + Error **errp) { VirtIOMMIOProxy *proxy =3D VIRTIO_MMIO(opaque); =20 - return vmstate_load_state(f, &vmstate_virtio_mmio, proxy, 1, &error_fa= tal); + return vmstate_load_vmsd(f, &vmstate_virtio_mmio, proxy, 1, errp); } =20 static bool virtio_mmio_has_extra_state(DeviceState *opaque) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 937e22f08a..95faa84a58 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -184,18 +184,20 @@ static bool virtio_pci_has_extra_state(DeviceState *d) return true; } =20 -static void virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f) +static bool virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f, + Error **errp) { VirtIOPCIProxy *proxy =3D to_virtio_pci_proxy(d); =20 - vmstate_save_state(f, &vmstate_virtio_pci, proxy, NULL, &error_fatal); + return vmstate_save_vmsd(f, &vmstate_virtio_pci, proxy, NULL, errp); } =20 -static int virtio_pci_load_extra_state(DeviceState *d, QEMUFile *f) +static bool virtio_pci_load_extra_state(DeviceState *d, QEMUFile *f, + Error **errp) { VirtIOPCIProxy *proxy =3D to_virtio_pci_proxy(d); =20 - return vmstate_load_state(f, &vmstate_virtio_pci, proxy, 1, &error_fat= al); + return vmstate_load_vmsd(f, &vmstate_virtio_pci, proxy, 1, errp); } =20 static void virtio_pci_save_queue(DeviceState *d, int n, QEMUFile *f) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 153ee0a0cf..36e0493344 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2873,35 +2873,37 @@ static const VMStateDescription vmstate_virtio_ring= size =3D { } }; =20 -static int get_extra_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_extra_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + Error **errp) { VirtIODevice *vdev =3D pv; BusState *qbus =3D qdev_get_parent_bus(DEVICE(vdev)); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); =20 if (!k->load_extra_state) { - return -1; + error_setg(errp, "extra state is unsupported"); + return false; } else { - return k->load_extra_state(qbus->parent, f); + return k->load_extra_state(qbus->parent, f, errp); } } =20 -static int put_extra_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_extra_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { VirtIODevice *vdev =3D pv; BusState *qbus =3D qdev_get_parent_bus(DEVICE(vdev)); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); =20 - k->save_extra_state(qbus->parent, f); - return 0; + return k->save_extra_state(qbus->parent, f, errp); } =20 static const VMStateInfo vmstate_info_extra_state =3D { .name =3D "virtqueue_extra_state", - .get =3D get_extra_state, - .put =3D put_extra_state, + .load =3D load_extra_state, + .save =3D save_extra_state, }; =20 static const VMStateDescription vmstate_virtio_extra_state =3D { @@ -3024,14 +3026,13 @@ static const VMStateDescription vmstate_virtio =3D { } }; =20 -int virtio_save(VirtIODevice *vdev, QEMUFile *f) +static bool virtio_save(VirtIODevice *vdev, QEMUFile *f, Error **errp) { BusState *qbus =3D qdev_get_parent_bus(DEVICE(vdev)); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); VirtioDeviceClass *vdc =3D VIRTIO_DEVICE_GET_CLASS(vdev); uint32_t guest_features_lo =3D (vdev->guest_features & 0xffffffff); int i; - Error *local_err =3D NULL; =20 if (k->save_config) { k->save_config(qbus->parent, f); @@ -3075,39 +3076,54 @@ int virtio_save(VirtIODevice *vdev, QEMUFile *f) } =20 if (vdc->vmsd) { - int ret =3D vmstate_save_state(f, vdc->vmsd, vdev, NULL, &local_er= r); - if (ret) { - error_report_err(local_err); - return ret; + if (!vmstate_save_vmsd(f, vdc->vmsd, vdev, NULL, errp)) { + return false; } } =20 /* Subsections */ - return vmstate_save_state(f, &vmstate_virtio, vdev, NULL, &error_fatal= ); + return vmstate_save_vmsd(f, &vmstate_virtio, vdev, NULL, &error_fatal); } =20 /* A wrapper for use as a VMState .put function */ -static int virtio_device_put(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field, JSONWriter *vmdes= c) +static bool virtio_device_save(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, JSONWriter *vmde= sc, + Error **errp) { - return virtio_save(VIRTIO_DEVICE(opaque), f); + return virtio_save(VIRTIO_DEVICE(opaque), f, errp); } =20 /* A wrapper for use as a VMState .get function */ -static int coroutine_mixed_fn -virtio_device_get(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field) +static bool coroutine_mixed_fn +virtio_device_load(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(opaque); DeviceClass *dc =3D DEVICE_CLASS(VIRTIO_DEVICE_GET_CLASS(vdev)); =20 - return virtio_load(vdev, f, dc->vmsd->version_id); + /* TODO: update virtio_load() to set errp and return bool */ + int ret =3D virtio_load(vdev, f, dc->vmsd->version_id); + + if (ret < 0) { + /* + * Using error_setg_errn or strerror would be incorrect, + * because virtio_load may mix simple -1 with -errno + * values on different paths. + * + * TODO: update virtio_load and all related callbacks + * to "errp + boolean return value" API. + */ + error_setg(errp, "virtio_load failed: %d", ret); + return false; + } + + return true; } =20 const VMStateInfo virtio_vmstate_info =3D { .name =3D "virtio", - .get =3D virtio_device_get, - .put =3D virtio_device_put, + .load =3D virtio_device_load, + .save =3D virtio_device_save, }; =20 static int virtio_set_features_nocheck(VirtIODevice *vdev, const uint64_t = *val) @@ -3387,18 +3403,16 @@ virtio_load(VirtIODevice *vdev, QEMUFile *f, int ve= rsion_id) } =20 if (vdc->vmsd) { - ret =3D vmstate_load_state(f, vdc->vmsd, vdev, version_id, &local_= err); - if (ret) { + if (!vmstate_load_vmsd(f, vdc->vmsd, vdev, version_id, &local_err)= ) { error_report_err(local_err); - return ret; + return -EINVAL; } } =20 /* Subsections */ - ret =3D vmstate_load_state(f, &vmstate_virtio, vdev, 1, &local_err); - if (ret) { + if (!vmstate_load_vmsd(f, &vmstate_virtio, vdev, 1, &local_err)) { error_report_err(local_err); - return ret; + return -EINVAL; } =20 if (vdev->device_endian =3D=3D VIRTIO_DEVICE_ENDIAN_UNKNOWN) { diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h index 7ab8c9dab0..31bf2cd607 100644 --- a/include/hw/virtio/virtio-bus.h +++ b/include/hw/virtio/virtio-bus.h @@ -42,11 +42,11 @@ struct VirtioBusClass { void (*notify)(DeviceState *d, uint16_t vector); void (*save_config)(DeviceState *d, QEMUFile *f); void (*save_queue)(DeviceState *d, int n, QEMUFile *f); - void (*save_extra_state)(DeviceState *d, QEMUFile *f); + bool (*save_extra_state)(DeviceState *d, QEMUFile *f, Error **errp); int (*load_config)(DeviceState *d, QEMUFile *f); int (*load_queue)(DeviceState *d, int n, QEMUFile *f); int (*load_done)(DeviceState *d, QEMUFile *f); - int (*load_extra_state)(DeviceState *d, QEMUFile *f); + bool (*load_extra_state)(DeviceState *d, QEMUFile *f, Error **errp); bool (*has_extra_state)(DeviceState *d); bool (*query_guest_notifiers)(DeviceState *d); int (*set_guest_notifiers)(DeviceState *d, int nvqs, bool assign); diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index d97529c3f1..d729502eca 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -296,8 +296,6 @@ int virtqueue_get_avail_bytes(VirtQueue *vq, unsigned i= nt *in_bytes, =20 void virtio_notify(VirtIODevice *vdev, VirtQueue *vq); =20 -int virtio_save(VirtIODevice *vdev, QEMUFile *f); - extern const VMStateInfo virtio_vmstate_info; =20 #define VMSTATE_VIRTIO_DEVICE \ --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693367; cv=none; d=zohomail.com; s=zohoarc; b=GkCnPa5gmSk7kya+4nfJnPNd1PaorxPazxOjDHFboUu+9j6zo7qCPjv9wXU/PFTKY1AX5CazXy0nPp88OPKjKVGAGUQbzYNFM8C26Zndy6eOvA0YgksjTznxtyqEC51qwhWNEdT0nRfv1xJUXDOhfDSuYSCjikkNbMJOMZp5sac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693367; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ic5f2KC+92lrPpzC+dJc2PdflQkRqcAGO/TiRTlcmX0=; b=YMNdZ+f1kTQEAfC4YKq6P2ggdo/8VbA/FDY4uyOyFLOa2dIVO5F5dQ+2ujABE9lWnyJvdI8tyHluPCfOXdWNmhC7delz/d4F88SMTlKSv/PNIBaHqNhpu3v7hceV62IdF4z5MfVj6wzjNKF2A/PM3P0EU6YlCmhUPxO3UVPLwWc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693367130591.4929481060549; Tue, 28 Oct 2025 16:16:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDsti-00033D-R7; Tue, 28 Oct 2025 19:14:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstd-00031C-BM for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:33 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstM-00017M-LY for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:31 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id F03098175F; Wed, 29 Oct 2025 02:14:00 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-wtiMufGJ; Wed, 29 Oct 2025 02:14:00 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693240; bh=Ic5f2KC+92lrPpzC+dJc2PdflQkRqcAGO/TiRTlcmX0=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=F7rwYa3YBvKa6P25Kr2JZS4imzjPEsL/q3XnXxGm3OorKtxkNXemRTVS2oari73qX pO+W8h0OCfMMsHYhuYjUmZk6xbMeU//MJ7pnrHM810Ds813TEJGgP/9io8YS/L6BXr b1QhyJAbxlNDLDumJBkmIm4xH7i13U397o+ObC9k= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 13/22] hw/display/virtio-gpu: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:37 +0300 Message-ID: <20251028231347.194844-14-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693370416158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/display/virtio-gpu.c | 66 ++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 3a555125be..9356ef391a 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1220,8 +1220,9 @@ static const VMStateDescription vmstate_virtio_gpu_sc= anouts =3D { }, }; =20 -static int virtio_gpu_save(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool virtio_gpu_save(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { VirtIOGPU *g =3D opaque; struct virtio_gpu_simple_resource *res; @@ -1248,8 +1249,7 @@ static int virtio_gpu_save(QEMUFile *f, void *opaque,= size_t size, } qemu_put_be32(f, 0); /* end of list */ =20 - return vmstate_save_state(f, &vmstate_virtio_gpu_scanouts, g, NULL, - &error_fatal); + return vmstate_save_vmsd(f, &vmstate_virtio_gpu_scanouts, g, NULL, err= p); } =20 static bool virtio_gpu_load_restore_mapping(VirtIOGPU *g, @@ -1281,11 +1281,10 @@ static bool virtio_gpu_load_restore_mapping(VirtIOG= PU *g, return true; } =20 -static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field) +static bool virtio_gpu_load(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, Error **errp) { VirtIOGPU *g =3D opaque; - Error *err =3D NULL; struct virtio_gpu_simple_resource *res; uint32_t resource_id, pformat; int i; @@ -1296,7 +1295,8 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque,= size_t size, while (resource_id !=3D 0) { res =3D virtio_gpu_find_resource(g, resource_id); if (res) { - return -EINVAL; + error_setg(errp, "Failed to find resource %" PRIu32, resource_= id); + return false; } =20 res =3D g_new0(struct virtio_gpu_simple_resource, 1); @@ -1310,7 +1310,8 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque,= size_t size, pformat =3D virtio_gpu_get_pixman_format(res->format); if (!pformat) { g_free(res); - return -EINVAL; + error_setg(errp, "Unknown pixman format %" PRIu32, res->format= ); + return false; } =20 res->hostmem =3D calc_image_hostmem(pformat, res->width, res->heig= ht); @@ -1321,10 +1322,9 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque= , size_t size, res->width, res->height, res->height ? res->hostmem / = res->height : 0, - &err)) { - warn_report_err(err); + errp)) { g_free(res); - return -EINVAL; + return false; } =20 res->addrs =3D g_new(uint64_t, res->iov_cnt); @@ -1341,20 +1341,20 @@ static int virtio_gpu_load(QEMUFile *f, void *opaqu= e, size_t size, if (!virtio_gpu_load_restore_mapping(g, res)) { pixman_image_unref(res->image); g_free(res); - return -EINVAL; + error_setg(errp, "Failed to load restore mapping"); + return false; } =20 resource_id =3D qemu_get_be32(f); } =20 /* load & apply scanout state */ - vmstate_load_state(f, &vmstate_virtio_gpu_scanouts, g, 1, &error_fatal= ); - - return 0; + return vmstate_load_vmsd(f, &vmstate_virtio_gpu_scanouts, g, 1, errp); } =20 -static int virtio_gpu_blob_save(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field, JSONWriter *vmd= esc) +static bool virtio_gpu_blob_save(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, JSONWriter *vm= desc, + Error **errp) { VirtIOGPU *g =3D opaque; struct virtio_gpu_simple_resource *res; @@ -1378,11 +1378,11 @@ static int virtio_gpu_blob_save(QEMUFile *f, void *= opaque, size_t size, } qemu_put_be32(f, 0); /* end of list */ =20 - return 0; + return true; } =20 -static int virtio_gpu_blob_load(QEMUFile *f, void *opaque, size_t size, - const VMStateField *field) +static bool virtio_gpu_blob_load(QEMUFile *f, void *opaque, size_t size, + const VMStateField *field, Error **errp) { VirtIOGPU *g =3D opaque; struct virtio_gpu_simple_resource *res; @@ -1422,7 +1422,7 @@ static int virtio_gpu_blob_load(QEMUFile *f, void *op= aque, size_t size, return 0; } =20 -static int virtio_gpu_post_load(void *opaque, int version_id) +static bool virtio_gpu_post_load(void *opaque, int version_id, Error **err= p) { VirtIOGPU *g =3D opaque; struct virtio_gpu_scanout *scanout; @@ -1437,7 +1437,9 @@ static int virtio_gpu_post_load(void *opaque, int ver= sion_id) =20 res =3D virtio_gpu_find_resource(g, scanout->resource_id); if (!res) { - return -EINVAL; + error_setg(errp, "Failed to find resource %" PRIu32, + scanout->resource_id); + return false; } =20 if (scanout->fb.format !=3D 0) { @@ -1450,12 +1452,14 @@ static int virtio_gpu_post_load(void *opaque, int v= ersion_id) }; =20 if (!virtio_gpu_do_set_scanout(g, i, &scanout->fb, res, &r, &e= rror)) { - return -EINVAL; + error_setg(errp, "Failed to set scanout"); + return false; } } else { /* legacy v1 migration support */ if (!res->image) { - return -EINVAL; + error_setg(errp, "No image"); + return false; } scanout->ds =3D qemu_create_displaysurface_pixman(res->image); qemu_displaysurface_set_share_handle(scanout->ds, res->share_h= andle, 0); @@ -1469,7 +1473,7 @@ static int virtio_gpu_post_load(void *opaque, int ver= sion_id) res->scanout_bitmask |=3D (1 << i); } =20 - return 0; + return true; } =20 void virtio_gpu_device_realize(DeviceState *qdev, Error **errp) @@ -1638,8 +1642,8 @@ const VMStateDescription vmstate_virtio_gpu_blob_stat= e =3D { .name =3D "virtio-gpu/blob", .info =3D &(const VMStateInfo) { .name =3D "blob", - .get =3D virtio_gpu_blob_load, - .put =3D virtio_gpu_blob_save, + .load =3D virtio_gpu_blob_load, + .save =3D virtio_gpu_blob_save, }, .flags =3D VMS_SINGLE, } /* device */, @@ -1665,8 +1669,8 @@ static const VMStateDescription vmstate_virtio_gpu = =3D { .name =3D "virtio-gpu", .info =3D &(const VMStateInfo) { .name =3D "virtio-gpu", - .get =3D virtio_gpu_load, - .put =3D virtio_gpu_save, + .load =3D virtio_gpu_load, + .save =3D virtio_gpu_save, }, .flags =3D VMS_SINGLE, } /* device */, @@ -1676,7 +1680,7 @@ static const VMStateDescription vmstate_virtio_gpu = =3D { &vmstate_virtio_gpu_blob_state, NULL }, - .post_load =3D virtio_gpu_post_load, + .post_load_errp =3D virtio_gpu_post_load, }; =20 static const Property virtio_gpu_properties[] =3D { --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693367; cv=none; d=zohomail.com; s=zohoarc; b=Y9AqxB4vpZBPTtXxF0iEmfUHdxy/KA1HQ917x+k9/2G6jhvUVu/TafwHvayQoovdY8zM4OhTqoz/Ks4g32zDB51+mlgLTdJDhvh+mdWMPNisaD+vpnWW1+poxgiYCnaYgwSpzkkv5rM614K0b1pPJSz4Ro7DFceRwgZg96Tp0+I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693367; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=W4FzO8lSWOUPXV+V8oEsi7uae9/GNQt9LV+s1RTTQo8=; b=VOfYF1uUVtS6eTKHcq3SLbM1fZlZnwYDSg0kopTO4B3eQi1yj1gQVWhkh0AAHnszF2Ohr3gdGYKrYmpcaz5IKQLrtaUy0df6fprE6TxhoKn0kN4DYtUsd+jhr4mTUxJ4SMQAT3WZscm+xc8GK3J0WLZxfzYF12Oelb/Jbn7megU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693367405889.7038771507546; Tue, 28 Oct 2025 16:16:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstX-0002z9-F3; Tue, 28 Oct 2025 19:14:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstW-0002yj-JJ for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:26 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstK-00017d-Pe for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:25 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 04E4E8176E; Wed, 29 Oct 2025 02:14:02 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-HHYfGBkN; Wed, 29 Oct 2025 02:14:01 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693241; bh=W4FzO8lSWOUPXV+V8oEsi7uae9/GNQt9LV+s1RTTQo8=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=ugf1XKvz7j/KB31uVvLcl+9OerbmToJtgi1rx1FAVYhXFdhItHtHdrZ3tKdbtge8t woaW11Vx913JKmoem3TSLqkfFPp28ZH7Pi7zAv4B8MoLV+vn9wcbZ6yjPRvR1ZgU9v AVaEMx1Tk9CkqWlB+IJTduA+ItFB6KzHp6qSJNC8= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 14/22] hw/net/virtio-net.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:38 +0300 Message-ID: <20251028231347.194844-15-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693371046158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/net/virtio-net.c | 118 +++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 63 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 33116712eb..23be0e3047 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -3180,7 +3180,8 @@ static void virtio_net_get_features(VirtIODevice *vde= v, uint64_t *features, } } =20 -static int virtio_net_post_load_device(void *opaque, int version_id) +static bool virtio_net_post_load_device(void *opaque, int version_id, + Error **errp) { VirtIONet *n =3D opaque; VirtIODevice *vdev =3D VIRTIO_DEVICE(n); @@ -3243,7 +3244,7 @@ static int virtio_net_post_load_device(void *opaque, = int version_id) } =20 virtio_net_commit_rss_config(n); - return 0; + return true; } =20 static int virtio_net_post_load_virtio(VirtIODevice *vdev) @@ -3309,7 +3310,7 @@ struct VirtIONetMigTmp { * pointer and count and also validate the count. */ =20 -static int virtio_net_tx_waiting_pre_save(void *opaque) +static bool virtio_net_tx_waiting_pre_save(void *opaque, Error **errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 @@ -3319,30 +3320,30 @@ static int virtio_net_tx_waiting_pre_save(void *opa= que) tmp->curr_queue_pairs_1 =3D 0; } =20 - return 0; + return true; } =20 -static int virtio_net_tx_waiting_pre_load(void *opaque) +static bool virtio_net_tx_waiting_pre_load(void *opaque, Error **errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 /* Reuse the pointer setup from save */ - virtio_net_tx_waiting_pre_save(opaque); + virtio_net_tx_waiting_pre_save(opaque, &error_abort); =20 if (tmp->parent->curr_queue_pairs > tmp->parent->max_queue_pairs) { - error_report("virtio-net: curr_queue_pairs %x > max_queue_pairs %x= ", + error_setg(errp, "virtio-net: curr_queue_pairs %x > max_queue_pair= s %x", tmp->parent->curr_queue_pairs, tmp->parent->max_queue_pairs); =20 - return -EINVAL; + return false; } =20 - return 0; /* all good */ + return true; } =20 static const VMStateDescription vmstate_virtio_net_tx_waiting =3D { .name =3D "virtio-net-tx_waiting", - .pre_load =3D virtio_net_tx_waiting_pre_load, - .pre_save =3D virtio_net_tx_waiting_pre_save, + .pre_load_errp =3D virtio_net_tx_waiting_pre_load, + .pre_save_errp =3D virtio_net_tx_waiting_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_STRUCT_VARRAY_POINTER_UINT16(vqs_1, struct VirtIONetMigTmp, curr_queue_pairs_1, @@ -3355,31 +3356,31 @@ static const VMStateDescription vmstate_virtio_net_= tx_waiting =3D { /* the 'has_ufo' flag is just tested; if the incoming stream has the * flag set we need to check that we have it */ -static int virtio_net_ufo_post_load(void *opaque, int version_id) +static bool virtio_net_ufo_post_load(void *opaque, int version_id, Error *= *errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 if (tmp->has_ufo && !peer_has_ufo(tmp->parent)) { - error_report("virtio-net: saved image requires TUN_F_UFO support"); - return -EINVAL; + error_setg(errp, "virtio-net: saved image requires TUN_F_UFO suppo= rt"); + return false; } =20 - return 0; + return true; } =20 -static int virtio_net_ufo_pre_save(void *opaque) +static bool virtio_net_ufo_pre_save(void *opaque, Error **errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 tmp->has_ufo =3D tmp->parent->has_ufo; =20 - return 0; + return true; } =20 static const VMStateDescription vmstate_virtio_net_has_ufo =3D { .name =3D "virtio-net-ufo", - .post_load =3D virtio_net_ufo_post_load, - .pre_save =3D virtio_net_ufo_pre_save, + .post_load_errp =3D virtio_net_ufo_post_load, + .pre_save_errp =3D virtio_net_ufo_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_UINT8(has_ufo, struct VirtIONetMigTmp), VMSTATE_END_OF_LIST() @@ -3389,38 +3390,39 @@ static const VMStateDescription vmstate_virtio_net_= has_ufo =3D { /* the 'has_vnet_hdr' flag is just tested; if the incoming stream has the * flag set we need to check that we have it */ -static int virtio_net_vnet_post_load(void *opaque, int version_id) +static bool virtio_net_vnet_post_load(void *opaque, int version_id, + Error **errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 if (tmp->has_vnet_hdr && !peer_has_vnet_hdr(tmp->parent)) { - error_report("virtio-net: saved image requires vnet_hdr=3Don"); - return -EINVAL; + error_setg(errp, "virtio-net: saved image requires vnet_hdr=3Don"); + return false; } =20 - return 0; + return true; } =20 -static int virtio_net_vnet_pre_save(void *opaque) +static bool virtio_net_vnet_pre_save(void *opaque, Error **errp) { struct VirtIONetMigTmp *tmp =3D opaque; =20 tmp->has_vnet_hdr =3D tmp->parent->has_vnet_hdr; =20 - return 0; + return true; } =20 static const VMStateDescription vmstate_virtio_net_has_vnet =3D { .name =3D "virtio-net-vnet", - .post_load =3D virtio_net_vnet_post_load, - .pre_save =3D virtio_net_vnet_pre_save, + .post_load_errp =3D virtio_net_vnet_post_load, + .pre_save_errp =3D virtio_net_vnet_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_UINT32(has_vnet_hdr, struct VirtIONetMigTmp), VMSTATE_END_OF_LIST() }, }; =20 -static int virtio_net_rss_post_load(void *opaque, int version_id) +static bool virtio_net_rss_post_load(void *opaque, int version_id, Error *= *errp) { VirtIONet *n =3D VIRTIO_NET(opaque); =20 @@ -3428,7 +3430,7 @@ static int virtio_net_rss_post_load(void *opaque, int= version_id) n->rss_data.supported_hash_types =3D VIRTIO_NET_RSS_SUPPORTED_HASH= ES; } =20 - return 0; + return true; } =20 static bool virtio_net_rss_needed(void *opaque) @@ -3440,7 +3442,7 @@ static const VMStateDescription vmstate_virtio_net_rs= s =3D { .name =3D "virtio-net-device/rss", .version_id =3D 2, .minimum_version_id =3D 1, - .post_load =3D virtio_net_rss_post_load, + .post_load_errp =3D virtio_net_rss_post_load, .needed =3D virtio_net_rss_needed, .fields =3D (const VMStateField[]) { VMSTATE_BOOL(rss_data.enabled, VirtIONet), @@ -3482,61 +3484,51 @@ static struct vhost_dev *virtio_net_get_vhost(VirtI= ODevice *vdev) return &net->dev; } =20 -static int vhost_user_net_save_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, - JSONWriter *vmdesc) +static bool vhost_user_net_save_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + JSONWriter *vmdesc, Error **errp) { VirtIONet *n =3D pv; VirtIODevice *vdev =3D VIRTIO_DEVICE(n); struct vhost_dev *vhdev; - Error *local_error =3D NULL; int ret; =20 vhdev =3D virtio_net_get_vhost(vdev); if (vhdev =3D=3D NULL) { - error_reportf_err(local_error, - "Error getting vhost back-end of %s device %s: ", - vdev->name, vdev->parent_obj.canonical_path); - return -1; + error_setg(errp, "Error getting vhost back-end of %s device %s", + vdev->name, vdev->parent_obj.canonical_path); + return false; } =20 - ret =3D vhost_save_backend_state(vhdev, f, &local_error); + ret =3D vhost_save_backend_state(vhdev, f, errp); if (ret < 0) { - error_reportf_err(local_error, - "Error saving back-end state of %s device %s: ", - vdev->name, vdev->parent_obj.canonical_path); - return ret; + return false; } =20 - return 0; + return true; } =20 -static int vhost_user_net_load_state(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool vhost_user_net_load_state(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **e= rrp) { VirtIONet *n =3D pv; VirtIODevice *vdev =3D VIRTIO_DEVICE(n); struct vhost_dev *vhdev; - Error *local_error =3D NULL; int ret; =20 vhdev =3D virtio_net_get_vhost(vdev); if (vhdev =3D=3D NULL) { - error_reportf_err(local_error, - "Error getting vhost back-end of %s device %s: ", - vdev->name, vdev->parent_obj.canonical_path); - return -1; + error_setg(errp, "Error getting vhost back-end of %s device %s", + vdev->name, vdev->parent_obj.canonical_path); + return false; } =20 - ret =3D vhost_load_backend_state(vhdev, f, &local_error); + ret =3D vhost_load_backend_state(vhdev, f, errp); if (ret < 0) { - error_reportf_err(local_error, - "Error loading back-end state of %s device %s: = ", - vdev->name, vdev->parent_obj.canonical_path); - return ret; + return false; } =20 - return 0; + return true; } =20 static bool vhost_user_net_is_internal_migration(void *opaque) @@ -3562,8 +3554,8 @@ static const VMStateDescription vhost_user_net_backen= d_state =3D { .name =3D "backend", .info =3D &(const VMStateInfo) { .name =3D "virtio-net vhost-user backend state", - .get =3D vhost_user_net_load_state, - .put =3D vhost_user_net_save_state, + .load =3D vhost_user_net_load_state, + .save =3D vhost_user_net_save_state, }, }, VMSTATE_END_OF_LIST() @@ -3574,7 +3566,7 @@ static const VMStateDescription vmstate_virtio_net_de= vice =3D { .name =3D "virtio-net-device", .version_id =3D VIRTIO_NET_VM_VERSION, .minimum_version_id =3D VIRTIO_NET_VM_VERSION, - .post_load =3D virtio_net_post_load_device, + .post_load_errp =3D virtio_net_post_load_device, .fields =3D (const VMStateField[]) { VMSTATE_UINT8_ARRAY(mac, VirtIONet, ETH_ALEN), VMSTATE_STRUCT_POINTER(vqs, VirtIONet, @@ -4144,7 +4136,7 @@ static void virtio_net_instance_init(Object *obj) ebpf_rss_init(&n->ebpf_rss); } =20 -static int virtio_net_pre_save(void *opaque) +static bool virtio_net_pre_save(void *opaque, Error **errp) { VirtIONet *n =3D opaque; =20 @@ -4152,7 +4144,7 @@ static int virtio_net_pre_save(void *opaque) * it might keep writing to memory. */ assert(!n->vhost_started); =20 - return 0; + return true; } =20 static bool primary_unplug_pending(void *opaque) @@ -4185,7 +4177,7 @@ static const VMStateDescription vmstate_virtio_net = =3D { VMSTATE_VIRTIO_DEVICE, VMSTATE_END_OF_LIST() }, - .pre_save =3D virtio_net_pre_save, + .pre_save_errp =3D virtio_net_pre_save, .dev_unplug_pending =3D dev_unplug_pending, }; =20 --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693593; cv=none; d=zohomail.com; s=zohoarc; b=YZY9bWPqIuIxrG57G7icRXgb5bHiPS0ofxo0XPzxfOj/8xCyFqPIY/BV0lprnfolrFn4RR3x7GANS2aAv2IqXXEPxjVW30W6gn07T/lPP4xJAhgzZ2YE6RcvVoPfzeI1HLW11XgYUtwVC/2Xgk2LSOllnWsnHQVLnwI6HX9dzpA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693593; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Fqa9PzaB2NaxsEUcFr/1/+bAl7RDY45zxrOOs/iPfxI=; b=D/8ufeLsq0d1t2/6xVxmIVappFYFqyMTLrYksXVJhRl0ipNbQXcyreRCDQo/CyJMyil6ssFJbgzaJuEuxftokEcmO+BL6GNheOtvsbs+QVjlGt9/xLdUniU22qlZPOrV/GItO4B3LFrJot+6ALRTMit0mgBnbr8pOynTFWYGR9o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17616935936706.637479537568652; Tue, 28 Oct 2025 16:19:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstj-00033I-U4; Tue, 28 Oct 2025 19:14:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstf-00031v-7V for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:35 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstO-000181-CC for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:33 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 9283781770; Wed, 29 Oct 2025 02:14:02 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-W0bfPDEB; Wed, 29 Oct 2025 02:14:02 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693242; bh=Fqa9PzaB2NaxsEUcFr/1/+bAl7RDY45zxrOOs/iPfxI=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=f8+CtqryyizCzQFk1xdEJKVZwE0XbAz7Sb9Q+iyKFeNztPKQUuaRmszvfo3L7r1Y5 g45sP7h0Ic6ZG+bEK5tCO1aVsc2MG/N3aSXlKJXzG/gzWDIXvWhDp4HXl9EhALD2F9 E/r3IBi7TWbyMQ4H+2bMdUesxoB1K88bU8eUygzs= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 15/22] hw/nvram/eeprom93xx.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:39 +0300 Message-ID: <20251028231347.194844-16-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693597738158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/nvram/eeprom93xx.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/hw/nvram/eeprom93xx.c b/hw/nvram/eeprom93xx.c index a8fd60a8fb..32dab854fa 100644 --- a/hw/nvram/eeprom93xx.c +++ b/hw/nvram/eeprom93xx.c @@ -39,6 +39,7 @@ #include "hw/nvram/eeprom93xx.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" +#include "qapi/error.h" =20 /* Debug EEPROM emulation. */ //~ #define DEBUG_EEPROM @@ -95,28 +96,28 @@ struct _eeprom_t { This is a Big hack, but it is how the old state did it. */ =20 -static int get_uint16_from_uint8(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool get_uint16_from_uint8(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint16_t *v =3D pv; *v =3D qemu_get_ubyte(f); - return 0; + return true; } =20 -static int put_unused(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool put_unused(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { - fprintf(stderr, "uint16_from_uint8 is used only for backwards compatib= ility.\n"); - fprintf(stderr, "Never should be used to write a new state.\n"); - exit(0); - - return 0; + error_setg(errp, + "uint16_from_uint8 is used only for backwards compatibility= . " + "Never should be used to write a new state."); + return false; } =20 static const VMStateInfo vmstate_hack_uint16_from_uint8 =3D { .name =3D "uint16_from_uint8", - .get =3D get_uint16_from_uint8, - .put =3D put_unused, + .load =3D get_uint16_from_uint8, + .save =3D put_unused, }; =20 #define VMSTATE_UINT16_HACK_TEST(_f, _s, _t) \ --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693484; cv=none; d=zohomail.com; s=zohoarc; b=XI8kX2VBYyt1kTHGiqhAyRksZLfdYanlReD+KmXm69HNu7jw8JHESBPbb0YeR9FVNosEKcCfuRHChR2IDuj+UKMh5BG6H0ZlUaR4Aec72eyn4aflBH3imodao3mig0pdLvijRy2D5DFMml7a837F2np2LQhjs6WDaZGAz8HDnQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693484; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FJe9bBDqhj2CZOs8zGPWoZRXXGpH1eDzzeZX4vIEKoE=; b=nVohUXNRxnViVYoS/5JWFdHO2WXshMB7oa3OGZ/RwvidRr+/Y/NKoTiYsgSvQJDEA+1SpI7EsMQcqGFEx40CyHBMHFG1ob8VMwkk2V3SvJdTNpL7weHs19Sqc0S4+vtmkuAev/eN4KFfpwbwfPwv+7IggM+Y8S+02zC6P/3zTM8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693484943205.6479324577217; Tue, 28 Oct 2025 16:18:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstc-00031A-BC; Tue, 28 Oct 2025 19:14:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstZ-0002zy-Jc for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:29 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstL-000182-RN for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:29 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 4DCB781753; Wed, 29 Oct 2025 02:14:03 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-2KUF3LFw; Wed, 29 Oct 2025 02:14:02 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693243; bh=FJe9bBDqhj2CZOs8zGPWoZRXXGpH1eDzzeZX4vIEKoE=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=WvdEhIttMn2vNqBnoLrt3/vZmwkbiWezFgw26R+rw07XPNiIpgDeTEBoMUh/ExTos Kt+Mc32ACm+a2TotEx5pNTn9N/QOH4eD28kNKy9GT9JCENMRbzQkEWtCMih7ZObLuQ lecquitGHeyvx3wZ9Em3Z09iOYvKxMMj3exPmqlM= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 16/22] hw/nvram/fw_cfg.c: use new migration APIs Date: Wed, 29 Oct 2025 02:13:40 +0300 Message-ID: <20251028231347.194844-17-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693486366158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/nvram/fw_cfg.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index aa24050493..d02e5802cd 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -565,27 +565,28 @@ static void fw_cfg_reset(DeviceState *d) Or we broke compatibility in the state, or we can't use struct tm */ =20 -static int get_uint32_as_uint16(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool get_uint32_as_uint16(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint32_t *v =3D pv; *v =3D qemu_get_be16(f); - return 0; + return true; } =20 -static int put_unused(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool put_unused(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { - fprintf(stderr, "uint32_as_uint16 is only used for backward compatibil= ity.\n"); - fprintf(stderr, "This functions shouldn't be called.\n"); - - return 0; + error_setg(errp, + "uint32_as_uint16 is only used for backward compatibility. " + "This function shouldn't be called."); + return false; } =20 static const VMStateInfo vmstate_hack_uint32_as_uint16 =3D { .name =3D "int32_as_uint16", - .get =3D get_uint32_as_uint16, - .put =3D put_unused, + .load =3D get_uint32_as_uint16, + .save =3D put_unused, }; =20 #define VMSTATE_UINT16_HACK(_f, _s, _t) = \ @@ -631,7 +632,8 @@ static void fw_cfg_update_mr(FWCfgState *s, uint16_t ke= y, size_t size) memory_region_ram_resize(mr, size, &error_abort); } =20 -static int fw_cfg_acpi_mr_restore_post_load(void *opaque, int version_id) +static bool fw_cfg_acpi_mr_restore_post_load(void *opaque, int version_id, + Error **errp) { FWCfgState *s =3D opaque; int i, index; @@ -650,7 +652,7 @@ static int fw_cfg_acpi_mr_restore_post_load(void *opaqu= e, int version_id) } } =20 - return 0; + return true; } =20 static const VMStateDescription vmstate_fw_cfg_dma =3D { @@ -667,7 +669,7 @@ static const VMStateDescription vmstate_fw_cfg_acpi_mr = =3D { .version_id =3D 1, .minimum_version_id =3D 1, .needed =3D fw_cfg_acpi_mr_restore, - .post_load =3D fw_cfg_acpi_mr_restore_post_load, + .post_load_errp =3D fw_cfg_acpi_mr_restore_post_load, .fields =3D (const VMStateField[]) { VMSTATE_UINT64(table_mr_size, FWCfgState), VMSTATE_UINT64(linker_mr_size, FWCfgState), --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693364; cv=none; d=zohomail.com; s=zohoarc; b=FIQ7LSPxzXidxEZYn1QfLK+C4jeMan3z003jm9+Iksu0xbSdZrLgAWCCIwPTxSXM2h0L2hQVnMeh2E6lmoy/ZiA4ivqLkQXhPF6Q9N4lb77nbwsXvC5l+nQ0iDYukMPH4SnFcsy86xQuXlX4o6s9T2IVWGq/uiF5trWs0MN0iYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693364; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZFgV8LSqGvshmmzDjsgrPq5Un6VZfE1YlTpXK2OqD6g=; b=HN1UAcuPBI5LIuf+tc+M76C6erXf+w3XgYZLp0WVnPM0UwIgAzwdXXY2ofcSiSmCDq3tuoV9zEZjK75UEe4q+76O5Fl+faPJxTxs72Bi1B5GzwDRaoZf/qGBP7LDLPZxZDCvtFy1iP4sLWH7Jp0sRFDozw/IPzwEztbjdnKvzfE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693364154385.15885470803437; Tue, 28 Oct 2025 16:16:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDste-00031w-Ap; Tue, 28 Oct 2025 19:14:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDsta-000308-2I for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:30 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstM-00017j-0R for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:29 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 04FE281769; Wed, 29 Oct 2025 02:14:04 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-BtA4HKAb; Wed, 29 Oct 2025 02:14:03 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693243; bh=ZFgV8LSqGvshmmzDjsgrPq5Un6VZfE1YlTpXK2OqD6g=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=wnZQgMS8XpHZ1SmrRO57vEULX1e/8gr+/WI4/BYmIwx5k8Jx8fYwYB+mLbR85NdAh K6PA8gnfTHiLRuRMkJ+Farkap96AcDQ3lk2i529HlFo6DGDW+RllHlQSSRUOebxmVL myxsJO6noQj8+u51TdKrPA1AFPhW5Nks1JE0dwqE= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 17/22] migration/cpr: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:41 +0300 Message-ID: <20251028231347.194844-18-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693369549154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/migration/cpr.h | 4 ++-- migration/cpr.c | 32 ++++++++++++++------------------ migration/migration.c | 2 +- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index a412d6663c..f930fdb5b0 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -41,8 +41,8 @@ MigMode cpr_get_incoming_mode(void); void cpr_set_incoming_mode(MigMode mode); bool cpr_is_incoming(void); =20 -int cpr_state_save(MigrationChannel *channel, Error **errp); -int cpr_state_load(MigrationChannel *channel, Error **errp); +bool cpr_state_save(MigrationChannel *channel, Error **errp); +bool cpr_state_load(MigrationChannel *channel, Error **errp); void cpr_state_close(void); struct QIOChannel *cpr_state_ioc(void); =20 diff --git a/migration/cpr.c b/migration/cpr.c index 22dbac7c72..b8d6c0cead 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -176,9 +176,8 @@ bool cpr_is_incoming(void) return incoming_mode !=3D MIG_MODE_NONE; } =20 -int cpr_state_save(MigrationChannel *channel, Error **errp) +bool cpr_state_save(MigrationChannel *channel, Error **errp) { - int ret; QEMUFile *f; MigMode mode =3D migrate_mode(); =20 @@ -190,19 +189,18 @@ int cpr_state_save(MigrationChannel *channel, Error *= *errp) } else if (mode =3D=3D MIG_MODE_CPR_EXEC) { f =3D cpr_exec_output(errp); } else { - return 0; + return true; } if (!f) { - return -1; + return false; } =20 qemu_put_be32(f, QEMU_CPR_FILE_MAGIC); qemu_put_be32(f, QEMU_CPR_FILE_VERSION); =20 - ret =3D vmstate_save_state(f, &vmstate_cpr_state, &cpr_state, 0, errp); - if (ret) { + if (!vmstate_save_vmsd(f, &vmstate_cpr_state, &cpr_state, 0, errp)) { qemu_fclose(f); - return ret; + return false; } =20 if (migrate_mode() =3D=3D MIG_MODE_CPR_EXEC) { @@ -217,12 +215,11 @@ int cpr_state_save(MigrationChannel *channel, Error *= *errp) qio_channel_shutdown(qemu_file_get_ioc(f), QIO_CHANNEL_SHUTDOWN_WRITE, NULL); cpr_state_file =3D f; - return 0; + return true; } =20 -int cpr_state_load(MigrationChannel *channel, Error **errp) +bool cpr_state_load(MigrationChannel *channel, Error **errp) { - int ret; uint32_t v; QEMUFile *f; MigMode mode =3D 0; @@ -238,10 +235,10 @@ int cpr_state_load(MigrationChannel *channel, Error *= *errp) cpr_set_incoming_mode(mode); f =3D cpr_transfer_input(channel, errp); } else { - return 0; + return true; } if (!f) { - return -1; + return false; } =20 trace_cpr_state_load(MigMode_str(mode)); @@ -251,19 +248,18 @@ int cpr_state_load(MigrationChannel *channel, Error *= *errp) if (v !=3D QEMU_CPR_FILE_MAGIC) { error_setg(errp, "Not a migration stream (bad magic %x)", v); qemu_fclose(f); - return -EINVAL; + return false; } v =3D qemu_get_be32(f); if (v !=3D QEMU_CPR_FILE_VERSION) { error_setg(errp, "Unsupported migration stream version %d", v); qemu_fclose(f); - return -ENOTSUP; + return false; } =20 - ret =3D vmstate_load_state(f, &vmstate_cpr_state, &cpr_state, 1, errp); - if (ret) { + if (!vmstate_load_vmsd(f, &vmstate_cpr_state, &cpr_state, 1, errp)) { qemu_fclose(f); - return ret; + return false; } =20 if (migrate_mode() =3D=3D MIG_MODE_CPR_EXEC) { @@ -277,7 +273,7 @@ int cpr_state_load(MigrationChannel *channel, Error **e= rrp) */ cpr_state_file =3D f; =20 - return ret; + return true; } =20 void cpr_state_close(void) diff --git a/migration/migration.c b/migration/migration.c index a63b46bbef..c8a5712993 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2301,7 +2301,7 @@ void qmp_migrate(const char *uri, bool has_channels, return; } =20 - if (cpr_state_save(cpr_channel, &local_err)) { + if (!cpr_state_save(cpr_channel, &local_err)) { goto out; } =20 --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693665; cv=none; d=zohomail.com; s=zohoarc; b=F1vlPwgzlS/bzZpeDCi5eyn9GEYr4txFK194bubznjmk1THFBRf6y55qLwSUL5gJnud9SIEOo8BCKIkdFE1iSLJV09fjKP9YXyCv5YG+fRQ0mZjfT5/OrDi1NFBE12DmPBhmNRqeZ8KEX4IK9qV4/iAHTDpg/ja8WgxPUFe/K0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693665; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+knwUWedSlJ+bK+l2EihRlaK7GqDMvgSpwZc7/hhY3I=; b=ZsrTNuBgK22+5HI6uIRd7htg1edItXRIEDPWg11+3CXS5GxaeUy0wG7GVhwSckQ7PLqvoLpsG8n/mHy6YVx7yau280CovxqiKxVNS08PmAzOoUlr5w+8E3ww2941+oxXSlBhUUsCUp+zz5F9CLkp16US3VbXJbezGiXsPkP9cSY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693665717941.8750198089214; Tue, 28 Oct 2025 16:21:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDsu5-00038Q-9w; Tue, 28 Oct 2025 19:15:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstu-00037T-4Y for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:50 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstZ-00018J-M2 for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:49 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id ACEF08177A; Wed, 29 Oct 2025 02:14:04 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-VelCEPAQ; Wed, 29 Oct 2025 02:14:04 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693244; bh=+knwUWedSlJ+bK+l2EihRlaK7GqDMvgSpwZc7/hhY3I=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=KikwEammD27/em0yhEXxLPq6hnnG8tqY0kkdA38skcA1/D77hrmMyIJWEMMVzKepH hC2vkVcEQBIOss2+pP1/MwKOttM5ikvqcp3h/PImk8bqIfBtaRx4i4JS6GXe8DUgvp 7klJ8qsCvWVMKG/CLBGz0ohkxKqLxXXVycp7QkJw= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 18/22] migration/savevm: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:42 +0300 Message-ID: <20251028231347.194844-19-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693670310158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- migration/savevm.c | 108 +++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 7b35ec4dd0..e2681880f0 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -205,27 +205,28 @@ void timer_get(QEMUFile *f, QEMUTimer *ts) * Not in vmstate.c to not add qemu-timer.c as dependency to vmstate.c */ =20 -static int get_timer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_timer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { QEMUTimer *v =3D pv; timer_get(f, v); - return 0; + return true; } =20 -static int put_timer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_timer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { QEMUTimer *v =3D pv; timer_put(f, v); =20 - return 0; + return true; } =20 const VMStateInfo vmstate_info_timer =3D { .name =3D "timer", - .get =3D get_timer, - .put =3D put_timer, + .load =3D load_timer, + .save =3D save_timer, }; =20 =20 @@ -298,7 +299,7 @@ static uint32_t get_validatable_capabilities_count(void) return result; } =20 -static int configuration_pre_save(void *opaque) +static bool configuration_pre_save(void *opaque, Error **errp) { SaveState *state =3D opaque; const char *current_name =3D MACHINE_GET_CLASS(current_machine)->name; @@ -319,7 +320,7 @@ static int configuration_pre_save(void *opaque) } state->uuid =3D qemu_uuid; =20 - return 0; + return true; } =20 static int configuration_post_save(void *opaque) @@ -332,7 +333,7 @@ static int configuration_post_save(void *opaque) return 0; } =20 -static int configuration_pre_load(void *opaque) +static bool configuration_pre_load(void *opaque, Error **errp) { SaveState *state =3D opaque; =20 @@ -341,7 +342,7 @@ static int configuration_pre_load(void *opaque) * minimum possible value for this CPU. */ state->target_page_bits =3D migration_legacy_page_bits(); - return 0; + return true; } =20 static bool configuration_validate_capabilities(SaveState *state) @@ -378,28 +379,31 @@ static bool configuration_validate_capabilities(SaveS= tate *state) return ret; } =20 -static int configuration_post_load(void *opaque, int version_id) +static bool configuration_post_load(void *opaque, int version_id, Error **= errp) { SaveState *state =3D opaque; const char *current_name =3D MACHINE_GET_CLASS(current_machine)->name; - int ret =3D 0; + bool ok =3D true; =20 if (strncmp(state->name, current_name, state->len) !=3D 0) { - error_report("Machine type received is '%.*s' and local is '%s'", - (int) state->len, state->name, current_name); - ret =3D -EINVAL; + error_setg(errp, + "Machine type received is '%.*s' and local is '%s'", + (int) state->len, state->name, current_name); + ok =3D false; goto out; } =20 if (state->target_page_bits !=3D qemu_target_page_bits()) { - error_report("Received TARGET_PAGE_BITS is %d but local is %d", - state->target_page_bits, qemu_target_page_bits()); - ret =3D -EINVAL; + error_setg(errp, + "Received TARGET_PAGE_BITS is %d but local is %d", + state->target_page_bits, qemu_target_page_bits()); + ok =3D false; goto out; } =20 if (!configuration_validate_capabilities(state)) { - ret =3D -EINVAL; + error_setg(errp, "Failed to validate capabilities"); + ok =3D false; goto out; } =20 @@ -411,11 +415,12 @@ out: state->capabilities =3D NULL; state->caps_count =3D 0; =20 - return ret; + return ok; } =20 -static int get_capability(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_capability(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, + Error **errp) { MigrationCapability *capability =3D pv; char capability_str[UINT8_MAX + 1]; @@ -428,15 +433,16 @@ static int get_capability(QEMUFile *f, void *pv, size= _t size, for (i =3D 0; i < MIGRATION_CAPABILITY__MAX; i++) { if (!strcmp(MigrationCapability_str(i), capability_str)) { *capability =3D i; - return 0; + return true; } } - error_report("Received unknown capability %s", capability_str); - return -EINVAL; + error_setg(errp, "Received unknown capability %s", capability_str); + return false; } =20 -static int put_capability(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_capability(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { MigrationCapability *capability =3D pv; const char *capability_str =3D MigrationCapability_str(*capability); @@ -445,13 +451,13 @@ static int put_capability(QEMUFile *f, void *pv, size= _t size, =20 qemu_put_byte(f, len); qemu_put_buffer(f, (uint8_t *)capability_str, len); - return 0; + return true; } =20 static const VMStateInfo vmstate_info_capability =3D { .name =3D "capability", - .get =3D get_capability, - .put =3D put_capability, + .load =3D load_capability, + .save =3D save_capability, }; =20 /* The target-page-bits subsection is present only if the @@ -541,9 +547,9 @@ static const VMStateDescription vmstate_uuid =3D { static const VMStateDescription vmstate_configuration =3D { .name =3D "configuration", .version_id =3D 1, - .pre_load =3D configuration_pre_load, - .post_load =3D configuration_post_load, - .pre_save =3D configuration_pre_save, + .pre_load_errp =3D configuration_pre_load, + .post_load_errp =3D configuration_post_load, + .pre_save_errp =3D configuration_pre_save, .post_save =3D configuration_post_save, .fields =3D (const VMStateField[]) { VMSTATE_UINT32(len, SaveState), @@ -975,8 +981,13 @@ static int vmstate_load(QEMUFile *f, SaveStateEntry *s= e, Error **errp) } return ret; } - return vmstate_load_state(f, se->vmsd, se->opaque, se->load_version_id, - errp); + + if (!vmstate_load_vmsd(f, se->vmsd, se->opaque, se->load_version_id, + errp)) { + return -EINVAL; + } + + return 0; } =20 static void vmstate_save_old_style(QEMUFile *f, SaveStateEntry *se, @@ -1034,8 +1045,6 @@ static void save_section_footer(QEMUFile *f, SaveStat= eEntry *se) static int vmstate_save(QEMUFile *f, SaveStateEntry *se, JSONWriter *vmdes= c, Error **errp) { - int ret; - if ((!se->ops || !se->ops->save_state) && !se->vmsd) { return 0; } @@ -1055,12 +1064,8 @@ static int vmstate_save(QEMUFile *f, SaveStateEntry = *se, JSONWriter *vmdesc, trace_vmstate_save(se->idstr, se->vmsd ? se->vmsd->name : "(old)"); if (!se->vmsd) { vmstate_save_old_style(f, se, vmdesc); - } else { - ret =3D vmstate_save_state(f, se->vmsd, se->opaque, vmdesc, - errp); - if (ret) { - return ret; - } + } else if (!vmstate_save_vmsd(f, se->vmsd, se->opaque, vmdesc, errp)) { + return -EINVAL; } =20 trace_savevm_section_end(se->idstr, se->section_id, 0); @@ -1304,9 +1309,8 @@ void qemu_savevm_state_header(QEMUFile *f) json_writer_start_object(vmdesc, "configuration"); } =20 - vmstate_save_state(f, &vmstate_configuration, &savevm_state, - vmdesc, &local_err); - if (local_err) { + if (!vmstate_save_vmsd(f, &vmstate_configuration, &savevm_state, + vmdesc, &local_err)) { error_report_err(local_err); } =20 @@ -2850,7 +2854,6 @@ qemu_loadvm_section_part_end(QEMUFile *f, uint8_t typ= e, Error **errp) static int qemu_loadvm_state_header(QEMUFile *f, Error **errp) { unsigned int v; - int ret; =20 v =3D qemu_get_be32(f); if (v !=3D QEMU_VM_FILE_MAGIC) { @@ -2881,10 +2884,9 @@ static int qemu_loadvm_state_header(QEMUFile *f, Err= or **errp) return -EINVAL; } =20 - ret =3D vmstate_load_state(f, &vmstate_configuration, &savevm_stat= e, 0, - errp); - if (ret) { - return ret; + if (!vmstate_load_vmsd(f, &vmstate_configuration, &savevm_state, 0, + errp)) { + return -EINVAL; } } return 0; --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693503; cv=none; d=zohomail.com; s=zohoarc; b=VoHix7dK2tCUGcHhPvr5r9Am+xG78OBAqTmMLGlSOIvV9id5BV7Q54gAwOGrxD2QIwvSvyi5G5ajaAkc9QSFp5g02/7ElO8IVAVxCoT4EqxkeNB3TzKSPOydV6fkDmLN/ZnTVYeIclfXfcThNTu8OpKIF0kuRLbHAZqs8O6lGPw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693503; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NzlRVQ6wK9/3jkzrGEhWeF+eDOyfrMkHZSOrIRNGoLA=; b=E4kLN+z+TZbACOfpMdZkPhI0R/9E9Wz63d7/jzzPwWbUYUDmKE/24E646uekitr6okNNPKKyDvb9bW/MIj3HDHramVHnSC5MKhFJVS0FTylb9FU40jJe5EqDKXnnBDWDE85Ik78QAwwc/bKHPGaWZguvY8sRn5TDtG2FM3bnTS8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693503832837.4719042525458; Tue, 28 Oct 2025 16:18:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstk-00034m-Tc; Tue, 28 Oct 2025 19:14:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDsth-00033A-BZ for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:37 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstO-00018N-5N for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:36 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id A3AB68177B; Wed, 29 Oct 2025 02:14:05 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-z3lyrqwK; Wed, 29 Oct 2025 02:14:04 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693245; bh=NzlRVQ6wK9/3jkzrGEhWeF+eDOyfrMkHZSOrIRNGoLA=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=WPaezdIZawF0l4hLcvDxVs6FZ230xH65lcs2euROc8BYLQ0kuCBbPocAS6PwH7mi5 4mNYL6GkP9ceEDtW1VIydebCrrqeZpMgbM4ZNtwYMiulfmSLQ21IQPBRA5PwU5LjFG HX1x843YAGhhdGOCQClFgU8HjbkZtDmi8pEIcoxg= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 19/22] migration/vmstate-types: move to new migration APIs Date: Wed, 29 Oct 2025 02:13:43 +0300 Message-ID: <20251028231347.194844-20-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693505116154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- migration/vmstate-types.c | 584 ++++++++++++++++++-------------------- 1 file changed, 283 insertions(+), 301 deletions(-) diff --git a/migration/vmstate-types.c b/migration/vmstate-types.c index 4b01dc19c2..a06b7dd478 100644 --- a/migration/vmstate-types.c +++ b/migration/vmstate-types.c @@ -23,132 +23,136 @@ =20 /* bool */ =20 -static int get_bool(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_bool(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { bool *v =3D pv; *v =3D qemu_get_byte(f); - return 0; + return true; } =20 -static int put_bool(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_bool(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { bool *v =3D pv; qemu_put_byte(f, *v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_bool =3D { .name =3D "bool", - .get =3D get_bool, - .put =3D put_bool, + .load =3D load_bool, + .save =3D save_bool, }; =20 /* 8 bit int */ =20 -static int get_int8(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int8(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int8_t *v =3D pv; qemu_get_s8s(f, v); - return 0; + return true; } =20 -static int put_int8(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_int8(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { int8_t *v =3D pv; qemu_put_s8s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_int8 =3D { .name =3D "int8", - .get =3D get_int8, - .put =3D put_int8, + .load =3D load_int8, + .save =3D save_int8, }; =20 /* 16 bit int */ =20 -static int get_int16(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int16(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int16_t *v =3D pv; qemu_get_sbe16s(f, v); - return 0; + return true; } =20 -static int put_int16(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_int16(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { int16_t *v =3D pv; qemu_put_sbe16s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_int16 =3D { .name =3D "int16", - .get =3D get_int16, - .put =3D put_int16, + .load =3D load_int16, + .save =3D save_int16, }; =20 /* 32 bit int */ =20 -static int get_int32(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int32(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int32_t *v =3D pv; qemu_get_sbe32s(f, v); - return 0; + return true; } =20 -static int put_int32(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_int32(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { int32_t *v =3D pv; qemu_put_sbe32s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_int32 =3D { .name =3D "int32", - .get =3D get_int32, - .put =3D put_int32, + .load =3D load_int32, + .save =3D save_int32, }; =20 /* 32 bit int. See that the received value is the same than the one in the field */ =20 -static int get_int32_equal(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int32_equal(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int32_t *v =3D pv; int32_t v2; qemu_get_sbe32s(f, &v2); =20 if (*v =3D=3D v2) { - return 0; + return true; } - error_report("%" PRIx32 " !=3D %" PRIx32, *v, v2); + error_setg(errp, "%" PRIx32 " !=3D %" PRIx32, *v, v2); if (field->err_hint) { - error_printf("%s\n", field->err_hint); + error_append_hint(errp, "%s\n", field->err_hint); } - return -EINVAL; + return false; } =20 const VMStateInfo vmstate_info_int32_equal =3D { .name =3D "int32 equal", - .get =3D get_int32_equal, - .put =3D put_int32, + .load =3D load_int32_equal, + .save =3D save_int32, }; =20 /* 32 bit int. Check that the received value is non-negative * and less than or equal to the one in the field. */ =20 -static int get_int32_le(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int32_le(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int32_t *cur =3D pv; int32_t loaded; @@ -156,359 +160,368 @@ static int get_int32_le(QEMUFile *f, void *pv, size= _t size, =20 if (loaded >=3D 0 && loaded <=3D *cur) { *cur =3D loaded; - return 0; + return true; } - error_report("Invalid value %" PRId32 - " expecting positive value <=3D %" PRId32, - loaded, *cur); - return -EINVAL; + error_setg(errp, "Invalid value %" PRId32 + " expecting positive value <=3D %" PRId32, + loaded, *cur); + return false; } =20 const VMStateInfo vmstate_info_int32_le =3D { .name =3D "int32 le", - .get =3D get_int32_le, - .put =3D put_int32, + .load =3D load_int32_le, + .save =3D save_int32, }; =20 /* 64 bit int */ =20 -static int get_int64(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_int64(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int64_t *v =3D pv; qemu_get_sbe64s(f, v); - return 0; + return true; } =20 -static int put_int64(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_int64(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { int64_t *v =3D pv; qemu_put_sbe64s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_int64 =3D { .name =3D "int64", - .get =3D get_int64, - .put =3D put_int64, + .load =3D load_int64, + .save =3D save_int64, }; =20 /* 8 bit unsigned int */ =20 -static int get_uint8(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint8(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint8_t *v =3D pv; qemu_get_8s(f, v); - return 0; + return true; } =20 -static int put_uint8(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_uint8(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { uint8_t *v =3D pv; qemu_put_8s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_uint8 =3D { .name =3D "uint8", - .get =3D get_uint8, - .put =3D put_uint8, + .load =3D load_uint8, + .save =3D save_uint8, }; =20 /* 16 bit unsigned int */ =20 -static int get_uint16(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint16(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint16_t *v =3D pv; qemu_get_be16s(f, v); - return 0; + return true; } =20 -static int put_uint16(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_uint16(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { uint16_t *v =3D pv; qemu_put_be16s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_uint16 =3D { .name =3D "uint16", - .get =3D get_uint16, - .put =3D put_uint16, + .load =3D load_uint16, + .save =3D save_uint16, }; =20 /* 32 bit unsigned int */ =20 -static int get_uint32(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint32(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint32_t *v =3D pv; qemu_get_be32s(f, v); - return 0; + return true; } =20 -static int put_uint32(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_uint32(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { uint32_t *v =3D pv; qemu_put_be32s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_uint32 =3D { .name =3D "uint32", - .get =3D get_uint32, - .put =3D put_uint32, + .load =3D load_uint32, + .save =3D save_uint32, }; =20 /* 32 bit uint. See that the received value is the same than the one in the field */ =20 -static int get_uint32_equal(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint32_equal(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint32_t *v =3D pv; uint32_t v2; qemu_get_be32s(f, &v2); =20 if (*v =3D=3D v2) { - return 0; + return true; } - error_report("%" PRIx32 " !=3D %" PRIx32, *v, v2); + error_setg(errp, "%" PRIx32 " !=3D %" PRIx32, *v, v2); if (field->err_hint) { - error_printf("%s\n", field->err_hint); + error_append_hint(errp, "%s\n", field->err_hint); } - return -EINVAL; + return false; } =20 const VMStateInfo vmstate_info_uint32_equal =3D { .name =3D "uint32 equal", - .get =3D get_uint32_equal, - .put =3D put_uint32, + .load =3D load_uint32_equal, + .save =3D save_uint32, }; =20 /* 64 bit unsigned int */ =20 -static int get_uint64(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint64(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint64_t *v =3D pv; qemu_get_be64s(f, v); - return 0; + return true; } =20 -static int put_uint64(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_uint64(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { uint64_t *v =3D pv; qemu_put_be64s(f, v); - return 0; + return true; } =20 const VMStateInfo vmstate_info_uint64 =3D { .name =3D "uint64", - .get =3D get_uint64, - .put =3D put_uint64, + .load =3D load_uint64, + .save =3D save_uint64, }; =20 /* File descriptor communicated via SCM_RIGHTS */ =20 -static int get_fd(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_fd(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { int32_t *v =3D pv; if (migrate_mode() =3D=3D MIG_MODE_CPR_EXEC) { qemu_get_sbe32s(f, v); - return 0; + return true; } *v =3D qemu_file_get_fd(f); - return 0; + return true; } =20 -static int put_fd(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_fd(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { int32_t *v =3D pv; if (migrate_mode() =3D=3D MIG_MODE_CPR_EXEC) { qemu_put_sbe32s(f, v); - return 0; + return true; } - return qemu_file_put_fd(f, *v); + return qemu_file_put_fd(f, *v) =3D=3D 0; } =20 const VMStateInfo vmstate_info_fd =3D { .name =3D "fd", - .get =3D get_fd, - .put =3D put_fd, + .load =3D load_fd, + .save =3D save_fd, }; =20 -static int get_nullptr(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_nullptr(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) =20 { if (qemu_get_byte(f) =3D=3D VMS_NULLPTR_MARKER) { - return 0; + return true; } - error_report("vmstate: get_nullptr expected VMS_NULLPTR_MARKER"); - return -EINVAL; + error_setg(errp, "vmstate: load_nullptr expected VMS_NULLPTR_MARKER"); + return false; } =20 -static int put_nullptr(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_nullptr(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) =20 { if (pv =3D=3D NULL) { qemu_put_byte(f, VMS_NULLPTR_MARKER); - return 0; + return true; } - error_report("vmstate: put_nullptr must be called with pv =3D=3D NULL"= ); - return -EINVAL; + error_setg(errp, "vmstate: save_nullptr must be called with pv =3D=3D = NULL"); + return false; } =20 const VMStateInfo vmstate_info_nullptr =3D { .name =3D "nullptr", - .get =3D get_nullptr, - .put =3D put_nullptr, + .load =3D load_nullptr, + .save =3D save_nullptr, }; =20 /* 64 bit unsigned int. See that the received value is the same than the o= ne in the field */ =20 -static int get_uint64_equal(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint64_equal(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint64_t *v =3D pv; uint64_t v2; qemu_get_be64s(f, &v2); =20 if (*v =3D=3D v2) { - return 0; + return true; } - error_report("%" PRIx64 " !=3D %" PRIx64, *v, v2); + error_setg(errp, "%" PRIx64 " !=3D %" PRIx64, *v, v2); if (field->err_hint) { - error_printf("%s\n", field->err_hint); + error_append_hint(errp, "%s\n", field->err_hint); } - return -EINVAL; + return false; } =20 const VMStateInfo vmstate_info_uint64_equal =3D { .name =3D "int64 equal", - .get =3D get_uint64_equal, - .put =3D put_uint64, + .load =3D load_uint64_equal, + .save =3D save_uint64, }; =20 /* 8 bit int. See that the received value is the same than the one in the field */ =20 -static int get_uint8_equal(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint8_equal(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint8_t *v =3D pv; uint8_t v2; qemu_get_8s(f, &v2); =20 if (*v =3D=3D v2) { - return 0; + return true; } - error_report("%x !=3D %x", *v, v2); + error_setg(errp, "%x !=3D %x", *v, v2); if (field->err_hint) { - error_printf("%s\n", field->err_hint); + error_append_hint(errp, "%s\n", field->err_hint); } - return -EINVAL; + return false; } =20 const VMStateInfo vmstate_info_uint8_equal =3D { .name =3D "uint8 equal", - .get =3D get_uint8_equal, - .put =3D put_uint8, + .load =3D load_uint8_equal, + .save =3D save_uint8, }; =20 /* 16 bit unsigned int int. See that the received value is the same than t= he one in the field */ =20 -static int get_uint16_equal(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_uint16_equal(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint16_t *v =3D pv; uint16_t v2; qemu_get_be16s(f, &v2); =20 if (*v =3D=3D v2) { - return 0; + return true; } - error_report("%x !=3D %x", *v, v2); + error_setg(errp, "%x !=3D %x", *v, v2); if (field->err_hint) { - error_printf("%s\n", field->err_hint); + error_append_hint(errp, "%s\n", field->err_hint); } - return -EINVAL; + return false; } =20 const VMStateInfo vmstate_info_uint16_equal =3D { .name =3D "uint16 equal", - .get =3D get_uint16_equal, - .put =3D put_uint16, + .load =3D load_uint16_equal, + .save =3D save_uint16, }; =20 /* CPU_DoubleU type */ =20 -static int get_cpudouble(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_cpudouble(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { CPU_DoubleU *v =3D pv; qemu_get_be32s(f, &v->l.upper); qemu_get_be32s(f, &v->l.lower); - return 0; + return true; } =20 -static int put_cpudouble(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_cpudouble(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { CPU_DoubleU *v =3D pv; qemu_put_be32s(f, &v->l.upper); qemu_put_be32s(f, &v->l.lower); - return 0; + return true; } =20 const VMStateInfo vmstate_info_cpudouble =3D { .name =3D "CPU_Double_U", - .get =3D get_cpudouble, - .put =3D put_cpudouble, + .load =3D load_cpudouble, + .save =3D save_cpudouble, }; =20 /* uint8_t buffers */ =20 -static int get_buffer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_buffer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint8_t *v =3D pv; qemu_get_buffer(f, v, size); - return 0; + return true; } =20 -static int put_buffer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_buffer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { uint8_t *v =3D pv; qemu_put_buffer(f, v, size); - return 0; + return true; } =20 const VMStateInfo vmstate_info_buffer =3D { .name =3D "buffer", - .get =3D get_buffer, - .put =3D put_buffer, + .load =3D load_buffer, + .save =3D save_buffer, }; =20 /* unused buffers: space that was used for some fields that are not useful anymore */ =20 -static int get_unused_buffer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_unused_buffer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { uint8_t buf[1024]; int block_len; @@ -518,11 +531,12 @@ static int get_unused_buffer(QEMUFile *f, void *pv, s= ize_t size, size -=3D block_len; qemu_get_buffer(f, buf, block_len); } - return 0; + return true; } =20 -static int put_unused_buffer(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_unused_buffer(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmde= sc, + Error **errp) { static const uint8_t buf[1024]; int block_len; @@ -533,13 +547,13 @@ static int put_unused_buffer(QEMUFile *f, void *pv, s= ize_t size, qemu_put_buffer(f, buf, block_len); } =20 - return 0; + return true; } =20 const VMStateInfo vmstate_info_unused_buffer =3D { .name =3D "unused_buffer", - .get =3D get_unused_buffer, - .put =3D put_unused_buffer, + .load =3D load_unused_buffer, + .save =3D save_unused_buffer, }; =20 /* vmstate_info_tmp, see VMSTATE_WITH_TMP, the idea is that we allocate @@ -548,48 +562,34 @@ const VMStateInfo vmstate_info_unused_buffer =3D { * in fields that don't really exist in the parent but need to be in the * stream. */ -static int get_tmp(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_tmp(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { - int ret; - Error *local_err =3D NULL; const VMStateDescription *vmsd =3D field->vmsd; int version_id =3D field->version_id; - void *tmp =3D g_malloc(size); + g_autofree void *tmp =3D g_malloc(size); =20 /* Writes the parent field which is at the start of the tmp */ *(void **)tmp =3D pv; - ret =3D vmstate_load_state(f, vmsd, tmp, version_id, &local_err); - if (ret < 0) { - error_report_err(local_err); - } - g_free(tmp); - return ret; + return vmstate_load_vmsd(f, vmsd, tmp, version_id, errp); } =20 -static int put_tmp(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_tmp(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { const VMStateDescription *vmsd =3D field->vmsd; - void *tmp =3D g_malloc(size); - int ret; - Error *local_err =3D NULL; + g_autofree void *tmp =3D g_malloc(size); =20 /* Writes the parent field which is at the start of the tmp */ *(void **)tmp =3D pv; - ret =3D vmstate_save_state(f, vmsd, tmp, vmdesc, &local_err); - if (ret) { - error_report_err(local_err); - } - g_free(tmp); - - return ret; + return vmstate_save_vmsd(f, vmsd, tmp, vmdesc, errp); } =20 const VMStateInfo vmstate_info_tmp =3D { .name =3D "tmp", - .get =3D get_tmp, - .put =3D put_tmp, + .load =3D load_tmp, + .save =3D save_tmp, }; =20 /* bitmaps (as defined by bitmap.h). Note that size here is the size @@ -599,8 +599,8 @@ const VMStateInfo vmstate_info_tmp =3D { */ /* This is the number of 64 bit words sent over the wire */ #define BITS_TO_U64S(nr) DIV_ROUND_UP(nr, 64) -static int get_bitmap(QEMUFile *f, void *pv, size_t size, - const VMStateField *field) +static bool load_bitmap(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, Error **errp) { unsigned long *bmp =3D pv; int i, idx =3D 0; @@ -611,11 +611,12 @@ static int get_bitmap(QEMUFile *f, void *pv, size_t s= ize, bmp[idx++] =3D w >> 32; } } - return 0; + return true; } =20 -static int put_bitmap(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_bitmap(QEMUFile *f, void *pv, size_t size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { unsigned long *bmp =3D pv; int i, idx =3D 0; @@ -627,23 +628,21 @@ static int put_bitmap(QEMUFile *f, void *pv, size_t s= ize, qemu_put_be64(f, w); } =20 - return 0; + return true; } =20 const VMStateInfo vmstate_info_bitmap =3D { .name =3D "bitmap", - .get =3D get_bitmap, - .put =3D put_bitmap, + .load =3D load_bitmap, + .save =3D save_bitmap, }; =20 /* get for QTAILQ * meta data about the QTAILQ is encoded in a VMStateField structure */ -static int get_qtailq(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field) +static bool load_qtailq(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, Error **errp) { - int ret =3D 0; - Error *local_err =3D NULL; const VMStateDescription *vmsd =3D field->vmsd; /* size of a QTAILQ element */ size_t size =3D field->size; @@ -654,78 +653,76 @@ static int get_qtailq(QEMUFile *f, void *pv, size_t u= nused_size, =20 trace_get_qtailq(vmsd->name, version_id); if (version_id > vmsd->version_id) { - error_report("%s %s", vmsd->name, "too new"); + error_setg(errp, "%s %s", vmsd->name, "too new"); trace_get_qtailq_end(vmsd->name, "too new", -EINVAL); - - return -EINVAL; + return false; } if (version_id < vmsd->minimum_version_id) { - error_report("%s %s", vmsd->name, "too old"); + error_setg(errp, "%s %s", vmsd->name, "too old"); trace_get_qtailq_end(vmsd->name, "too old", -EINVAL); - return -EINVAL; + return false; } =20 while (qemu_get_byte(f)) { elm =3D g_malloc(size); - ret =3D vmstate_load_state(f, vmsd, elm, version_id, &local_err); - if (ret) { - error_report_err(local_err); - return ret; + if (!vmstate_load_vmsd(f, vmsd, elm, version_id, errp)) { + g_free(elm); + return false; } QTAILQ_RAW_INSERT_TAIL(pv, elm, entry_offset); } =20 - trace_get_qtailq_end(vmsd->name, "end", ret); - return ret; + trace_get_qtailq_end(vmsd->name, "end", 0); + return true; } =20 -/* put for QTAILQ */ -static int put_qtailq(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field, JSONWriter *vmdesc) +/* save for QTAILQ */ +static bool save_qtailq(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { const VMStateDescription *vmsd =3D field->vmsd; /* offset of the QTAILQ entry in a QTAILQ element*/ size_t entry_offset =3D field->start; void *elm; - int ret; - Error *local_err =3D NULL; =20 trace_put_qtailq(vmsd->name, vmsd->version_id); =20 QTAILQ_RAW_FOREACH(elm, pv, entry_offset) { qemu_put_byte(f, true); - ret =3D vmstate_save_state(f, vmsd, elm, vmdesc, &local_err); - if (ret) { - error_report_err(local_err); - return ret; + if (!vmstate_save_vmsd(f, vmsd, elm, vmdesc, errp)) { + return false; } } qemu_put_byte(f, false); =20 trace_put_qtailq_end(vmsd->name, "end"); =20 - return 0; + return true; } const VMStateInfo vmstate_info_qtailq =3D { .name =3D "qtailq", - .get =3D get_qtailq, - .put =3D put_qtailq, + .load =3D load_qtailq, + .save =3D save_qtailq, }; =20 -struct put_gtree_data { +struct save_gtree_data { QEMUFile *f; const VMStateDescription *key_vmsd; const VMStateDescription *val_vmsd; JSONWriter *vmdesc; - int ret; + Error **errp; + bool failed; }; =20 -static gboolean put_gtree_elem(gpointer key, gpointer value, gpointer data) +/* + * save_gtree_elem - func for g_tree_foreach, return true to stop + * iteration. + */ +static gboolean save_gtree_elem(gpointer key, gpointer value, gpointer dat= a) { - struct put_gtree_data *capsule =3D (struct put_gtree_data *)data; + struct save_gtree_data *capsule =3D (struct save_gtree_data *)data; QEMUFile *f =3D capsule->f; - int ret; - Error *local_err =3D NULL; =20 qemu_put_byte(f, true); =20 @@ -733,58 +730,55 @@ static gboolean put_gtree_elem(gpointer key, gpointer= value, gpointer data) if (!capsule->key_vmsd) { qemu_put_be64(f, (uint64_t)(uintptr_t)(key)); /* direct key */ } else { - ret =3D vmstate_save_state(f, capsule->key_vmsd, key, capsule->vmd= esc, - &local_err); - if (ret) { - error_report_err(local_err); - capsule->ret =3D ret; + if (!vmstate_save_vmsd(f, capsule->key_vmsd, key, capsule->vmdesc, + capsule->errp)) { + capsule->failed =3D true; return true; } } =20 /* put the data */ - ret =3D vmstate_save_state(f, capsule->val_vmsd, value, capsule->vmdes= c, - &local_err); - if (ret) { - error_report_err(local_err); - capsule->ret =3D ret; + if (!vmstate_save_vmsd(f, capsule->val_vmsd, value, capsule->vmdesc, + capsule->errp)) { + capsule->failed =3D true; return true; } return false; } =20 -static int put_gtree(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_gtree(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { bool direct_key =3D (!field->start); const VMStateDescription *key_vmsd =3D direct_key ? NULL : &field->vms= d[1]; const VMStateDescription *val_vmsd =3D &field->vmsd[0]; const char *key_vmsd_name =3D direct_key ? "direct" : key_vmsd->name; - struct put_gtree_data capsule =3D { + struct save_gtree_data capsule =3D { .f =3D f, .key_vmsd =3D key_vmsd, .val_vmsd =3D val_vmsd, .vmdesc =3D vmdesc, - .ret =3D 0}; + .errp =3D errp, + .failed =3D false}; GTree **pval =3D pv; GTree *tree =3D *pval; uint32_t nnodes =3D g_tree_nnodes(tree); - int ret; =20 trace_put_gtree(field->name, key_vmsd_name, val_vmsd->name, nnodes); qemu_put_be32(f, nnodes); - g_tree_foreach(tree, put_gtree_elem, (gpointer)&capsule); + g_tree_foreach(tree, save_gtree_elem, (gpointer)&capsule); qemu_put_byte(f, false); - ret =3D capsule.ret; - if (ret) { - error_report("%s : failed to save gtree (%d)", field->name, ret); + if (capsule.failed) { + trace_put_gtree_end(field->name, key_vmsd_name, val_vmsd->name, -1= ); + return false; } - trace_put_gtree_end(field->name, key_vmsd_name, val_vmsd->name, ret); - return ret; + trace_put_gtree_end(field->name, key_vmsd_name, val_vmsd->name, 0); + return true; } =20 -static int get_gtree(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field) +static bool load_gtree(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, Error **errp) { bool direct_key =3D (!field->start); const VMStateDescription *key_vmsd =3D direct_key ? NULL : &field->vms= d[1]; @@ -798,24 +792,23 @@ static int get_gtree(QEMUFile *f, void *pv, size_t un= used_size, GTree *tree =3D *pval; void *key, *val; int ret =3D 0; - Error *local_err =3D NULL; =20 /* in case of direct key, the key vmsd can be {}, ie. check fields */ if (!direct_key && version_id > key_vmsd->version_id) { - error_report("%s %s", key_vmsd->name, "too new"); - return -EINVAL; + error_setg(errp, "%s %s", key_vmsd->name, "too new"); + return false; } if (!direct_key && version_id < key_vmsd->minimum_version_id) { - error_report("%s %s", key_vmsd->name, "too old"); - return -EINVAL; + error_setg(errp, "%s %s", key_vmsd->name, "too old"); + return false; } if (version_id > val_vmsd->version_id) { - error_report("%s %s", val_vmsd->name, "too new"); - return -EINVAL; + error_setg(errp, "%s %s", val_vmsd->name, "too new"); + return false; } if (version_id < val_vmsd->minimum_version_id) { - error_report("%s %s", val_vmsd->name, "too old"); - return -EINVAL; + error_setg(errp, "%s %s", val_vmsd->name, "too old"); + return false; } =20 nnodes =3D qemu_get_be32(f); @@ -830,24 +823,20 @@ static int get_gtree(QEMUFile *f, void *pv, size_t un= used_size, key =3D (void *)(uintptr_t)qemu_get_be64(f); } else { key =3D g_malloc0(key_size); - ret =3D vmstate_load_state(f, key_vmsd, key, version_id, &loca= l_err); - if (ret) { - error_report_err(local_err); + if (!vmstate_load_vmsd(f, key_vmsd, key, version_id, errp)) { goto key_error; } } val =3D g_malloc0(val_size); - ret =3D vmstate_load_state(f, val_vmsd, val, version_id, &local_er= r); - if (ret) { - error_report_err(local_err); + if (!vmstate_load_vmsd(f, val_vmsd, val, version_id, errp)) { goto val_error; } g_tree_insert(tree, key, val); } if (count !=3D nnodes) { - error_report("%s inconsistent stream when loading the gtree", - field->name); - return -EINVAL; + error_setg(errp, "%s inconsistent stream when loading the gtree", + field->name); + return false; } trace_get_gtree_end(field->name, key_vmsd_name, val_vmsd->name, ret); return ret; @@ -858,46 +847,41 @@ key_error: g_free(key); } trace_get_gtree_end(field->name, key_vmsd_name, val_vmsd->name, ret); - return ret; + return ret >=3D 0; } =20 =20 const VMStateInfo vmstate_info_gtree =3D { .name =3D "gtree", - .get =3D get_gtree, - .put =3D put_gtree, + .load =3D load_gtree, + .save =3D save_gtree, }; =20 -static int put_qlist(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field, JSONWriter *vmdesc) +static bool save_qlist(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, JSONWriter *vmdesc, + Error **errp) { const VMStateDescription *vmsd =3D field->vmsd; /* offset of the QTAILQ entry in a QTAILQ element*/ size_t entry_offset =3D field->start; void *elm; - int ret; - Error *local_err =3D NULL; =20 trace_put_qlist(field->name, vmsd->name, vmsd->version_id); QLIST_RAW_FOREACH(elm, pv, entry_offset) { qemu_put_byte(f, true); - ret =3D vmstate_save_state(f, vmsd, elm, vmdesc, &local_err); - if (ret) { - error_report_err(local_err); - return ret; + if (!vmstate_save_vmsd(f, vmsd, elm, vmdesc, errp)) { + return false; } } qemu_put_byte(f, false); trace_put_qlist_end(field->name, vmsd->name); =20 - return 0; + return true; } =20 -static int get_qlist(QEMUFile *f, void *pv, size_t unused_size, - const VMStateField *field) +static bool load_qlist(QEMUFile *f, void *pv, size_t unused_size, + const VMStateField *field, Error **errp) { - int ret =3D 0; - Error *local_err =3D NULL; const VMStateDescription *vmsd =3D field->vmsd; /* size of a QLIST element */ size_t size =3D field->size; @@ -908,21 +892,19 @@ static int get_qlist(QEMUFile *f, void *pv, size_t un= used_size, =20 trace_get_qlist(field->name, vmsd->name, vmsd->version_id); if (version_id > vmsd->version_id) { - error_report("%s %s", vmsd->name, "too new"); - return -EINVAL; + error_setg(errp, "%s %s", vmsd->name, "too new"); + return false; } if (version_id < vmsd->minimum_version_id) { - error_report("%s %s", vmsd->name, "too old"); - return -EINVAL; + error_setg(errp, "%s %s", vmsd->name, "too old"); + return false; } =20 while (qemu_get_byte(f)) { elm =3D g_malloc(size); - ret =3D vmstate_load_state(f, vmsd, elm, version_id, &local_err); - if (ret) { - error_report_err(local_err); + if (!vmstate_load_vmsd(f, vmsd, elm, version_id, errp)) { g_free(elm); - return ret; + return false; } if (!prev) { QLIST_RAW_INSERT_HEAD(pv, elm, entry_offset); @@ -933,11 +915,11 @@ static int get_qlist(QEMUFile *f, void *pv, size_t un= used_size, } trace_get_qlist_end(field->name, vmsd->name); =20 - return ret; + return true; } =20 const VMStateInfo vmstate_info_qlist =3D { .name =3D "qlist", - .get =3D get_qlist, - .put =3D put_qlist, + .load =3D load_qlist, + .save =3D save_qlist, }; --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693663; cv=none; d=zohomail.com; s=zohoarc; b=cQJqzxW92KpdONTeVeWJjdpPt1L62h1T9ZBBaubXfw3nkxszMhQNR75PnNx5Q6/lW2oRMM5312+GL07RWKuV0OvKs+Amzi+9oBVQ4sG1CglpsVXV9TQsL4fc59+dVfvD/J+fll52lyc1Iq//S5T0jp+fS8sR8Q+aDWxXo4rdWAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693663; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Iu2lVLUbhIwJwSvngB6hkTGCW10jNX6YLSQzs7iFrgo=; b=n5EwZBG1Z4kM2Cyj13EoaItxpVPsafJfBPMCzpYg5Bdt4l9y/2JxzYAGEA/Fp/AGxH0jAzrtHnr1LmJlgd35BSVSuZs4aAoim+Ib8YPZMfz6m12CpnVsjhB30VoJ4s93a5fUrfOaudccDzheE238ZOYCv9fpiSL3wOG+RrJfqsg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693663744834.2632783820735; Tue, 28 Oct 2025 16:21:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDstm-00036I-Fk; Tue, 28 Oct 2025 19:14:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstk-00034E-7V for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:40 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstN-00018o-Bk for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:38 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 4DE3E80B07; Wed, 29 Oct 2025 02:14:06 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-smsptzub; Wed, 29 Oct 2025 02:14:05 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693246; bh=Iu2lVLUbhIwJwSvngB6hkTGCW10jNX6YLSQzs7iFrgo=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=nh+7xsqXQNRcTJ9Gu2RLn7qlwrINjgQJmMgvAwCWCaZyTWRthBfAM0roRuv83dkre 8Pxg1AiJvedBXpXhGci+YGWPyqHt9VOJAr7IWZM79J2ZyZ4/AV3l3i7ybBawLFCCs8 HUC43UcDMvkQzs9KVnmxT3ZSl5kb6jsDRZtJi+iY= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 20/22] migration: VMStateInfo: remove old .get / .set handlers Date: Wed, 29 Oct 2025 02:13:44 +0300 Message-ID: <20251028231347.194844-21-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693666972154100 Content-Type: text/plain; charset="utf-8" They are unused now. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/migration/vmstate.h | 5 ----- migration/vmstate.c | 14 +------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index f0ffd8f9c5..aaeb33045e 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -41,11 +41,6 @@ typedef struct VMStateField VMStateField; */ struct VMStateInfo { const char *name; - int coroutine_mixed_fn (*get)(QEMUFile *f, void *pv, size_t size, - const VMStateField *field); - int coroutine_mixed_fn (*put)(QEMUFile *f, void *pv, size_t size, - const VMStateField *field, - JSONWriter *vmdesc); bool coroutine_mixed_fn (*load)(QEMUFile *f, void *pv, size_t size, const VMStateField *field, Error **errp); diff --git a/migration/vmstate.c b/migration/vmstate.c index 1d291ff556..6f1e878f36 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -212,16 +212,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescr= iption *vmsd, inner_field->struct_version_i= d, errp); } else { - if (inner_field->info->get) { - ret =3D inner_field->info->get(f, curr_elem, size, - inner_field); - if (ret < 0) { - error_setg(errp, - "Failed to load element of type %s = for %s: " - "%d", inner_field->info->name, - inner_field->name, ret); - } - } else if (!inner_field->info->load( + if (!inner_field->info->load( f, curr_elem, size, inner_field, errp)) { error_prepend( errp, @@ -545,9 +536,6 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDesc= ription *vmsd, curr_elem, vmdesc_loop, inner_field->struct_version= _id, errp); - } else if (inner_field->info->put) { - ret =3D inner_field->info->put(f, curr_elem, size, - inner_field, vmdesc_loop); } else if (!inner_field->info->save( f, curr_elem, size, inner_field, vmdesc_loop, errp)) { ret =3D -EINVAL; --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693364; cv=none; d=zohomail.com; s=zohoarc; b=e0NGcb3l31fhUCn3TQB4UqgdMyA5tD3NumplKZzafPRbZgKXWRqBpFVGuiihyUeMllRw/SaOtLrzbuqWsTNtgMxoxcRysFyxy8+mTFbvXoGp4k7cx43tsK5H2oSOzo4LGIZDjiQF5eOg0yq4LTAzfZJ3K0GRKnIke0jK9s0JrO8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693364; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d77pOpn706V6UlmPku+gqYZpRBb+6mVRH/UFFJ6GHEo=; b=dQSme++lPPQkwbXDDS4naKvRzHTkhOLfRANqJWGHaqunfsWfls+3FOjuNC9O78QFGV+P57H5V0Vwn1NM7N3WTbCRa600j/tOTKylkiqnHrvP8mQ2fqA8wC4xf1imriyyuc3C/6eObd9jtRIJ3PJkC9i3p1y0szsCych5WyEdUtA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1761693364839913.9620950805344; Tue, 28 Oct 2025 16:16:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDsto-00036c-8R; Tue, 28 Oct 2025 19:14:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstn-00036M-2c for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:43 -0400 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstQ-00018p-RC for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:42 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id EF36A8177F; Wed, 29 Oct 2025 02:14:06 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-3Q8HwkNU; Wed, 29 Oct 2025 02:14:06 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693246; bh=d77pOpn706V6UlmPku+gqYZpRBb+6mVRH/UFFJ6GHEo=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=H7mHalUnFQ5rqhAPY19nEp4eSsBXLXFMCfnxTku1sR4bcggzP8orPjS8qHHr6k7Ll JjNpZQnvT3arl8T5siklHC0ds0Xm3Jc2+OoVtDojZb9MayJjQlI8+d8Y6ZUlpozCf9 M09qz3ZW8oloUDYbsK0H5xe9qmSTVmbA8+T0RjYU= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 21/22] migration: convert vmstate_subsection_save/load functions to bool Date: Wed, 29 Oct 2025 02:13:45 +0300 Message-ID: <20251028231347.194844-22-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=178.154.239.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693369539154100 Content-Type: text/plain; charset="utf-8" Convert them to bool return value, as preparation to further convertion of vmstate_save/load_state(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- migration/vmstate.c | 55 +++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 6f1e878f36..2298f190de 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -21,11 +21,11 @@ #include "qemu/error-report.h" #include "trace.h" =20 -static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *= vmsd, - void *opaque, JSONWriter *vmdesc, - Error **errp); -static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *= vmsd, - void *opaque, Error **errp); +static bool vmstate_subsection_save(QEMUFile *f, const VMStateDescription = *vmsd, + void *opaque, JSONWriter *vmdesc, + Error **errp); +static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription = *vmsd, + void *opaque, Error **errp); =20 /* Whether this field should exist for either save or load the VM? */ static bool @@ -249,10 +249,9 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescr= iption *vmsd, field++; } assert(field->flags =3D=3D VMS_END); - ret =3D vmstate_subsection_load(f, vmsd, opaque, errp); - if (ret !=3D 0) { - qemu_file_set_error(f, ret); - return ret; + if (!vmstate_subsection_load(f, vmsd, opaque, errp)) { + qemu_file_set_error(f, -EINVAL); + return false; } if (vmsd->post_load_errp) { if (!vmsd->post_load_errp(opaque, version_id, errp)) { @@ -584,7 +583,7 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDesc= ription *vmsd, json_writer_end_array(vmdesc); } =20 - ret =3D vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp); + ret =3D vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp) ? 0 : -= EINVAL; =20 if (vmsd->post_save) { int ps_ret =3D vmsd->post_save(opaque); @@ -610,15 +609,14 @@ vmstate_get_subsection(const VMStateDescription * con= st *sub, return NULL; } =20 -static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *= vmsd, - void *opaque, Error **errp) +static bool vmstate_subsection_load(QEMUFile *f, const VMStateDescription = *vmsd, + void *opaque, Error **errp) { ERRP_GUARD(); trace_vmstate_subsection_load(vmsd->name); =20 while (qemu_peek_byte(f, 0) =3D=3D QEMU_VM_SUBSECTION) { char idstr[256], *idstr_ret; - int ret; uint8_t version_id, len, size; const VMStateDescription *sub_vmsd; =20 @@ -626,12 +624,12 @@ static int vmstate_subsection_load(QEMUFile *f, const= VMStateDescription *vmsd, if (len < strlen(vmsd->name) + 1) { /* subsection name has to be "section_name/a" */ trace_vmstate_subsection_load_bad(vmsd->name, "(short)", ""); - return 0; + return true; } size =3D qemu_peek_buffer(f, (uint8_t **)&idstr_ret, len, 2); if (size !=3D len) { trace_vmstate_subsection_load_bad(vmsd->name, "(peek fail)", "= "); - return 0; + return true; } memcpy(idstr, idstr_ret, size); idstr[size] =3D 0; @@ -646,34 +644,32 @@ static int vmstate_subsection_load(QEMUFile *f, const= VMStateDescription *vmsd, trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(lookup)= "); error_setg(errp, "VM subsection '%s' in '%s' does not exist", idstr, vmsd->name); - return -ENOENT; + return false; } qemu_file_skip(f, 1); /* subsection */ qemu_file_skip(f, 1); /* len */ qemu_file_skip(f, len); /* idstr */ version_id =3D qemu_get_be32(f); =20 - ret =3D vmstate_load_state(f, sub_vmsd, opaque, version_id, errp); - if (ret) { + if (!vmstate_load_vmsd(f, sub_vmsd, opaque, version_id, errp)) { trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(child)"= ); error_prepend(errp, - "Loading VM subsection '%s' in '%s' failed: %d: = ", - idstr, vmsd->name, ret); - return ret; + "Loading VM subsection '%s' in '%s' failed: ", + idstr, vmsd->name); + return false; } } =20 trace_vmstate_subsection_load_good(vmsd->name); - return 0; + return true; } =20 -static int vmstate_subsection_save(QEMUFile *f, const VMStateDescription *= vmsd, - void *opaque, JSONWriter *vmdesc, - Error **errp) +static bool vmstate_subsection_save(QEMUFile *f, const VMStateDescription = *vmsd, + void *opaque, JSONWriter *vmdesc, + Error **errp) { const VMStateDescription * const *sub =3D vmsd->subsections; bool vmdesc_has_subsections =3D false; - int ret =3D 0; =20 trace_vmstate_subsection_save_top(vmsd->name); while (sub && *sub) { @@ -697,9 +693,8 @@ static int vmstate_subsection_save(QEMUFile *f, const V= MStateDescription *vmsd, qemu_put_byte(f, len); qemu_put_buffer(f, (uint8_t *)vmsdsub->name, len); qemu_put_be32(f, vmsdsub->version_id); - ret =3D vmstate_save_state(f, vmsdsub, opaque, vmdesc, errp); - if (ret) { - return ret; + if (!vmstate_save_vmsd(f, vmsdsub, opaque, vmdesc, errp)) { + return false; } =20 if (vmdesc) { @@ -713,5 +708,5 @@ static int vmstate_subsection_save(QEMUFile *f, const V= MStateDescription *vmsd, json_writer_end_array(vmdesc); } =20 - return ret; + return true; } --=20 2.48.1 From nobody Fri Nov 14 18:23:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1761693365; cv=none; d=zohomail.com; s=zohoarc; b=dxg/uUW24Kxt7IxPdb3hRMoEpDIXDRIHaGM2EKfveaCP8UooMBRQaPsakOX/692y9HZRrmFMZTLXN/ixYayUYFEsRqv75Bp4G2IyWWpLdbkijHaLGKzis/rP7FMkJ5fS2Wg1xGqveA8abCIytlqZQnELfGlOHJnq9gJkEznpGcM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761693365; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1PkYR+WTNmRU23OU/YYsEUvRuQ70o5MoU24qYzgUXGc=; b=LCXHr1h21UU2hHc1QBMKr6ADH1ULzqjr7hdO7tYptY7pOhjgfq+xmN3Zq3uOVOnS2ftOS41h18NaAiDOdutooUv3p6zsrLrIQpGGqfUjJMbgvqZNkO24BUtFibGavCBuwQ3y1UPm824FxLxMSXNK7BKTg9XNlt7q2LBwJideaTU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 176169336589785.72269884209686; Tue, 28 Oct 2025 16:16:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vDsty-00037f-Cf; Tue, 28 Oct 2025 19:14:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstt-00037L-21 for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:49 -0400 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vDstb-000194-7P for qemu-devel@nongnu.org; Tue, 28 Oct 2025 19:14:48 -0400 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id A869E81783; Wed, 29 Oct 2025 02:14:07 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:582::1:19]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id oDnXpg2bCW20-QBXgxjNx; Wed, 29 Oct 2025 02:14:07 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1761693247; bh=1PkYR+WTNmRU23OU/YYsEUvRuQ70o5MoU24qYzgUXGc=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=UxMKqDcrW5k8EoG3y2Kay3bYthzL4u2yEEoTOSD1t8rdf9Pym5VGv1TgmILkJ1ngJ 5Uxjds/mEF/PmSXYRMZ2EACmvvH9DVCv62qi/SQ1YqkIbDmYG21iHkE6z5wo5n3mxm 0IvpGgDMeCcFaH4oQNEXFRIkZgxgKacPa7B0yXq0= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: peterx@redhat.com Cc: armbru@redhat.com, vsementsov@yandex-team.ru, qemu-devel@nongnu.org Subject: [RFC 22/22] migration: finally convert vmstate_save/load_state() functions Date: Wed, 29 Oct 2025 02:13:46 +0300 Message-ID: <20251028231347.194844-23-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251028231347.194844-1-vsementsov@yandex-team.ru> References: <20251028231347.194844-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=2a02:6b8:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 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-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1761693369749154100 Content-Type: text/plain; charset="utf-8" Now they are used only to relize their wrappers vmstate_save/load_vmsd(). So, let's do final convertion. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/migration/vmstate.h | 21 +----- migration/vmstate.c | 141 ++++++++++++++++++------------------ 2 files changed, 74 insertions(+), 88 deletions(-) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index aaeb33045e..b2fda750e3 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -1222,27 +1222,10 @@ extern const VMStateInfo vmstate_info_qlist; .flags =3D VMS_END, \ } =20 -int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, int version_id, Error **errp); -int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, JSONWriter *vmdesc, Error **errp); -int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, - int version_id, Error **errp); - -static inline bool vmstate_load_vmsd( - QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, int version_id, Error **errp) -{ - return vmstate_load_state(f, vmsd, opaque, version_id, errp) >=3D 0; -} - -static inline bool vmstate_save_vmsd( - QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, Error **errp) -{ - return vmstate_save_state(f, vmsd, opaque, vmdesc, errp) >=3D 0; -} =20 bool vmstate_section_needed(const VMStateDescription *vmsd, void *opaque); =20 diff --git a/migration/vmstate.c b/migration/vmstate.c index 2298f190de..b8fb1d0a40 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -131,12 +131,11 @@ static void vmstate_handle_alloc(void *ptr, const VMS= tateField *field, } } =20 -int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, +bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, int version_id, Error **errp) { ERRP_GUARD(); const VMStateField *field =3D vmsd->fields; - int ret =3D 0; =20 trace_vmstate_load_state(vmsd->name, version_id); if (version_id > vmsd->version_id) { @@ -144,14 +143,14 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, "for local version_id %d", vmsd->name, version_id, vmsd->version_id); trace_vmstate_load_state_end(vmsd->name, "too new", -EINVAL); - return -EINVAL; + return false; } if (version_id < vmsd->minimum_version_id) { error_setg(errp, "%s: incoming version_id %d is too old " "for local minimum version_id %d", vmsd->name, version_id, vmsd->minimum_version_id); trace_vmstate_load_state_end(vmsd->name, "too old", -EINVAL); - return -EINVAL; + return false; } if (vmsd->pre_load_errp) { if (!vmsd->pre_load_errp(opaque, errp)) { @@ -159,16 +158,16 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, "version_id: %d, minimum version_id: %d: ", vmsd->name, vmsd->version_id, vmsd->minimum_version_id); - return -EINVAL; + return false; } } else if (vmsd->pre_load) { - ret =3D vmsd->pre_load(opaque); + int ret =3D vmsd->pre_load(opaque); if (ret) { error_setg(errp, "pre load hook failed for: '%s', " "version_id: %d, minimum version_id: %d, ret: %d", vmsd->name, vmsd->version_id, vmsd->minimum_version= _id, ret); - return ret; + return false; } } while (field->name) { @@ -187,6 +186,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescri= ption *vmsd, for (i =3D 0; i < n_elems; i++) { void *curr_elem =3D first_elem + size * i; const VMStateField *inner_field; + bool ok; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { curr_elem =3D *(void **)curr_elem; @@ -204,21 +204,20 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, } =20 if (inner_field->flags & VMS_STRUCT) { - ret =3D vmstate_load_state(f, inner_field->vmsd, curr_= elem, - inner_field->vmsd->version_id, - errp); + ok =3D vmstate_load_vmsd(f, inner_field->vmsd, curr_el= em, + inner_field->vmsd->version_id, + errp); } else if (inner_field->flags & VMS_VSTRUCT) { - ret =3D vmstate_load_state(f, inner_field->vmsd, curr_= elem, - inner_field->struct_version_i= d, - errp); + ok =3D vmstate_load_vmsd(f, inner_field->vmsd, curr_el= em, + inner_field->struct_version_id, + errp); } else { - if (!inner_field->info->load( - f, curr_elem, size, inner_field, errp)) { - error_prepend( - errp, - "Failed to load element of type %s for %s:= ", - inner_field->info->name, inner_field->name= ); - ret =3D -EINVAL; + ok =3D inner_field->info->load(f, curr_elem, size, + inner_field, errp); + if (!ok) { + error_prepend(errp, + "Failed to load element of type %s for %s: ", + inner_field->info->name, inner_field->name); } } =20 @@ -227,24 +226,25 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, g_clear_pointer((gpointer *)&inner_field, g_free); } =20 - if (ret >=3D 0) { - ret =3D qemu_file_get_error(f); + if (ok) { + int ret =3D qemu_file_get_error(f); if (ret < 0) { + ok =3D false; error_setg(errp, "Failed to load %s state: stream error:= %d", vmsd->name, ret); } } - if (ret < 0) { - qemu_file_set_error(f, ret); - trace_vmstate_load_field_error(field->name, ret); - return ret; + if (!ok) { + qemu_file_set_error(f, -EINVAL); + trace_vmstate_load_field_error(field->name, -EINVAL); + return false; } } } else if (field->flags & VMS_MUST_EXIST) { error_setg(errp, "Input validation failed: %s/%s version_id: %= d", vmsd->name, field->name, vmsd->version_id); - return -1; + return false; } field++; } @@ -258,20 +258,24 @@ int vmstate_load_state(QEMUFile *f, const VMStateDesc= ription *vmsd, error_prepend(errp, "post load hook failed for: %s, version_id= : " "%d, minimum_version: %d: ", vmsd->name, vmsd->version_id, vmsd->minimum_version_id); - ret =3D -EINVAL; + trace_vmstate_load_state_end(vmsd->name, "end", -EINVAL); + return false; } } else if (vmsd->post_load) { - ret =3D vmsd->post_load(opaque, version_id); + int ret =3D vmsd->post_load(opaque, version_id); if (ret < 0) { error_setg(errp, "post load hook failed for: %s, version_id: %d, " "minimum_version: %d, ret: %d", vmsd->name, vmsd->version_id, vmsd->minimum_version= _id, ret); + trace_vmstate_load_state_end(vmsd->name, "end", -EINVAL); + return false; } } - trace_vmstate_load_state_end(vmsd->name, "end", ret); - return ret; + + trace_vmstate_load_state_end(vmsd->name, "end", 0); + return true; } =20 static int vmfield_name_num(const VMStateField *start, @@ -420,34 +424,29 @@ bool vmstate_section_needed(const VMStateDescription = *vmsd, void *opaque) } =20 =20 -int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc_id, Error **errp) -{ - return vmstate_save_state_v(f, vmsd, opaque, vmdesc_id, vmsd->version_= id, errp); -} - -int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, - void *opaque, JSONWriter *vmdesc, int version_id,= Error **errp) +static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vms= d, + void *opaque, JSONWriter *vmdesc, + int version_id, Error **errp) { ERRP_GUARD(); - int ret =3D 0; + bool ok; const VMStateField *field =3D vmsd->fields; =20 trace_vmstate_save_state_top(vmsd->name); =20 if (vmsd->pre_save_errp) { - ret =3D vmsd->pre_save_errp(opaque, errp) ? 0 : -EINVAL; - trace_vmstate_save_state_pre_save_res(vmsd->name, ret); - if (ret < 0) { + ok =3D vmsd->pre_save_errp(opaque, errp); + trace_vmstate_save_state_pre_save_res(vmsd->name, ok); + if (!ok) { error_prepend(errp, "pre-save for %s failed: ", vmsd->name); - return ret; + return false; } } else if (vmsd->pre_save) { - ret =3D vmsd->pre_save(opaque); + int ret =3D vmsd->pre_save(opaque); trace_vmstate_save_state_pre_save_res(vmsd->name, ret); if (ret) { error_setg(errp, "pre-save failed: %s", vmsd->name); - return ret; + return false; } } =20 @@ -528,16 +527,16 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDe= scription *vmsd, i, max_elems); =20 if (inner_field->flags & VMS_STRUCT) { - ret =3D vmstate_save_state(f, inner_field->vmsd, - curr_elem, vmdesc_loop, errp); + ok =3D vmstate_save_vmsd(f, inner_field->vmsd, + curr_elem, vmdesc_loop, errp); } else if (inner_field->flags & VMS_VSTRUCT) { - ret =3D vmstate_save_state_v(f, inner_field->vmsd, - curr_elem, vmdesc_loop, - inner_field->struct_version= _id, - errp); - } else if (!inner_field->info->save( - f, curr_elem, size, inner_field, vmdesc_loop, errp)) { - ret =3D -EINVAL; + ok =3D vmstate_save_vmsd_v(f, inner_field->vmsd, + curr_elem, vmdesc_loop, + inner_field->struct_version_i= d, + errp); + } else { + ok =3D inner_field->info->save( + f, curr_elem, size, inner_field, vmdesc_loop, errp= ); } =20 written_bytes =3D qemu_file_transferred(f) - old_offset; @@ -549,18 +548,13 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDe= scription *vmsd, g_clear_pointer((gpointer *)&inner_field, g_free); } =20 - if (ret) { - if (*errp) { - error_prepend(errp, "Save of field %s/%s failed: ", - vmsd->name, field->name); - } else { - error_setg(errp, "Save of field %s/%s failed", - vmsd->name, field->name); - } + if (!ok) { + error_prepend(errp, "Save of field %s/%s failed: ", + vmsd->name, field->name); if (vmsd->post_save) { vmsd->post_save(opaque); } - return ret; + return false; } =20 /* Compressed arrays only care about the first element */ @@ -583,18 +577,27 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDe= scription *vmsd, json_writer_end_array(vmdesc); } =20 - ret =3D vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp) ? 0 : -= EINVAL; + ok =3D vmstate_subsection_save(f, vmsd, opaque, vmdesc, errp); =20 if (vmsd->post_save) { int ps_ret =3D vmsd->post_save(opaque); - if (!ret && ps_ret) { - ret =3D ps_ret; + if (ok && ps_ret) { + ok =3D false; error_setg(errp, "post-save failed: %s", vmsd->name); } } - return ret; + + return ok; } =20 +bool vmstate_save_vmsd(QEMUFile *f, const VMStateDescription *vmsd, + void *opaque, JSONWriter *vmdesc_id, Error **errp) +{ + return vmstate_save_vmsd_v(f, vmsd, opaque, vmdesc_id, vmsd->version_i= d, + errp); +} + + static const VMStateDescription * vmstate_get_subsection(const VMStateDescription * const *sub, const char *idstr) @@ -637,7 +640,7 @@ static bool vmstate_subsection_load(QEMUFile *f, const = VMStateDescription *vmsd, if (strncmp(vmsd->name, idstr, strlen(vmsd->name)) !=3D 0) { trace_vmstate_subsection_load_bad(vmsd->name, idstr, "(prefix)= "); /* it doesn't have a valid subsection name */ - return 0; + return true; } sub_vmsd =3D vmstate_get_subsection(vmsd->subsections, idstr); if (sub_vmsd =3D=3D NULL) { --=20 2.48.1