From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2CA98C624A4 for ; Thu, 3 Sep 2026 17:13:43 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x2B04-00067R-Fc; Thu, 03 Sep 2026 13:13:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1x2B03-000676-8S for qemu-devel@nongnu.org; Thu, 03 Sep 2026 13:13:19 -0400 Received: from smtp-out2.suse.de ([195.135.223.131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x2AzA-00035u-0H for qemu-devel@nongnu.org; Thu, 03 Sep 2026 13:13:19 -0400 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 08ED01F847; Thu, 3 Sep 2026 17:12:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788455538; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=VpX+SD3lEpcljTl7qqmJfAHhRCXEPyOU2PrYeH8tJHk=; b=DjpBC/QPay/MJNzuOvKhCAsQy3Di1+oPSFKmj1E9sPR3kt2/ihwD4fBnAU329zZnv1TwX3 aSFk4UwhiXaAvVsKfiMU+Z/sONFlJaW+nsp6OmE9WZsuqt2J3FmcdvIYpVdDJDVGIAAfOt QoLyN153Uriyd/zXkGPAwV97Xv+L5Ts= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788455538; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=VpX+SD3lEpcljTl7qqmJfAHhRCXEPyOU2PrYeH8tJHk=; b=4XrupgWd9v8iLzpj1PU9Cf7+GnmVRvN7jFYfzMHxr+1H+nOxUvdSQnD+2h/6omLE6hVY3u o2x+xbtPoZVw90Bw== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=fohLL6xf; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=ZUohhk00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788455534; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=VpX+SD3lEpcljTl7qqmJfAHhRCXEPyOU2PrYeH8tJHk=; b=fohLL6xf1aKma4aJWc5oGSdzMWqimYGpcYXTaRfOYwRfk2xGpuDF5Ni26L9nbWwmyxpcxb bXtRZ4YgIpn5kjut7lzCc7fP1xkqhWDjU8andOFU++qs5S17cUNQLjhSuF4ObjCoj7lW66 uCl/zVx0XzJzv+y3AmGLoWVV+EZXVVQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788455534; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=VpX+SD3lEpcljTl7qqmJfAHhRCXEPyOU2PrYeH8tJHk=; b=ZUohhk002FX7nPIXQpTvTcQnqqmifFw81jCoq8NDTH/lRpQ/zsQBx2OKZzpDLRDx/W8JAF 2t1lb8PdE7ajrrCg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 879AF136E6; Thu, 3 Sep 2026 17:12:13 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id alI+Fm2qmWp6NwAAD6G6ig (envelope-from ); Thu, 03 Sep 2026 17:12:13 +0000 From: Fabiano Rosas To: Vladimir Sementsov-Ogievskiy , peterx@redhat.com Cc: qemu-devel@nongnu.org, vsementsov@yandex-team.ru, Juraj Marcin , Alexander Mikhalitsyn , Akihiko Odaki Subject: Re: [PATCH 01/30] tests/unit/test-vmstate: move to new migration APIs In-Reply-To: <20260825213811.3725682-2-vsementsov@yandex-team.ru> References: <20260825213811.3725682-1-vsementsov@yandex-team.ru> <20260825213811.3725682-2-vsementsov@yandex-team.ru> Date: Thu, 03 Sep 2026 14:12:07 -0300 Message-ID: <87mrty8djs.fsf@suse.de> MIME-Version: 1.0 Content-Type: text/plain X-Rspamd-Queue-Id: 08ED01F847 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Action: no action X-Spamd-Result: default: False [-4.51 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MISSING_XM_UA(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; RCPT_COUNT_SEVEN(0.00)[7]; RCVD_TLS_ALL(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:email,suse.de:mid,imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] Received-SPF: pass client-ip=195.135.223.131; envelope-from=farosas@suse.de; helo=smtp-out2.suse.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 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_DNSWL_MED=-2.3, 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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Vladimir Sementsov-Ogievskiy writes: > Signed-off-by: Vladimir Sementsov-Ogievskiy > --- > tests/unit/test-vmstate.c | 118 ++++++++++---------------------------- > 1 file changed, 30 insertions(+), 88 deletions(-) > > diff --git a/tests/unit/test-vmstate.c b/tests/unit/test-vmstate.c > index df1fb4c7780..23f31730703 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 = open_test_file(true); > - Error *local_err = NULL; > > /* Save file with vmstate */ > - int ret = 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 *desc, void *obj, > int version, const uint8_t *wire, size_t size) > { > QEMUFile *f; > - int ret; > Error *local_err = NULL; > > f = open_test_file(true); > @@ -120,15 +114,16 @@ static int load_vmstate_one(const VMStateDescription *desc, void *obj, > qemu_fclose(f); > > f = open_test_file(false); > - ret = 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)); > - } else{ > - g_assert(!qemu_file_get_error(f)); > + qemu_fclose(f); > + return -EINVAL; > } > + > + g_assert(!qemu_file_get_error(f)); > qemu_fclose(f); > - return ret; > + return 0; > } > > > @@ -362,8 +357,6 @@ static const VMStateDescription vmstate_versioned = { > > static void test_load_v1(void) > { > - Error *local_err = NULL; > - int ret; > uint8_t buf[] = { > 0, 0, 0, 10, /* a */ > 0, 0, 0, 30, /* c */ > @@ -374,10 +367,7 @@ static void test_load_v1(void) > > QEMUFile *loading = open_test_file(false); > TestStruct obj = { .b = 200, .e = 500, .f = 600 }; > - ret = vmstate_load_state(loading, &vmstate_versioned, &obj, 1, &local_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, ==, 10); > g_assert_cmpint(obj.b, ==, 200); > @@ -390,8 +380,6 @@ static void test_load_v1(void) > > static void test_load_v2(void) > { > - Error *local_err = NULL; > - int ret; > uint8_t buf[] = { > 0, 0, 0, 10, /* a */ > 0, 0, 0, 20, /* b */ > @@ -405,10 +393,7 @@ static void test_load_v2(void) > > QEMUFile *loading = open_test_file(false); > TestStruct obj; > - ret = vmstate_load_state(loading, &vmstate_versioned, &obj, 2, &local_err); > - if (ret < 0) { > - error_report_err(local_err); > - } > + vmstate_load_vmsd(loading, &vmstate_versioned, &obj, 2, &error_abort); > g_assert_cmpint(obj.a, ==, 10); > g_assert_cmpint(obj.b, ==, 20); > g_assert_cmpint(obj.c, ==, 30); > @@ -442,16 +427,10 @@ static const VMStateDescription vmstate_skipping = { > > static void test_save_noskip(void) > { > - Error *local_err = NULL; > QEMUFile *fsave = open_test_file(true); > TestStruct obj = { .a = 1, .b = 2, .c = 3, .d = 4, .e = 5, .f = 6, > .skip_c_e = false }; > - int ret = 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)); > > uint8_t expected[] = { > @@ -469,16 +448,10 @@ static void test_save_noskip(void) > > static void test_save_skip(void) > { > - Error *local_err = NULL; > QEMUFile *fsave = open_test_file(true); > TestStruct obj = { .a = 1, .b = 2, .c = 3, .d = 4, .e = 5, .f = 6, > .skip_c_e = true }; > - int ret = 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)); > > uint8_t expected[] = { > @@ -494,8 +467,6 @@ static void test_save_skip(void) > > static void test_load_noskip(void) > { > - Error *local_err = NULL; > - int ret; > uint8_t buf[] = { > 0, 0, 0, 10, /* a */ > 0, 0, 0, 20, /* b */ > @@ -509,10 +480,7 @@ static void test_load_noskip(void) > > QEMUFile *loading = open_test_file(false); > TestStruct obj = { .skip_c_e = false }; > - ret = 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, ==, 10); > g_assert_cmpint(obj.b, ==, 20); > @@ -525,8 +493,6 @@ static void test_load_noskip(void) > > static void test_load_skip(void) > { > - Error *local_err = NULL; > - int ret; > uint8_t buf[] = { > 0, 0, 0, 10, /* a */ > 0, 0, 0, 20, /* b */ > @@ -538,10 +504,7 @@ static void test_load_skip(void) > > QEMUFile *loading = open_test_file(false); > TestStruct obj = { .skip_c_e = true, .c = 300, .e = 500 }; > - ret = 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, ==, 10); > g_assert_cmpint(obj.b, ==, 20); > @@ -863,8 +826,6 @@ static void test_save_q(void) > > static void test_load_q(void) > { > - int ret; > - Error *local_err = NULL; > TestQtailq obj_q = { > .i16 = -512, > .i32 = 70000, > @@ -894,10 +855,7 @@ static void test_load_q(void) > TestQtailq tgt; > > QTAILQ_INIT(&tgt.q); > - ret = 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 = qemu_get_byte(fload); > g_assert(!qemu_file_get_error(fload)); > g_assert_cmpint(tgt.i16, ==, obj_q.i16); > @@ -1015,29 +973,29 @@ static void destroy_domain(gpointer data) > g_free(domain); > } > > -static int domain_preload(void *opaque) > +static bool domain_preload(void *opaque, Error **errp) > { > TestGTreeDomain *domain = opaque; > > domain->mappings = g_tree_new_full((GCompareDataFunc)interval_cmp, > NULL, g_free, g_free); > - return 0; > + return true; > } > > -static int iommu_preload(void *opaque) > +static bool iommu_preload(void *opaque, Error **errp) > { > TestGTreeIOMMU *iommu = opaque; > > iommu->domains = g_tree_new_full((GCompareDataFunc)int_cmp, > NULL, NULL, destroy_domain); > - return 0; > + return true; > } > > static const VMStateDescription vmstate_domain = { > .name = "domain", > .version_id = 1, > .minimum_version_id = 1, > - .pre_load = domain_preload, > + .pre_load_errp = domain_preload, > .fields = (const VMStateField[]) { > VMSTATE_INT32(id, TestGTreeDomain), > VMSTATE_GTREE_V(mappings, TestGTreeDomain, 1, > @@ -1073,7 +1031,7 @@ static const VMStateDescription vmstate_iommu = { > .name = "iommu", > .version_id = 1, > .minimum_version_id = 1, > - .pre_load = iommu_preload, > + .pre_load_errp = iommu_preload, > .fields = (const VMStateField[]) { > VMSTATE_INT32(id, TestGTreeIOMMU), > VMSTATE_GTREE_DIRECT_KEY_V(domains, TestGTreeIOMMU, 1, > @@ -1239,8 +1197,6 @@ static void diff_iommu(TestGTreeIOMMU *iommu1, TestGTreeIOMMU *iommu2) > > static void test_gtree_load_domain(void) > { > - Error *local_err = NULL; > - int ret; > TestGTreeDomain *dest_domain = g_new0(TestGTreeDomain, 1); > TestGTreeDomain *orig_domain = create_first_domain(); > QEMUFile *fload, *fsave; > @@ -1253,11 +1209,7 @@ static void test_gtree_load_domain(void) > > fload = open_test_file(false); > > - ret = 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 = qemu_get_byte(fload); > g_assert(!qemu_file_get_error(fload)); > g_assert_cmpint(orig_domain->id, ==, dest_domain->id); > @@ -1360,8 +1312,6 @@ static void test_gtree_save_iommu(void) > > static void test_gtree_load_iommu(void) > { > - Error *local_err = NULL; > - int ret; > TestGTreeIOMMU *dest_iommu = g_new0(TestGTreeIOMMU, 1); > TestGTreeIOMMU *orig_iommu = create_iommu(); > QEMUFile *fsave, *fload; > @@ -1373,10 +1323,7 @@ static void test_gtree_load_iommu(void) > qemu_fclose(fsave); > > fload = open_test_file(false); > - ret = vmstate_load_state(fload, &vmstate_iommu, dest_iommu, 1, &local_err); > - if (ret < 0) { > - error_report_err(local_err); > - } > + vmstate_load_vmsd(fload, &vmstate_iommu, dest_iommu, 1, &error_abort); > eof = qemu_get_byte(fload); > g_assert(!qemu_file_get_error(fload)); > g_assert_cmpint(orig_iommu->id, ==, dest_iommu->id); > @@ -1498,8 +1445,6 @@ static void test_save_qlist(void) > > static void test_load_qlist(void) > { > - Error *local_err = NULL; > - int ret; > QEMUFile *fsave, *fload; > TestQListContainer *orig_container = alloc_container(); > TestQListContainer *dest_container = g_new0(TestQListContainer, 1); > @@ -1513,11 +1458,8 @@ static void test_load_qlist(void) > qemu_fclose(fsave); > > fload = open_test_file(false); > - ret = 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 = qemu_get_byte(fload); > g_assert(!qemu_file_get_error(fload)); > g_assert_cmpint(eof, ==, QEMU_VM_EOF); > @@ -1534,22 +1476,22 @@ typedef struct TmpTestStruct { > int64_t diff; > } TmpTestStruct; > > -static int tmp_child_pre_save(void *opaque) > +static bool tmp_child_pre_save(void *opaque, Error **errp) > { > struct TmpTestStruct *tts = opaque; > > tts->diff = tts->parent->b - tts->parent->a; > > - return 0; > + return true; > } > > -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 = opaque; > > tts->parent->b = tts->parent->a + tts->diff; > > - return 0; > + return true; > } > > static const VMStateDescription vmstate_tmp_back_to_parent = { > @@ -1562,8 +1504,8 @@ static const VMStateDescription vmstate_tmp_back_to_parent = { > > static const VMStateDescription vmstate_tmp_child = { > .name = "test/tmp_child", > - .pre_save = tmp_child_pre_save, > - .post_load = tmp_child_post_load, > + .pre_save_errp = tmp_child_pre_save, > + .post_load_errp = tmp_child_post_load, > .fields = (const VMStateField[]) { > VMSTATE_INT64(diff, TmpTestStruct), > VMSTATE_STRUCT_POINTER(parent, TmpTestStruct, Reviewed-by: Fabiano Rosas