From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381452; cv=none; d=zohomail.com; s=zohoarc; b=f+pUC9pSEywy7qXQyo3dtsyT3NFsJFNgJPQQIuyQV99DWh5kJ4apspAQ9zKdkCUZWEymSMqnBnj1T3HPrF6z66RvxONIuL6bq4N9VkZbqvQn6oL/fJNuOzZfGwFkSvmmtG4r5Oe/ooTTqA3wutaOxFj/OEFilCTuQV/cgoiHw+M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381452; 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=L2BEpA79xlRxn/mL5HLkV07Wi5Q1gSefKGNEpeLyjlg=; b=PIa14C2+YoCsrdsa8vF8mMK+sL9P2ZE9qJLuQYy+FhbGhk9bae8dv42cNo6I325WzHYNQ2UEvBMByO739opkT7JbYFMtqKWQx2kGavltBk6lNQnqT3h5WplY3nHIMtXZ0w3tPPvL6NVpUeKBS1wLZn7R7CMvhXh4WuM/7MXbMAE= 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 1774381452085787.1573221808605; Tue, 24 Mar 2026 12:44:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fL-0003C1-EM; Tue, 24 Mar 2026 15:43:51 -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 1w57fB-0003A7-Oc for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:43 -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 1w57fA-000834-9w for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:41 -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 51B065BE1C; Tue, 24 Mar 2026 19:43:38 +0000 (UTC) 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 1F9EB43FE4; Tue, 24 Mar 2026 19:43:36 +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 6AX9N2jpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381418; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L2BEpA79xlRxn/mL5HLkV07Wi5Q1gSefKGNEpeLyjlg=; b=aqLYBy8wnvyVgmxZzzLP6Owxh/meho9HTNeXL31D2HkBVALbgCx4RP6kQlzFJtolmO7ecF HzjmpoAu2bZt6iJYwdKduswcl9OCIFD3nlCSjpBm6aOD96xY/hHR0o4dRRXf3hoFQ7uBJ9 LatkdXwDCdnbi7sLNy46nu6RwtJzfKU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381418; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L2BEpA79xlRxn/mL5HLkV07Wi5Q1gSefKGNEpeLyjlg=; b=wn1ko8tgzvVVDq9UrLRWSI24lVWLtWyHwDLCOvqj3cIhBELR3f2KUYXKUOHTbWu3gU5/Hj uPOhVcAUxosV0hBA== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=aqLYBy8w; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=wn1ko8tg DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381418; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L2BEpA79xlRxn/mL5HLkV07Wi5Q1gSefKGNEpeLyjlg=; b=aqLYBy8wnvyVgmxZzzLP6Owxh/meho9HTNeXL31D2HkBVALbgCx4RP6kQlzFJtolmO7ecF HzjmpoAu2bZt6iJYwdKduswcl9OCIFD3nlCSjpBm6aOD96xY/hHR0o4dRRXf3hoFQ7uBJ9 LatkdXwDCdnbi7sLNy46nu6RwtJzfKU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381418; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L2BEpA79xlRxn/mL5HLkV07Wi5Q1gSefKGNEpeLyjlg=; b=wn1ko8tgzvVVDq9UrLRWSI24lVWLtWyHwDLCOvqj3cIhBELR3f2KUYXKUOHTbWu3gU5/Hj uPOhVcAUxosV0hBA== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 01/17] vmstate: fixup the use of AUTO_ALLOC flag Date: Tue, 24 Mar 2026 16:43:16 -0300 Message-ID: <20260324194333.30004-2-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 51B065BE1C 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381455472154100 Content-Type: text/plain; charset="utf-8" Please add this fixup this somewhere Signed-off-by: Fabiano Rosas --- migration/savevm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migration/savevm.c b/migration/savevm.c index 34223de818..db0721996c 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -869,7 +869,7 @@ static void vmstate_check(const VMStateDescription *vms= d) if (field) { while (field->name) { if (field->flags & VMS_ARRAY_OF_POINTER) { - if (VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { + if (field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { /* * Size must be provided because dest QEMU needs that * info to know what to allocate --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381458; cv=none; d=zohomail.com; s=zohoarc; b=MDOyNAJRJipuSzONWXwG66buK+4ycbmdQ7WuW9PoqtyED7ge50j3fRfjbwqBH6fK+0BNEraxnwrZmACx7PSWS4Dpvr8ww12qaA1swo42K9DZgjuYhR25t+jAHETzVvDcvLakodjG4eQc12uiHVUM/uFlXJ+v6jl91MpVoXJuxuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381458; 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=mOj3zMUeBqO9nHYs5Dx7oYii7b7IiXytgZof79LgWPU=; b=daDtv0wlgFQjtcLlBkNj0OwWEnl8X4jidFm4uCGaBlYuGfe/lcrna+Jyh9AmsdAXEOjF9MYiRkd7Oxxd8RFB2yRRB4wVloMDODM6m7LC35wF/zeEKDxlMpUPJoBE0vx6XFBwSnloEHGPG/ubEPpEhtY7U0xnQQoS61qFhhfT2p8= 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 1774381458586701.8784393904077; Tue, 24 Mar 2026 12:44:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fU-0003DK-W8; Tue, 24 Mar 2026 15:44:01 -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 1w57fH-0003BO-Cb for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:48 -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 1w57fF-00083V-Q9 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:47 -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 D94A95BE1D; Tue, 24 Mar 2026 19:43:39 +0000 (UTC) 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 B19C943FE4; Tue, 24 Mar 2026 19:43:38 +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 qKsEIGrpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381419; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mOj3zMUeBqO9nHYs5Dx7oYii7b7IiXytgZof79LgWPU=; b=DRINr/cehm+I6s678RRyGv01dVLI6BZPjlBucnhosyw/zsx7O5Q+fMjsV0xhdNOnkzIlI2 OkXeL9ppvpFWNeS30JmYSPcI+VcFawtIr1hmIaH+DvAkZiJecWU3HZDrDk2ivuvI4csWLa ifca4sJJavwjXX+BbFm10Q0KyOXIDNc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381419; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mOj3zMUeBqO9nHYs5Dx7oYii7b7IiXytgZof79LgWPU=; b=9v1oANsGkUrZshmbXwD/jmO1O0RZgxYt3J2FAMX5H8s4UVDBUG7MBs8vnQUtyqqIXhK6VG FZxRZGNCPOALbrCQ== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b="DRINr/ce"; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=9v1oANsG DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381419; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mOj3zMUeBqO9nHYs5Dx7oYii7b7IiXytgZof79LgWPU=; b=DRINr/cehm+I6s678RRyGv01dVLI6BZPjlBucnhosyw/zsx7O5Q+fMjsV0xhdNOnkzIlI2 OkXeL9ppvpFWNeS30JmYSPcI+VcFawtIr1hmIaH+DvAkZiJecWU3HZDrDk2ivuvI4csWLa ifca4sJJavwjXX+BbFm10Q0KyOXIDNc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381419; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mOj3zMUeBqO9nHYs5Dx7oYii7b7IiXytgZof79LgWPU=; b=9v1oANsGkUrZshmbXwD/jmO1O0RZgxYt3J2FAMX5H8s4UVDBUG7MBs8vnQUtyqqIXhK6VG FZxRZGNCPOALbrCQ== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 02/17] vmstate: Remove vmstate_use_marker_field Date: Tue, 24 Mar 2026 16:43:17 -0300 Message-ID: <20260324194333.30004-3-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: D94A95BE1D 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381460819158500 Content-Type: text/plain; charset="utf-8" Bring back is_null, but set use_marker_field based on it. This makes it clear that the compression logic is only because of the null marker. When the marker is not null, it doesn't make sense to compress. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 7d7d9c7e18..7edfa3d990 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -240,22 +240,6 @@ static bool vmstate_post_load(const VMStateDescription= *vmsd, return true; } =20 - -/* - * If we will use a ptr marker in the stream for a field? Two use cases: - * - * (1) When used with VMS_ARRAY_OF_POINTER_ALLOW_NULL, it must always be - * present to imply the population status of the pointer. - * - * (2) When used with normal VMSD array fields, only emit a null ptr marker - * if the pointer is NULL. - */ -static inline bool -vmstate_use_marker_field(void *ptr, int size, bool dynamic_array) -{ - return (!ptr && size) || dynamic_array; -} - bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescription *vmsd, void *opaque, int version_id, Error **errp) { @@ -318,8 +302,8 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, curr_elem =3D *(void **)curr_elem_p; } =20 - use_marker_field =3D vmstate_use_marker_field(curr_elem, s= ize, - use_dynamic_ar= ray); + use_marker_field =3D use_dynamic_array || (!curr_elem && s= ize); + if (use_marker_field) { /* Read the marker instead of VMSD first */ if (!vmstate_ptr_marker_load(f, &load_field, errp)) { @@ -634,7 +618,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); JSONWriter *vmdesc_loop =3D vmdesc; - bool use_marker_field_prev =3D false; + bool is_null_prev =3D false; /* * When this is enabled, it means we will always push a ptr * marker first for each element saying if it's populated. @@ -651,7 +635,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, for (i =3D 0; i < n_elems; i++) { void *curr_elem =3D first_elem + size * i; const VMStateField *inner_field; - bool use_marker_field; + bool use_marker_field, is_null; int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { @@ -659,8 +643,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, curr_elem =3D *(void **)curr_elem; } =20 - use_marker_field =3D vmstate_use_marker_field(curr_elem, s= ize, - use_dynamic_ar= ray); + is_null =3D (!curr_elem && size); + use_marker_field =3D use_dynamic_array || is_null; =20 if (use_marker_field) { inner_field =3D vmsd_create_ptr_marker_field(field); @@ -681,16 +665,16 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, */ if (vmdesc && vmsd_can_compress(field) && (field->flags & VMS_ARRAY_OF_POINTER) && - use_marker_field !=3D use_marker_field_prev) { + is_null !=3D is_null_prev) { =20 - use_marker_field_prev =3D use_marker_field; + is_null_prev =3D is_null; vmdesc_loop =3D vmdesc; =20 for (int j =3D i + 1; j < n_elems; j++) { void *elem =3D *(void **)(first_elem + size * j); - bool elem_use_marker_field =3D !elem && size; + bool elem_is_null =3D !elem && size; =20 - if (use_marker_field !=3D elem_use_marker_field) { + if (is_null !=3D elem_is_null) { max_elems =3D j - i; break; } --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381501; cv=none; d=zohomail.com; s=zohoarc; b=YGZD9pKrZlSoQYzPgX1a4pfhutjPuvXUZ2WU4UiTYn4tRHGYlFGR4Mk05Jdvo0ifVV/uYgXZcba4bp34XtGbWe9Va2riFJqiB0R4/C5pBB+qwRJkmAgLkE2FM+C2xGVRgFlWvFNrQ/IFIq3Icg3vpN4KBQ9eJYuRGDpyVV3HF5Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381501; 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=e2FV9zihxhp8bsTYaLNeKNqOqq6SsZysoqtwXgfHDvo=; b=Lp1aZc3akg4zkJcAGm9MeD/b45JNey0hyuPz3/VEKa6PQYfGIBFxoObBIRVLa74vF9/N/QuHVUdn1xox5qX2zAGD3NveqyoWVfeyE4QDtRSlAeYVEQlMrvB7Vu0peha6BBLxaagElXpbQdZe0BoBmHa2NQ1TwDG6V34gsBPo27Y= 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 1774381501629618.1515660999543; Tue, 24 Mar 2026 12:45:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fV-0003DQ-BR; Tue, 24 Mar 2026 15:44:01 -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 1w57fP-0003Ce-Aq for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:56 -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 1w57fM-00086t-2T for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:54 -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 6C09B5BE1E; Tue, 24 Mar 2026 19:43:41 +0000 (UTC) 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 44E9843FE4; Tue, 24 Mar 2026 19:43:40 +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 gLOKBWzpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381421; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e2FV9zihxhp8bsTYaLNeKNqOqq6SsZysoqtwXgfHDvo=; b=qkcutVcOh60wGwlSNvx+tVUnkNzjrhA9OcVqPZM6SJPRoJwsA7EF7wr9OWwsZrhAR76Vix inWxOx8PvBT2rlkfKw9tMF40X9kiXpVP39/6ymByzfAg+FWBE+I4Hd4v7daeoipN3dWJJO Lwo7u3y/mNCM0RMuozYLDOiiD1eEM7g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381421; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e2FV9zihxhp8bsTYaLNeKNqOqq6SsZysoqtwXgfHDvo=; b=7assybSdChlpQdVJ6uY2sYV2V+7XuH/ukSl8dOTUcRzlZmwy8/8uxy3Vwk4Mmc9HAC7xrG 5uN4OOV23sFjeIAA== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=qkcutVcO; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=7assybSd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381421; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e2FV9zihxhp8bsTYaLNeKNqOqq6SsZysoqtwXgfHDvo=; b=qkcutVcOh60wGwlSNvx+tVUnkNzjrhA9OcVqPZM6SJPRoJwsA7EF7wr9OWwsZrhAR76Vix inWxOx8PvBT2rlkfKw9tMF40X9kiXpVP39/6ymByzfAg+FWBE+I4Hd4v7daeoipN3dWJJO Lwo7u3y/mNCM0RMuozYLDOiiD1eEM7g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381421; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e2FV9zihxhp8bsTYaLNeKNqOqq6SsZysoqtwXgfHDvo=; b=7assybSdChlpQdVJ6uY2sYV2V+7XuH/ukSl8dOTUcRzlZmwy8/8uxy3Vwk4Mmc9HAC7xrG 5uN4OOV23sFjeIAA== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 03/17] vmstate: Stop checking size for nullptr compression Date: Tue, 24 Mar 2026 16:43:18 -0300 Message-ID: <20260324194333.30004-4-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 6C09B5BE1E 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381503822154100 Content-Type: text/plain; charset="utf-8" The NULL pointer marker code applies only to VMS_ARRAY_OF_POINTER, where the size is never NULL. Move the setting of is_null under VMS_ARRAY_OF_POINTER, so we can stop checking the size. Signed-off-by: Fabiano Rosas --- AFAICS, the size actually should never be NULL, but there are a few vmsds doing a hack with VMS_SINGLE. I can't be bothered to learn about it right now. --- migration/vmstate.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 7edfa3d990..d7b1bc6b86 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -635,15 +635,15 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, for (i =3D 0; i < n_elems; i++) { void *curr_elem =3D first_elem + size * i; const VMStateField *inner_field; - bool use_marker_field, is_null; + bool use_marker_field, is_null =3D false; int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { assert(curr_elem); curr_elem =3D *(void **)curr_elem; + is_null =3D !curr_elem; } =20 - is_null =3D (!curr_elem && size); use_marker_field =3D use_dynamic_array || is_null; =20 if (use_marker_field) { @@ -672,7 +672,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, =20 for (int j =3D i + 1; j < n_elems; j++) { void *elem =3D *(void **)(first_elem + size * j); - bool elem_is_null =3D !elem && size; + bool elem_is_null =3D !elem; =20 if (is_null !=3D elem_is_null) { max_elems =3D j - i; --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381548; cv=none; d=zohomail.com; s=zohoarc; b=d1goNvTI086vVt+gwh/brpR+NkIG8PGK3sVRETV6nH7AdvDI5cb4f84bodRg2Jll0Ku2oERZKu7O1A2egGo8WWXpUzfAk9YzNG2HzkDV70dOfcf7d9aX+UB7QAamI7qKEfpbLreLFG09FnHlG4SxP1FymCpXTUMmmGmuzJe/jJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381548; 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=bTso67SWkueoernNlzrQNovHxxZ3l8z99afvZIli9YQ=; b=I1VbUU+XnEu+uCRL0SLQb3GRyRvcQvQA65agxJyUM1MjQJZQKpskmtkEb+MR+yOk5MSxwQdehmiMi//uw+DMXVBNKI6CO1mprv5GjI3zl7yIDStY6PsjnvM1fFGF1+nel5QHceTo8nqF5oCEdTkMbfWvNwhoIRBfgnRSWbGsUhM= 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 1774381548028688.5283371295767; Tue, 24 Mar 2026 12:45:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fX-0003Et-Fm; Tue, 24 Mar 2026 15:44:03 -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 1w57fW-0003E6-8q for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:02 -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 1w57fU-0008Aa-Lq for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:02 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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 F2E975BE1C; Tue, 24 Mar 2026 19:43:42 +0000 (UTC) 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 CB93443FE4; Tue, 24 Mar 2026 19:43:41 +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 YOZqJm3pwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381423; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bTso67SWkueoernNlzrQNovHxxZ3l8z99afvZIli9YQ=; b=zCDfJnWv0kreJk70tTH3a6FDFSBlspHxf5IKDCRL6VR8EZ1JPl8ff/lmn0Z69493rhosdh aTGtjxVkihhYkaHzsMkpGfb4fSBLY+9FeVE22mDO5+verDcBUAveFRP6mDgPi6XkL/2URc u13kazQiqP1PzBs62crd5DYgqZ57mlw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381423; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bTso67SWkueoernNlzrQNovHxxZ3l8z99afvZIli9YQ=; b=pEmeV9Y9Aiqf3pQpDAMhOiQn0rFyWRPTQuphHd03Q/qyXyjawIY7F59iLeYshdrZmi7YA3 IOiuu8U2knEVRDDA== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381422; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bTso67SWkueoernNlzrQNovHxxZ3l8z99afvZIli9YQ=; b=wEt8FwjcokX7IluUDAG4ow3RBtGf92VDKwVT7GNFZ9G8CW1NsS2KsmNQWzeutf+Ly5pgO7 F4pKjH1dCTM8370EKr6QwZrj8GY5evD703Xzmzjb1JhfUHm/9km8/D38MEIhdOZE0Y3HqR cLAzjzj6Abwi9yz74NbQC5jgzOxernY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381422; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bTso67SWkueoernNlzrQNovHxxZ3l8z99afvZIli9YQ=; b=IX6DgJiG0VStoapP71C9ZqnD0T/rmQ9guvljMhlR9a15QVhv3JpOopP5l9spZfQuauUyBY c8LxtnCVPkdGX6Aw== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 04/17] vmstate: Set error inside of vmstate_save_field_with_vmdesc Date: Tue, 24 Mar 2026 16:43:19 -0300 Message-ID: <20260324194333.30004-5-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_TRACE(0.00)[0:+]; URIBL_BLOCKED(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:email]; ARC_NA(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_TLS_ALL(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email] X-Spam-Score: -2.80 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=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, 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: qemu development 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 @suse.de) (identity @suse.de) X-ZM-MESSAGEID: 1774381550553154100 Content-Type: text/plain; charset="utf-8" This reduces duplication and keeps the top level less visually polluted. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index d7b1bc6b86..dec9cf920b 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -586,6 +586,11 @@ vmstate_save_field_with_vmdesc(QEMUFile *f, void *pv, = size_t size, =20 vmsd_desc_field_end(vmsd, vmdesc, field, written_bytes); =20 + if (!ok) { + error_prepend(errp, "Save of field %s/%s failed: ", + vmsd->name, field->name); + } + return ok; } =20 @@ -691,8 +696,6 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, } =20 if (!ok) { - error_prepend(errp, "Save of field %s/%s failed: ", - vmsd->name, field->name); goto out; } =20 @@ -709,10 +712,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, field->size, vmsd, field, vmdesc_loop, i, max_elems, errp= ); - if (!ok) { - error_prepend(errp, "Save of field %s/%s failed: ", - vmsd->name, field->name); goto out; } } --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381508; cv=none; d=zohomail.com; s=zohoarc; b=Q3vGVdDzXvPX/90wBSeQq9wAuZaxcm+1y0z9DAjqa19P8SMgbIhMu+GTJSRDzMKNwrffm4OCMvX+0clbWyi3CvOiplaNwbl/+msRqR/u+bH9mo9MGey97BW2UwFFtg0N9IYeWqiTJVaMV/Bq98vgZ8vQXsLP2gZ6yxqEWP7yP1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381508; 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=mqFU08QiemyHMKmACwXdYM3VqArmk1wjvFdrAmao4JI=; b=KV/EVR2npMPYWokIWTWFMYAlOCPSlRMvgFnDzvOtAnE3vm4Pru9fsnJwvWsaswMc85CDs68QYrQbnHI6uuUiKvnrzUmHobWfhZ9JwLgET4Nn1JnqkylOKV7ggQtT8pfYGGWE1CrjkywNG9mE8dhYTQ955V/fP3eu6MMxHUWYSXU= 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 1774381508428641.0379264558103; Tue, 24 Mar 2026 12:45:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fj-0003IM-AS; Tue, 24 Mar 2026 15:44: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 1w57fd-0003G6-CP for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:09 -0400 Received: from smtp-out2.suse.de ([2a07:de40:b251:101:10:150:64:2]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fb-0008EN-Nj for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:09 -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 867D15BD56; Tue, 24 Mar 2026 19:43:44 +0000 (UTC) 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 5F42B43FE4; Tue, 24 Mar 2026 19:43:43 +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 kJjuC2/pwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381424; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mqFU08QiemyHMKmACwXdYM3VqArmk1wjvFdrAmao4JI=; b=n031BixcOB1TXteDcoVZ0zbAOgEnVYA9yBNrBF9//Ev/k7dvhh11GAeHyZq2PX8Zrsl81Y pqPMlrZlYyQC0tN3jiXmf/ew84dYU1N37QzNUjxa5trVusqQyjxQz2RNEMYo/EPUeKzc9Q H/60EoGNytkvxwTGCYGIfqrdrursXHM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381424; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mqFU08QiemyHMKmACwXdYM3VqArmk1wjvFdrAmao4JI=; b=PEFEgJDwPPJ0lriYoNtNuwkSsyPzRUce5oP2DiM0gTJvRSIQwRGUw9YED0fgOFOTkUK8yu rjCHXmEVn9cPuDBA== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=n031Bixc; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=PEFEgJDw DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381424; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mqFU08QiemyHMKmACwXdYM3VqArmk1wjvFdrAmao4JI=; b=n031BixcOB1TXteDcoVZ0zbAOgEnVYA9yBNrBF9//Ev/k7dvhh11GAeHyZq2PX8Zrsl81Y pqPMlrZlYyQC0tN3jiXmf/ew84dYU1N37QzNUjxa5trVusqQyjxQz2RNEMYo/EPUeKzc9Q H/60EoGNytkvxwTGCYGIfqrdrursXHM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381424; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mqFU08QiemyHMKmACwXdYM3VqArmk1wjvFdrAmao4JI=; b=PEFEgJDwPPJ0lriYoNtNuwkSsyPzRUce5oP2DiM0gTJvRSIQwRGUw9YED0fgOFOTkUK8yu rjCHXmEVn9cPuDBA== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 05/17] vmstate: Remove vmdesc_loop Date: Tue, 24 Mar 2026 16:43:20 -0300 Message-ID: <20260324194333.30004-6-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 867D15BD56 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=2a07:de40:b251:101:10:150:64:2; envelope-from=farosas@suse.de; helo=smtp-out2.suse.de 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381510777158500 Content-Type: text/plain; charset="utf-8" The vmdesc_loop variable is being used as a hacky way of writing the JSON description only for the first element of a compressed array. There are also a few implicit uses, such as writing the JSON for the first non-compressed element after a compressed portion. Future work will have trouble with this. Use a simple boolean to be explicit now. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index dec9cf920b..7a12245d36 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -622,8 +622,9 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, void *first_elem =3D opaque + field->offset; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); - JSONWriter *vmdesc_loop =3D vmdesc; bool is_null_prev =3D false; + bool use_vmdesc =3D true; + /* * When this is enabled, it means we will always push a ptr * marker first for each element saying if it's populated. @@ -673,7 +674,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, is_null !=3D is_null_prev) { =20 is_null_prev =3D is_null; - vmdesc_loop =3D vmdesc; + use_vmdesc =3D true; =20 for (int j =3D i + 1; j < n_elems; j++) { void *elem =3D *(void **)(first_elem + size * j); @@ -686,8 +687,13 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, } } =20 + if (use_dynamic_array) { + use_vmdesc =3D true; + } + ok =3D vmstate_save_field_with_vmdesc(f, curr_elem, size, = vmsd, - inner_field, vmdesc_lo= op, + inner_field, + use_vmdesc ? vmdesc : = NULL, i, max_elems, errp); =20 /* If we used a fake temp field.. free it now */ @@ -708,19 +714,16 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, * NOTE: do not use vmstate_size() here because we want * to dump the real VMSD object now. */ - ok =3D vmstate_save_field_with_vmdesc(f, curr_elem, - field->size, vmsd, - field, vmdesc_loop, - i, max_elems, errp= ); + ok =3D vmstate_save_field_with_vmdesc( + f, curr_elem, field->size, vmsd, field, + use_vmdesc ? vmdesc : NULL, i, max_elems, errp); + if (!ok) { goto out; } } =20 - /* Compressed arrays only care about the first element */ - if (vmdesc_loop && vmsd_can_compress(field)) { - vmdesc_loop =3D NULL; - } + use_vmdesc =3D false; } } else { if (field->flags & VMS_MUST_EXIST) { --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381491; cv=none; d=zohomail.com; s=zohoarc; b=n/I7tpC9QPvA7x+KmQKLR0kso9FeQNUa6IeLQgHVK/WhRfNp4gg9ZVtKcnM7z0qkzqVNlL+fr+oh3BsZ++OfaN7QA2U3R54o+Kjw/ZWavohlqc7D95jYTBJ2Yv9fzrDtltJjVRSHqToWagJFQg+v8yM0IcMuVI7dy2xxmUGpF+g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381491; 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=T7Y0B9fYyfVHM63msfI41W8dKbr2u81xFRLOCF+eFX8=; b=IuCS90yInAwp+56/ErXvUAjd3IpgIj5CODwDyyHnArkROcrMGrz1Ba+R75nRGQLjNI6omixPnaki33T1WHxu0jc5RL/rIST9HVfj+vNXhQ6RJu21A64sQofY5lc1vtu2ZWxXWZKBNcDpAlF/dP7CJF85yGERmfst+FWWIfBAvT8= 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 177438149153118.632696791621584; Tue, 24 Mar 2026 12:44:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fn-0003NT-6P; Tue, 24 Mar 2026 15:44:19 -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 1w57fk-0003Iz-33 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:17 -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 1w57fh-0008FZ-Tj for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:15 -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 1BFBF5BE1F; Tue, 24 Mar 2026 19:43:46 +0000 (UTC) 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 E6FD143FE4; Tue, 24 Mar 2026 19:43:44 +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 2AoOLXDpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381426; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7Y0B9fYyfVHM63msfI41W8dKbr2u81xFRLOCF+eFX8=; b=eiu1YH5y2ROoxm9/sK43I0kvlvGuRJl60enCqX+4yotiNqDJZcNDHqBoJWeLrtYZIYgvMs Xws7T7j0roy7YkyGxTyg3XnS+2aG74cPEarzQVy6WYz46yYj4cnmZxH14JzfJqmnXm+YIt 3H3bZziqsYNDVvOdHfYlwtBGZUhHFz4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381426; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7Y0B9fYyfVHM63msfI41W8dKbr2u81xFRLOCF+eFX8=; b=d8S+KYgzZF0zAx1Ud3Z6ZSze8Sl8A8nb2bTvmo6JO/3OvV/1GFPzxC4etX1US/Gao8Sc8q lxcIEpGQ4VcW38AA== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=eiu1YH5y; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=d8S+KYgz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381426; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7Y0B9fYyfVHM63msfI41W8dKbr2u81xFRLOCF+eFX8=; b=eiu1YH5y2ROoxm9/sK43I0kvlvGuRJl60enCqX+4yotiNqDJZcNDHqBoJWeLrtYZIYgvMs Xws7T7j0roy7YkyGxTyg3XnS+2aG74cPEarzQVy6WYz46yYj4cnmZxH14JzfJqmnXm+YIt 3H3bZziqsYNDVvOdHfYlwtBGZUhHFz4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381426; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=T7Y0B9fYyfVHM63msfI41W8dKbr2u81xFRLOCF+eFX8=; b=d8S+KYgzZF0zAx1Ud3Z6ZSze8Sl8A8nb2bTvmo6JO/3OvV/1GFPzxC4etX1US/Gao8Sc8q lxcIEpGQ4VcW38AA== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 06/17] vmstate: Put array of pointers code together Date: Tue, 24 Mar 2026 16:43:21 -0300 Message-ID: <20260324194333.30004-7-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 1BFBF5BE1F 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381492643158500 Content-Type: text/plain; charset="utf-8" In vmstate_save|load_vmsd[_v], move the code handling VMS_ARRAY_OF_POINTER all to the same block. These functions deal with single elements, scalar arrays and arrays of pointers, of which the latter is the most complex code. Group that use-case so it's easier to reason about. This allows for a significant design cleanup, which is to stop using the inner_field variable in the case where there is NO pointer marker. Now the inner_field is internal to the VMS_ARRAY_OF_POINTER code. By adding a save_field boolean, we can reuse the "actual field" write for the !use_marker case. This brings the benefit of being able to drop the field->size specialization. Like so: =3D=3D=3D before: size =3D vmstate_size(); if (use_marker) { inner_field =3D fake; } else { inner_field =3D field; } vmstate_save_field_with_vmdesc(inner_field, size) if (use_marker && !curr) { vmstate_save_field_with_vmdesc(field, field->size) } after: size =3D vmstate_size(); if (use_marker) { inner_field =3D fake; vmstate_save_field_with_vmdesc(inner_field, 1) save_field =3D !curr; } if (save_field) { vmstate_save_field_with_vmdesc(field, size) } Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 193 +++++++++++++++++++++----------------------- 1 file changed, 92 insertions(+), 101 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 7a12245d36..a190c3f63f 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -277,12 +277,6 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, void *first_elem =3D opaque + field->offset; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); - /* - * When this is enabled, it means we will always push a ptr - * marker first for each element saying if it's populated. - */ - bool use_dynamic_array =3D - field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; =20 vmstate_handle_alloc(first_elem, field, opaque); if (field->flags & VMS_POINTER) { @@ -294,36 +288,40 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, /* If we will process the load of field? */ bool load_field =3D true; bool ok =3D true; - bool use_marker_field; void *curr_elem_p =3D first_elem + size * i; void *curr_elem =3D curr_elem_p; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { + bool use_dynamic_array =3D + field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; + bool use_marker_field; + curr_elem =3D *(void **)curr_elem_p; - } =20 - use_marker_field =3D use_dynamic_array || (!curr_elem && s= ize); + use_marker_field =3D use_dynamic_array || !curr_elem; =20 - if (use_marker_field) { - /* Read the marker instead of VMSD first */ - if (!vmstate_ptr_marker_load(f, &load_field, errp)) { - trace_vmstate_load_field_error(field->name, -EINVA= L); - return false; - } + if (use_marker_field) { + /* Read the marker instead of VMSD first */ + if (!vmstate_ptr_marker_load(f, &load_field, errp)= ) { + trace_vmstate_load_field_error(field->name, + -EINVAL); + return false; + } =20 - if (load_field) { - /* - * When reaching here, it means we received a - * non-NULL ptr marker, so we need to populate the - * field before loading it. - * - * NOTE: do not use vmstate_size() here, because we - * need the object size, not entry size of the - * array. - */ - curr_elem =3D g_malloc0(field->size); - /* Remember to update the root pointer! */ - *(void **)curr_elem_p =3D curr_elem; + if (load_field) { + /* + * When reaching here, it means we received a + * non-NULL ptr marker, so we need to populate= the + * field before loading it. + * + * NOTE: do not use vmstate_size() here, becau= se we + * need the object size, not entry size of the + * array. + */ + curr_elem =3D g_malloc0(field->size); + /* Remember to update the root pointer! */ + *(void **)curr_elem_p =3D curr_elem; + } } } =20 @@ -625,13 +623,6 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, bool is_null_prev =3D false; bool use_vmdesc =3D true; =20 - /* - * When this is enabled, it means we will always push a ptr - * marker first for each element saying if it's populated. - */ - bool use_dynamic_array =3D - field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; - trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems= ); if (field->flags & VMS_POINTER) { first_elem =3D *(void **)first_elem; @@ -639,83 +630,83 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, } =20 for (i =3D 0; i < n_elems; i++) { + bool save_field =3D true; void *curr_elem =3D first_elem + size * i; - const VMStateField *inner_field; - bool use_marker_field, is_null =3D false; int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { + const VMStateField *inner_field; + bool use_marker_field, is_null, use_dynamic_array; + assert(curr_elem); curr_elem =3D *(void **)curr_elem; + is_null =3D !curr_elem; - } =20 - use_marker_field =3D use_dynamic_array || is_null; - - if (use_marker_field) { - inner_field =3D vmsd_create_ptr_marker_field(field); - } else { - inner_field =3D field; - } - - /* - * This logic only matters when dumping VM Desc, and only - * when the VMSD field can be compressed. - * - * Due to the fake nullptr handling above, if there's mixed - * null/non-null data, it doesn't make sense to emit a - * compressed array representation spanning the entire arr= ay - * because the field types will be different (e.g. struct - * vs. nullptr). Search ahead for the next null/non-null e= lement - * and start a new compressed array if found. - */ - if (vmdesc && vmsd_can_compress(field) && - (field->flags & VMS_ARRAY_OF_POINTER) && - is_null !=3D is_null_prev) { - - is_null_prev =3D is_null; - use_vmdesc =3D true; - - for (int j =3D i + 1; j < n_elems; j++) { - void *elem =3D *(void **)(first_elem + size * j); - bool elem_is_null =3D !elem; - - if (is_null !=3D elem_is_null) { - max_elems =3D j - i; - break; - } - } - } - - if (use_dynamic_array) { - use_vmdesc =3D true; - } - - ok =3D vmstate_save_field_with_vmdesc(f, curr_elem, size, = vmsd, - inner_field, - use_vmdesc ? vmdesc : = NULL, - i, max_elems, errp); - - /* If we used a fake temp field.. free it now */ - if (use_marker_field) { - g_clear_pointer((gpointer *)&inner_field, g_free); - } - - if (!ok) { - goto out; - } - - /* - * If we're using dynamic array and the element is - * populated, dump the real object right after the marker. - */ - if (use_dynamic_array && curr_elem) { /* - * NOTE: do not use vmstate_size() here because we want - * to dump the real VMSD object now. + * When this is enabled, it means we will always push = a ptr + * marker first for each element saying if it's popula= ted. */ + use_dynamic_array =3D + field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; + + use_marker_field =3D use_dynamic_array || is_null; + + if (vmdesc && vmsd_can_compress(field)) { + /* + * This logic only matters when dumping VM + * Desc, and only when the VMSD field can be + * compressed. + * + * Due to the fake nullptr handling above, if + * there's mixed null/non-null data, it + * doesn't make sense to emit a compressed + * array representation spanning the entire + * array because the field types will be + * different (e.g. struct vs. nullptr). Search + * ahead for the next null/non-null element + * and start a new compressed array if found. + */ + if (is_null !=3D is_null_prev) { + is_null_prev =3D is_null; + use_vmdesc =3D true; + + for (int j =3D i + 1; j < n_elems; j++) { + void *elem =3D *(void **)(first_elem + siz= e * j); + bool elem_is_null =3D !elem; + + if (is_null !=3D elem_is_null) { + max_elems =3D j - i; + break; + } + } + } + } + + if (use_dynamic_array) { + use_vmdesc =3D true; + } + + if (use_marker_field) { + inner_field =3D vmsd_create_ptr_marker_field(field= ); + + ok =3D vmstate_save_field_with_vmdesc( + f, curr_elem, 1, vmsd, inner_field, + use_vmdesc ? vmdesc : NULL, i, max_elems, errp= ); + + g_clear_pointer((gpointer *)&inner_field, g_free); + + if (!ok) { + goto out; + } + + save_field =3D !!curr_elem; + } + } + + if (save_field) { ok =3D vmstate_save_field_with_vmdesc( - f, curr_elem, field->size, vmsd, field, + f, curr_elem, size, vmsd, field, use_vmdesc ? vmdesc : NULL, i, max_elems, errp); =20 if (!ok) { --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381465; cv=none; d=zohomail.com; s=zohoarc; b=ctNZX8Znly5MVG8LIXwHHqE/1omYhlU8KqEFoY0tGCmzJVWJCLtNjsrktxXhnXmH7XVZ+shBihdFCmbfM2gHP6sMZHs9v2QoO2fCCB/UjNOtENDshUwm8A97wygk+vJZrD0w1MduJlnIhGxuQGuptTDvSBbIGB+GIe/MmQPeZVc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381465; 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=DYM15ZCEzaavHO8mCOfxSzn/Gfj4uM9ceO5chRfQkKE=; b=O5+qvE7rnfVjrr8eyDZ1ct4FV2NKdUEBLKJ9KoerdCLvNsfXgYcv3Cjj8y9D4Z3gmKvKl44ccDSrcmozZjwjsiH7wBn5TKZuqYGiQB29QmzoD02MgawQJ3ibvbNu2U5zPnANhWcLcIdo49M3yF+RKM4y8iwG9um1wvLhVjyi/DM= 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 1774381465887881.3459621798207; Tue, 24 Mar 2026 12:44:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fU-0003DA-SG; Tue, 24 Mar 2026 15:44:00 -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 1w57fN-0003CD-FQ for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:55 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fI-00085S-SE for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:43:52 -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-out1.suse.de (Postfix) with ESMTPS id A2A6B4D217; Tue, 24 Mar 2026 19:43:47 +0000 (UTC) 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 7B8C343FE4; Tue, 24 Mar 2026 19:43:46 +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 OPnZEnLpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381427; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DYM15ZCEzaavHO8mCOfxSzn/Gfj4uM9ceO5chRfQkKE=; b=TABpM8iwc2H4gQwKsgCPnGx/irZo567NFpkHyMvvphLCZJ30PC9cDzs1ZvaAL7Gi4hle4m zZTuRQUe+msMk17u0FXKQ12uH+nIxBbzAhnzX1VabFs6RPDoFTvnYK3zI2BLmrsUGeeH2h 9oZ9+N5w60XrLhaG6z0kjXMvtMrnP8E= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381427; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DYM15ZCEzaavHO8mCOfxSzn/Gfj4uM9ceO5chRfQkKE=; b=/8a1gdHFNDnUXPkzAKbp5tKs18MeYli+pR3dwqvDcJ2Sn3OxgcdfCYa9e9O55DbQxq0cAe VhCvi5YnEcTEK0Dw== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=TABpM8iw; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b="/8a1gdHF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381427; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DYM15ZCEzaavHO8mCOfxSzn/Gfj4uM9ceO5chRfQkKE=; b=TABpM8iwc2H4gQwKsgCPnGx/irZo567NFpkHyMvvphLCZJ30PC9cDzs1ZvaAL7Gi4hle4m zZTuRQUe+msMk17u0FXKQ12uH+nIxBbzAhnzX1VabFs6RPDoFTvnYK3zI2BLmrsUGeeH2h 9oZ9+N5w60XrLhaG6z0kjXMvtMrnP8E= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381427; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DYM15ZCEzaavHO8mCOfxSzn/Gfj4uM9ceO5chRfQkKE=; b=/8a1gdHFNDnUXPkzAKbp5tKs18MeYli+pR3dwqvDcJ2Sn3OxgcdfCYa9e9O55DbQxq0cAe VhCvi5YnEcTEK0Dw== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 07/17] vmstate: Create and save ptr marker in same function Date: Tue, 24 Mar 2026 16:43:22 -0300 Message-ID: <20260324194333.30004-8-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:106:10:150:64:167:received,2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: A2A6B4D217 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381468379158500 Content-Type: text/plain; charset="utf-8" Move the creation of the pointer marker along with the vmstate_save call that writes it to the stream. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 78 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index a190c3f63f..0975d10793 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -54,36 +54,6 @@ vmstate_field_exists(const VMStateDescription *vmsd, con= st VMStateField *field, return result; } =20 -/* - * Create a ptr marker field when there's a NULL pointer detected in the - * array of a VMS_ARRAY_OF_POINTER VMSD field. It's needed because we - * can't dereference the NULL pointer. - */ -static const VMStateField * -vmsd_create_ptr_marker_field(const VMStateField *field) -{ - VMStateField *fake =3D g_new0(VMStateField, 1); - - /* It can only happen on an array of pointers! */ - assert(field->flags & VMS_ARRAY_OF_POINTER); - - /* Some of fake's properties should match the original's */ - fake->name =3D field->name; - fake->version_id =3D field->version_id; - - /* Do not need "field_exists" check as it always exists (which is null= ) */ - fake->field_exists =3D NULL; - - /* See vmstate_info_nullptr - use 1 byte to represent nullptr */ - fake->size =3D 1; - fake->info =3D &vmstate_info_ptr_marker; - fake->flags =3D VMS_SINGLE; - - /* All the rest fields shouldn't matter.. */ - - return (const VMStateField *)fake; -} - static int vmstate_n_elems(void *opaque, const VMStateField *field) { int n_elems =3D 1; @@ -592,6 +562,42 @@ vmstate_save_field_with_vmdesc(QEMUFile *f, void *pv, = size_t size, return ok; } =20 +/* + * Create a ptr marker field to precede an element of a + * VMS_ARRAY_OF_POINTER VMSD field. This indicates whether the + * following element is a NULL pointer or a valid pointer. This is + * used to know whether a pointer needs to be followed when loading + * the data. + */ +static bool vmstate_ptr_marker_save(QEMUFile *f, void *opaque, + const VMStateDescription *vmsd, + const VMStateField *field, + JSONWriter *vmdesc, + int i, int max, Error **errp) +{ + g_autofree VMStateField *fake =3D g_new0(VMStateField, 1); + + /* It can only happen on an array of pointers! */ + assert(field->flags & VMS_ARRAY_OF_POINTER); + + /* Some of fake's properties should match the original's */ + fake->name =3D field->name; + fake->version_id =3D field->version_id; + + /* Do not need "field_exists" check as it always exists */ + fake->field_exists =3D NULL; + + /* use 1 byte for the marker */ + fake->size =3D 1; + fake->info =3D &vmstate_info_ptr_marker; + fake->flags =3D VMS_SINGLE; + + /* All the rest fields shouldn't matter.. */ + + return vmstate_save_field_with_vmdesc(f, opaque, field->size, vmsd, fa= ke, + vmdesc, i, max, errp); +} + static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vms= d, void *opaque, JSONWriter *vmdesc, int version_id, Error **errp) @@ -635,7 +641,6 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { - const VMStateField *inner_field; bool use_marker_field, is_null, use_dynamic_array; =20 assert(curr_elem); @@ -688,14 +693,9 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, } =20 if (use_marker_field) { - inner_field =3D vmsd_create_ptr_marker_field(field= ); - - ok =3D vmstate_save_field_with_vmdesc( - f, curr_elem, 1, vmsd, inner_field, - use_vmdesc ? vmdesc : NULL, i, max_elems, errp= ); - - g_clear_pointer((gpointer *)&inner_field, g_free); - + ok =3D vmstate_ptr_marker_save(f, curr_elem, vmsd,= field, + use_vmdesc ? vmdesc := NULL, + i, max_elems, errp); if (!ok) { goto out; } --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381467; cv=none; d=zohomail.com; s=zohoarc; b=i7ZOIrKfaoQ2igz3laiJhKOA6msktcO0Xr5EVv5lCc5xcWF0kA88vEmH9W+/WMDqi97U9tbKzm04STLQzAh9jtmYssAMPpM6tsRCRdGVRtq3j/XpT8fMZmracCaCfLgXmsvZjcOqrUeUYFixDbqxT4hNnz4wSGGQRvOzxEFH8Sw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381467; 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=7yWIcZLxTYk0vijj26b8iV73kdeke7MYyK4wz5guLbw=; b=j3Xtb/vFIFYJCcOry1rVv/7rT9BIHtJPOUh3YcJRAeQKr7cs07P7Cn6tSyfNNU0mJEmzdQw8ZN4xx7JzdfsEjz19c7LXZISZcRxDgdMRACK/iTdlKyCCBGnc8Zc4nlGep9YgfS1hzoqlrch3m68YaXx+KF1JU875RKObOd8G/3c= 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 1774381467916940.7089881710709; Tue, 24 Mar 2026 12:44:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fY-0003FI-Dt; Tue, 24 Mar 2026 15:44:04 -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 1w57fW-0003E2-5V for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:02 -0400 Received: from smtp-out1.suse.de ([2a07:de40:b251:101:10:150:64:1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fU-0008AH-M9 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:01 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id 350414D258; Tue, 24 Mar 2026 19:43:49 +0000 (UTC) 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 0E46E43FE4; Tue, 24 Mar 2026 19:43:47 +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 0EjMM3PpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381429; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7yWIcZLxTYk0vijj26b8iV73kdeke7MYyK4wz5guLbw=; b=MOWOSWiHG05+qmxDk1TXjZlVm7pMV3BCTPmOTwkiiS3r1vEn87sCbVmSVIdE1xxRM6hjVr WrcGhJ2Pi7I3JwnurhsT1GPMDfyCz6XD5MvpJ6Mngn8/cebjhsThPLYa/y8i0S+26ZGzL7 4oelo8AxOhUEao6jA1VdWQgFTi6xxko= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381429; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7yWIcZLxTYk0vijj26b8iV73kdeke7MYyK4wz5guLbw=; b=5GiRSDis07n3YgaHMeUJqGr8XLWyNjDiEvVCkoQ9kPulT2swhrIxg9utKx3Xe26hFZZzmQ Kegr6vVwh831dWBA== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381429; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7yWIcZLxTYk0vijj26b8iV73kdeke7MYyK4wz5guLbw=; b=MOWOSWiHG05+qmxDk1TXjZlVm7pMV3BCTPmOTwkiiS3r1vEn87sCbVmSVIdE1xxRM6hjVr WrcGhJ2Pi7I3JwnurhsT1GPMDfyCz6XD5MvpJ6Mngn8/cebjhsThPLYa/y8i0S+26ZGzL7 4oelo8AxOhUEao6jA1VdWQgFTi6xxko= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381429; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7yWIcZLxTYk0vijj26b8iV73kdeke7MYyK4wz5guLbw=; b=5GiRSDis07n3YgaHMeUJqGr8XLWyNjDiEvVCkoQ9kPulT2swhrIxg9utKx3Xe26hFZZzmQ Kegr6vVwh831dWBA== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 08/17] vmstate: Don't recompute size and n_elems in vmstate_size Date: Tue, 24 Mar 2026 16:43:23 -0300 Message-ID: <20260324194333.30004-9-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[] 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=2a07:de40:b251:101:10:150:64:1; envelope-from=farosas@suse.de; helo=smtp-out1.suse.de 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381468405158500 Content-Type: text/plain; charset="utf-8" The caller already has the size and number of elements available. Pass them in. Subsequent commits will add other callers. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 0975d10793..8437b5ef3e 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -101,11 +101,10 @@ static int vmstate_size(void *opaque, const VMStateFi= eld *field) } =20 static void vmstate_handle_alloc(void *ptr, const VMStateField *field, - void *opaque) + int size, int n_elems) { if (field->flags & VMS_POINTER && field->flags & VMS_ALLOC) { - gsize size =3D vmstate_size(opaque, field); - size *=3D vmstate_n_elems(opaque, field); + size *=3D n_elems; if (size) { *(void **)ptr =3D g_malloc(size); } @@ -248,7 +247,7 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); =20 - vmstate_handle_alloc(first_elem, field, opaque); + vmstate_handle_alloc(first_elem, field, size, n_elems); if (field->flags & VMS_POINTER) { first_elem =3D *(void **)first_elem; assert(first_elem || !n_elems || !size); --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381533; cv=none; d=zohomail.com; s=zohoarc; b=KG77Z6I9pkcp1d/PmH26G1J5vLKr+mg8nXD6QCwwvyA0je40IHe5dnUhirUwvpH670cqjX1c28TSgHSqUNd35/Rf3R4hEHl2NAte0LtzziflDmUXJ6MODjrN0sTDqXZ4mG1b6izWL71NtReu5u94VBUghUOT5hHuA54oZ3eZddI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381533; 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=iifD1ZJD/OWYjxjW9swI71sEK/kXSYVXV76A7LYh7TE=; b=MukSTchx8iBLW7fTE79jQoR7Bibb09YUSbDKsUzhwBoBWdZIVPeZaJIiuDRNLBTyyUEIOieO8CgYlC9S1/evO6ZfcG9iEykqWodEVxWcI86wQOy20F7xqOy2tzUY4DF8kjZTZpK85uwouDskBwNjjLMPRKRlNj8vSb30Tetdnc8= 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 1774381533371108.33857751878236; Tue, 24 Mar 2026 12:45:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57ff-0003GK-Dc; Tue, 24 Mar 2026 15:44:11 -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 1w57fb-0003Fs-Ud for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:07 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fZ-0008ED-C1 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:06 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id BD94B4D29A; Tue, 24 Mar 2026 19:43:50 +0000 (UTC) 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 950C443FE4; Tue, 24 Mar 2026 19:43:49 +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 6DwcGXXpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381430; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iifD1ZJD/OWYjxjW9swI71sEK/kXSYVXV76A7LYh7TE=; b=2JnBfOIP9DGBdFlcWWiWp5pgNV5JHX6ZUocBdBduuAQ+pQ2H6Dto2JvTniZbmwXdrUqXU7 7Lk/j4OM7nntLX0yBECYt+V75UVhRfD84rRvPhn+1NsVBQ8Sy2yCwqMWFUKXVa949CFi9B fJrHPsOc3fBhDdpGmTj+SvJgD0A/YVY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381430; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iifD1ZJD/OWYjxjW9swI71sEK/kXSYVXV76A7LYh7TE=; b=pSMLDsIuhtm0udwUAyunS8GM30xC2BEw6EZUiRsQ847jNTLVuJ69wrA2YZG2Q8fOT+NbOr 8N9AECTdfsZblhCg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381430; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iifD1ZJD/OWYjxjW9swI71sEK/kXSYVXV76A7LYh7TE=; b=2JnBfOIP9DGBdFlcWWiWp5pgNV5JHX6ZUocBdBduuAQ+pQ2H6Dto2JvTniZbmwXdrUqXU7 7Lk/j4OM7nntLX0yBECYt+V75UVhRfD84rRvPhn+1NsVBQ8Sy2yCwqMWFUKXVa949CFi9B fJrHPsOc3fBhDdpGmTj+SvJgD0A/YVY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381430; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iifD1ZJD/OWYjxjW9swI71sEK/kXSYVXV76A7LYh7TE=; b=pSMLDsIuhtm0udwUAyunS8GM30xC2BEw6EZUiRsQ847jNTLVuJ69wrA2YZG2Q8fOT+NbOr 8N9AECTdfsZblhCg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 09/17] vmstate: Increase scope of vmstate_handle_alloc Date: Tue, 24 Mar 2026 16:43:24 -0300 Message-ID: <20260324194333.30004-10-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[] 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381534714158500 Content-Type: text/plain; charset="utf-8" Move more code into vmstate_handle_alloc. If it's going to handle, make it handle it all. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 8437b5ef3e..0cdfde2232 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -100,15 +100,23 @@ static int vmstate_size(void *opaque, const VMStateFi= eld *field) return size; } =20 -static void vmstate_handle_alloc(void *ptr, const VMStateField *field, +static void *vmstate_handle_alloc(void *ptr, const VMStateField *field, int size, int n_elems) { - if (field->flags & VMS_POINTER && field->flags & VMS_ALLOC) { - size *=3D n_elems; - if (size) { - *(void **)ptr =3D g_malloc(size); + void *new =3D ptr; + + if (field->flags & VMS_POINTER) { + if (field->flags & VMS_ALLOC) { + size *=3D n_elems; + if (size) { + new =3D g_malloc(size); + *(void **)ptr =3D new; + } } + assert(new || !n_elems || !size); + return *(void **)ptr; } + return new; } =20 static bool vmstate_ptr_marker_load(QEMUFile *f, bool *load_field, @@ -247,11 +255,7 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); =20 - vmstate_handle_alloc(first_elem, field, size, n_elems); - if (field->flags & VMS_POINTER) { - first_elem =3D *(void **)first_elem; - assert(first_elem || !n_elems || !size); - } + first_elem =3D vmstate_handle_alloc(first_elem, field, size, n= _elems); =20 for (i =3D 0; i < n_elems; i++) { /* If we will process the load of field? */ --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381492; cv=none; d=zohomail.com; s=zohoarc; b=Yxsn5sp/hPZNcbP0gutmqUq2031z07VjQQVRqVP3Tm0fy9lhp1maVdvUZkhwFgshb0D/Vga/pl7vHOiZIWsGerr/Na4aANmso//Sq0lJYC4whdWe7GO3manEDmuhK55bEUFNs3xtn+ks/fU/ZANUofeYVDZy25+nx5ayu3UUsdE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381492; 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=eFmCs2WROEl+hnfjKFhtGMxmvHhxybnFTEhGAiVUOgQ=; b=MUa+QM3O1KeP54Jj6KrakASHduzMhUGkADjx/c7RmnTCLEKlW3+BFwYgTdynp8xem8WIFBUaip5Cms29vgz2uFWcsEy5ORlC+EMpUli3InVEzWN4ieQpuv4BeBJEEJhBt+FYrN++d/lCos9hmTaIW7dxrBfRc42Z1iBDh9eleok= 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 1774381492313785.3961061557645; Tue, 24 Mar 2026 12:44:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fl-0003LM-Vb; Tue, 24 Mar 2026 15:44: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 1w57fi-0003IP-2s for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:15 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fg-0008FE-HM for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:13 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id 5141F4D29B; Tue, 24 Mar 2026 19:43:52 +0000 (UTC) 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 2A68D43FE4; Tue, 24 Mar 2026 19:43:50 +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 gJGfOnbpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381432; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eFmCs2WROEl+hnfjKFhtGMxmvHhxybnFTEhGAiVUOgQ=; b=EyFZKPy0VBip4blieR8mL2xSy67KttGTyTU9FKxTXPxe42Krbqs46pYSiQSXJ+9FkBkYOg ph+2w1qezhDFKfnbJlKXXgv7GHufJr0T2Td1b4IeA8Gf28fisFPD5sU3ZsAu/oQPlVv+Nt 1byJOPJ+Anpm45rTd8+t3sokVaREa9k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381432; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eFmCs2WROEl+hnfjKFhtGMxmvHhxybnFTEhGAiVUOgQ=; b=ufVsmDprC7rfAaUF7BTDMOB1Ezbel1NX6MiuO2FrjDRASjpvFcV7XLliaU4G3Qh+jr8wYt 6hwNbjBM7jNfhOAw== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381432; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eFmCs2WROEl+hnfjKFhtGMxmvHhxybnFTEhGAiVUOgQ=; b=EyFZKPy0VBip4blieR8mL2xSy67KttGTyTU9FKxTXPxe42Krbqs46pYSiQSXJ+9FkBkYOg ph+2w1qezhDFKfnbJlKXXgv7GHufJr0T2Td1b4IeA8Gf28fisFPD5sU3ZsAu/oQPlVv+Nt 1byJOPJ+Anpm45rTd8+t3sokVaREa9k= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381432; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eFmCs2WROEl+hnfjKFhtGMxmvHhxybnFTEhGAiVUOgQ=; b=ufVsmDprC7rfAaUF7BTDMOB1Ezbel1NX6MiuO2FrjDRASjpvFcV7XLliaU4G3Qh+jr8wYt 6hwNbjBM7jNfhOAw== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 10/17] vmstate: Remove curr_elem_p Date: Tue, 24 Mar 2026 16:43:25 -0300 Message-ID: <20260324194333.30004-11-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; URIBL_BLOCKED(0.00)[suse.de:mid,suse.de:email,imap1.dmz-prg2.suse.org:helo]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381494487158500 Content-Type: text/plain; charset="utf-8" The usage of curr_elem_p for holding the array of pointers element is a bit confusing. The side effect of updating what this variable points to is not very clear. Remove it in favor of a local array_elem variable with the same purpose, but make it of type void** instead, since this is what it really is. Move it under the VMS_ARRAY_OF_POINTER check. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 0cdfde2232..85e63305f6 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -261,16 +261,15 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, /* If we will process the load of field? */ bool load_field =3D true; bool ok =3D true; - void *curr_elem_p =3D first_elem + size * i; - void *curr_elem =3D curr_elem_p; + void *curr_elem; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { + void **array_elem =3D (void **)first_elem + i; bool use_dynamic_array =3D field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; bool use_marker_field; =20 - curr_elem =3D *(void **)curr_elem_p; - + curr_elem =3D *array_elem; use_marker_field =3D use_dynamic_array || !curr_elem; =20 if (use_marker_field) { @@ -293,9 +292,11 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, */ curr_elem =3D g_malloc0(field->size); /* Remember to update the root pointer! */ - *(void **)curr_elem_p =3D curr_elem; + *(void **)array_elem =3D curr_elem; } } + } else { + curr_elem =3D first_elem + size * i; } =20 if (load_field) { --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381519; cv=none; d=zohomail.com; s=zohoarc; b=m2/6cOeTzzQYj3vU/DdUaGM0u7sHRA5v0UPg3lRKeEuPlOA0ZP6VuOswed/b2ywEqH4cEqNSZtsyencNDNBW2MVUngEVMRNGLPDu1GXFd8qMtXmDYvlWtH26scxPpr9Zp+VDUoxd7V4H0Mc5TDrNWnazqvKCa2vurfSZ5yLXUVk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381519; 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=ijgwsSEpVbXrAjpHcIRFYxo7WBxDWTudU7OG4QHJ3AQ=; b=BfjrlGPOaB3y+f+YGk1anYB9SuvdwICwbHKEJqjTm/TrCQDRYom0MxcUk6VC4tcuY24LmIH/P1KwkMC0H0kXX3eDuXFtHshxFFe88WGC4vXEtrKhQgGNvDkcNkQupVRQ3WV+Xr7Rw9GfhYffJ/5UU5mR2rogD1OnoGzqE65rgio= 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 1774381519662388.86881227320976; Tue, 24 Mar 2026 12:45:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fo-0003Nv-41; Tue, 24 Mar 2026 15:44:20 -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 1w57fm-0003N3-PV for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:18 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fl-0008GL-4W for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:18 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id DB3E24D217; Tue, 24 Mar 2026 19:43:53 +0000 (UTC) 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 B207A43FE4; Tue, 24 Mar 2026 19:43:52 +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 aOoeIHjpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381433; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ijgwsSEpVbXrAjpHcIRFYxo7WBxDWTudU7OG4QHJ3AQ=; b=KK/Wsw8nbioLcQYApLSm9S3lANG8PgNU4dJ6s8M9CSGbCk1uuXt1QiBNlNGSHZq1XM6FV+ IE3R+pT+x7PnV3U/4a6p1gYKZQY5y6bVjnJm3UMO5ezxrjOg+f8QPJFhoLlUqQHI/R7ch+ u1irXW4j6TBcVcwQPw4FPLOv8h+WBzE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381433; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ijgwsSEpVbXrAjpHcIRFYxo7WBxDWTudU7OG4QHJ3AQ=; b=jK1wwOn9VzlTE8+Yutb/mw+hg0HecGqRmukR9r38aPbSQhprMMU9NvlF8XWLCc8jEkYRdN P1+pXKwJRkf/9RCg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381433; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ijgwsSEpVbXrAjpHcIRFYxo7WBxDWTudU7OG4QHJ3AQ=; b=KK/Wsw8nbioLcQYApLSm9S3lANG8PgNU4dJ6s8M9CSGbCk1uuXt1QiBNlNGSHZq1XM6FV+ IE3R+pT+x7PnV3U/4a6p1gYKZQY5y6bVjnJm3UMO5ezxrjOg+f8QPJFhoLlUqQHI/R7ch+ u1irXW4j6TBcVcwQPw4FPLOv8h+WBzE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381433; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ijgwsSEpVbXrAjpHcIRFYxo7WBxDWTudU7OG4QHJ3AQ=; b=jK1wwOn9VzlTE8+Yutb/mw+hg0HecGqRmukR9r38aPbSQhprMMU9NvlF8XWLCc8jEkYRdN P1+pXKwJRkf/9RCg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 11/17] vmstate: Introduce vmstate_first Date: Tue, 24 Mar 2026 16:43:26 -0300 Message-ID: <20260324194333.30004-12-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[] 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381520649158500 Content-Type: text/plain; charset="utf-8" The vmstate_save|load_vmsd[_v] functions do a bit of juggling of pointers to allocate/dereference arrays. Introduce a getter for the first field. Take field->flags into consideration and also allocate memory when necessary. Signed-off-by: Fabiano Rosas --- maybe we can soon have an iterator --- migration/vmstate.c | 67 +++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 85e63305f6..ab7c6fa4ab 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -100,23 +100,31 @@ static int vmstate_size(void *opaque, const VMStateFi= eld *field) return size; } =20 -static void *vmstate_handle_alloc(void *ptr, const VMStateField *field, - int size, int n_elems) +static void *vmstate_handle_alloc(void **ptr, int size, int n_elems) { - void *new =3D ptr; + size *=3D n_elems; + if (size) { + *ptr =3D g_malloc(size); + } + + return *ptr; +} + +static void *vmstate_first(void *opaque, const VMStateField *field, + int size, int n, bool alloc) +{ + void **first =3D opaque + field->offset; + + if (alloc) { + return vmstate_handle_alloc(first, size, n); + } =20 if (field->flags & VMS_POINTER) { - if (field->flags & VMS_ALLOC) { - size *=3D n_elems; - if (size) { - new =3D g_malloc(size); - *(void **)ptr =3D new; - } - } - assert(new || !n_elems || !size); - return *(void **)ptr; + assert(first || !n || !size); + return *first; } - return new; + + return first; } =20 static bool vmstate_ptr_marker_load(QEMUFile *f, bool *load_field, @@ -251,11 +259,12 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, trace_vmstate_load_state_field(vmsd->name, field->name, exists); =20 if (exists) { - void *first_elem =3D opaque + field->offset; + void *head; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); =20 - first_elem =3D vmstate_handle_alloc(first_elem, field, size, n= _elems); + head =3D vmstate_first(opaque, field, size, n_elems, + field->flags & VMS_ALLOC); =20 for (i =3D 0; i < n_elems; i++) { /* If we will process the load of field? */ @@ -264,7 +273,7 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, void *curr_elem; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { - void **array_elem =3D (void **)first_elem + i; + void **array_elem =3D (void **)head + i; bool use_dynamic_array =3D field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; bool use_marker_field; @@ -290,13 +299,13 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, * need the object size, not entry size of the * array. */ - curr_elem =3D g_malloc0(field->size); - /* Remember to update the root pointer! */ - *(void **)array_elem =3D curr_elem; + assert(!curr_elem); + curr_elem =3D vmstate_handle_alloc(array_elem, + field->size, = 1); } } } else { - curr_elem =3D first_elem + size * i; + curr_elem =3D head + size * i; } =20 if (load_field) { @@ -627,28 +636,26 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, =20 while (field->name) { if (vmstate_field_exists(vmsd, field, opaque, version_id)) { - void *first_elem =3D opaque + field->offset; + void *head; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); bool is_null_prev =3D false; bool use_vmdesc =3D true; =20 trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems= ); - if (field->flags & VMS_POINTER) { - first_elem =3D *(void **)first_elem; - assert(first_elem || !n_elems || !size); - } + head =3D vmstate_first(opaque, field, size, n_elems, false); =20 for (i =3D 0; i < n_elems; i++) { bool save_field =3D true; - void *curr_elem =3D first_elem + size * i; + void *curr_elem; int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { bool use_marker_field, is_null, use_dynamic_array; + void **array_elem =3D (void **)head + i; =20 - assert(curr_elem); - curr_elem =3D *(void **)curr_elem; + assert(array_elem); + curr_elem =3D *array_elem; =20 is_null =3D !curr_elem; =20 @@ -681,7 +688,7 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, use_vmdesc =3D true; =20 for (int j =3D i + 1; j < n_elems; j++) { - void *elem =3D *(void **)(first_elem + siz= e * j); + void *elem =3D *(void **)(head + size * j); bool elem_is_null =3D !elem; =20 if (is_null !=3D elem_is_null) { @@ -706,6 +713,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, =20 save_field =3D !!curr_elem; } + } else { + curr_elem =3D head + size * i; } =20 if (save_field) { --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381514; cv=none; d=zohomail.com; s=zohoarc; b=Yl3lhJsQEA+FfYLgwAd1iyMEmwglfyGuaUEHmKwPXUhm2CL5fOP02+whbUVNYBdW84PHGK8nNOq/wE84kMOLAJnYQqFdICJsELI7zcVLqVdhMfEKzEpFd8Vlhl3ZIOMVRV0/u8/yF5+KHMLPs3t1Seap8fB4wUE/ncQcZ70i5fs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381514; 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=x+ZyLFL7XlyGoLVRwdhBcneEFYHFSurRSuZsKKjaQzM=; b=fOco7sF5M4ZudP6KocqVn+QQdnk4OnT9m2DMq+KeYXpwz9K/Zb729wooOfOb9YIiZauv8Mgy7a8rukYebXAxk9PCpI338ZCIV/vHv1oJ/trri/L/U4t7Twx9gUFEwcOsQOPMZ4g/o89sKHlaO48dBrzjkETSlHUBdC1DBc8C5Jw= 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 1774381514774684.4173402299332; Tue, 24 Mar 2026 12:45:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fq-0003P0-Qu; Tue, 24 Mar 2026 15:44: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 1w57fo-0003OP-N8 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:20 -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 1w57fn-0008GZ-2J for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:20 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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 6C6915BD6E; Tue, 24 Mar 2026 19:43:55 +0000 (UTC) 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 45B5343FE4; Tue, 24 Mar 2026 19:43:54 +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 0KqsBXrpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381435; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x+ZyLFL7XlyGoLVRwdhBcneEFYHFSurRSuZsKKjaQzM=; b=JNwstzZxCnYm0p6VIp9LTV+kXazLqhgRrBkPt6oldb1H1eS2DlSkFOWYNZdU7Sdc+ARfqG OdlV1ocq3poz6wc4CG0q8/1eYTPwQ7BfYKxyc7hmGu2teZrpXAIyd7GS+/rlivkAuCRN2x mmOi7pco85kRacR2sZ0R54BRgRmmFKE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381435; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x+ZyLFL7XlyGoLVRwdhBcneEFYHFSurRSuZsKKjaQzM=; b=xRppBspih78ISK0tY7lDs70KoAoLvDGQbpRljEV+M6ts0WTYtqD84tZur+bSd0uCzIBWIy NyQj+rWNm0GHzwBw== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381435; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x+ZyLFL7XlyGoLVRwdhBcneEFYHFSurRSuZsKKjaQzM=; b=JNwstzZxCnYm0p6VIp9LTV+kXazLqhgRrBkPt6oldb1H1eS2DlSkFOWYNZdU7Sdc+ARfqG OdlV1ocq3poz6wc4CG0q8/1eYTPwQ7BfYKxyc7hmGu2teZrpXAIyd7GS+/rlivkAuCRN2x mmOi7pco85kRacR2sZ0R54BRgRmmFKE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381435; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x+ZyLFL7XlyGoLVRwdhBcneEFYHFSurRSuZsKKjaQzM=; b=xRppBspih78ISK0tY7lDs70KoAoLvDGQbpRljEV+M6ts0WTYtqD84tZur+bSd0uCzIBWIy NyQj+rWNm0GHzwBw== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 12/17] vmstate: Introduce vmstate_next Date: Tue, 24 Mar 2026 16:43:27 -0300 Message-ID: <20260324194333.30004-13-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; URIBL_BLOCKED(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:email]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381516035154100 Content-Type: text/plain; charset="utf-8" Similarly to vmstate_first(), introduce a vmstate_next(), which does the necessary dereferencing of pointers to get to the leaf element. On the load side, allow the caller to pass a flag indicating whether allocation is expected and call the allocation function if so. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 84 +++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index ab7c6fa4ab..c1ad0ef9a5 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -127,24 +127,51 @@ static void *vmstate_first(void *opaque, const VMStat= eField *field, return first; } =20 -static bool vmstate_ptr_marker_load(QEMUFile *f, bool *load_field, - Error **errp) +static void *vmstate_next(void **first, const VMStateField *field, + int size, int i, bool alloc) { - int byte =3D qemu_get_byte(f); + void **array_elem; + void *next; + + if (!(field->flags & VMS_ARRAY_OF_POINTER)) { + next =3D (void *)first + size * i; + return next; + } + + array_elem =3D first + i; + next =3D *array_elem; + + if (alloc) { + if (!next || field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { + /* + * NOTE: do not use vmstate_size() here, because we + * need the object size, not entry size of the + * array. + */ + next =3D vmstate_handle_alloc(array_elem, field->size, 1); + } + } + return next; +} + +static bool vmstate_ptr_marker_load(QEMUFile *f, bool *load_field) +{ + int byte =3D qemu_peek_byte(f, 0); =20 if (byte =3D=3D VMS_MARKER_PTR_NULL) { /* When it's a null ptr marker, do not continue the load */ *load_field =3D false; + qemu_file_skip(f, 1); return true; } =20 if (byte =3D=3D VMS_MARKER_PTR_VALID) { /* We need to load this field right after the marker */ *load_field =3D true; + qemu_file_skip(f, 1); return true; } =20 - error_setg(errp, "Unexpected ptr marker: %d", byte); return false; } =20 @@ -273,41 +300,13 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, void *curr_elem; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { - void **array_elem =3D (void **)head + i; - bool use_dynamic_array =3D - field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; - bool use_marker_field; - - curr_elem =3D *array_elem; - use_marker_field =3D use_dynamic_array || !curr_elem; - - if (use_marker_field) { - /* Read the marker instead of VMSD first */ - if (!vmstate_ptr_marker_load(f, &load_field, errp)= ) { - trace_vmstate_load_field_error(field->name, - -EINVAL); - return false; - } - - if (load_field) { - /* - * When reaching here, it means we received a - * non-NULL ptr marker, so we need to populate= the - * field before loading it. - * - * NOTE: do not use vmstate_size() here, becau= se we - * need the object size, not entry size of the - * array. - */ - assert(!curr_elem); - curr_elem =3D vmstate_handle_alloc(array_elem, - field->size, = 1); - } - } - } else { - curr_elem =3D head + size * i; + /* Peek a possible pointer marker instead of VMSD firs= t */ + ok =3D vmstate_ptr_marker_load(f, &load_field); } =20 + curr_elem =3D vmstate_next(head, field, size, i, + load_field && ok); + if (load_field) { ok =3D vmstate_load_field(f, curr_elem, size, field, e= rrp); } @@ -647,15 +646,11 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, =20 for (i =3D 0; i < n_elems; i++) { bool save_field =3D true; - void *curr_elem; + void *curr_elem =3D vmstate_next(head, field, size, i, fal= se); int max_elems =3D n_elems - i; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { bool use_marker_field, is_null, use_dynamic_array; - void **array_elem =3D (void **)head + i; - - assert(array_elem); - curr_elem =3D *array_elem; =20 is_null =3D !curr_elem; =20 @@ -688,7 +683,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, use_vmdesc =3D true; =20 for (int j =3D i + 1; j < n_elems; j++) { - void *elem =3D *(void **)(head + size * j); + void *elem =3D vmstate_next(head, field, s= ize, j, + false); bool elem_is_null =3D !elem; =20 if (is_null !=3D elem_is_null) { @@ -713,8 +709,6 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, =20 save_field =3D !!curr_elem; } - } else { - curr_elem =3D head + size * i; } =20 if (save_field) { --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381473; cv=none; d=zohomail.com; s=zohoarc; b=Z69+NwYW+lvabXpLXgDMmuOjxIiWQulaunLwRNQeeOqgDyN5hfN68IRbVTMtxhm01Y8mFhS0084/5brTMRP9/XV63K/I6L3HAKb2ratmCib2cGNSARo8+QpotAifg8VvjJJ9e7udu79/zmQYlTx9SgCBGJ4S+eRbXfiF4Sm4b5Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381473; 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=CKGmz+lKmXdFvQ91j7EaHfHSLwUO7DpcItY8Bz2/bO0=; b=TH+XZQoW/eLmjxrnc9R62MuNvUnUUVlzCAEvDGsR+pw0jteTpu5f2H34TDnT143f8XujrFtIH1DvKdJy9/CcDpf1uNIL/cFKYo3KLPWvZkfO6aR3pi17jO5ELCAUi9W7g3xJ3uvMQ2wJzmoqrejcuyupDfb7uqqcHIP1s0/YLvU= 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 1774381473020963.6322901188269; Tue, 24 Mar 2026 12:44:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57ft-0003R7-LF; Tue, 24 Mar 2026 15:44:25 -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 1w57fs-0003P7-15 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:24 -0400 Received: from smtp-out1.suse.de ([2a07:de40:b251:101:10:150:64:1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fq-0008H4-An for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:23 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id 0371B4D2D7; Tue, 24 Mar 2026 19:43:57 +0000 (UTC) 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 D097543FE4; Tue, 24 Mar 2026 19:43:55 +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 6PajJ3vpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381437; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CKGmz+lKmXdFvQ91j7EaHfHSLwUO7DpcItY8Bz2/bO0=; b=SG+MIn1ujA8J03/2tK3CgElz6d4fQBTORqaGA5QX0uHCzFWL/6zLwCvF08hCJXZCPfu5of tK+asjnku9MLSeT48qjXVDfUpVpqpe3PB1EYag3lu4A1CotxXv2NOawxRO1fPkBUQrkVJL CdHtd+FRD1ouumsBQMA5qwnfCbuftmg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381437; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CKGmz+lKmXdFvQ91j7EaHfHSLwUO7DpcItY8Bz2/bO0=; b=nlPayM8pI51QIJeluhDW03aZYIxWpK6p0GtV0CF6hwYSy9kIH0c6jARU7CoUE05AumlHdh hssoq/kQ/yxYoIBw== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381437; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CKGmz+lKmXdFvQ91j7EaHfHSLwUO7DpcItY8Bz2/bO0=; b=SG+MIn1ujA8J03/2tK3CgElz6d4fQBTORqaGA5QX0uHCzFWL/6zLwCvF08hCJXZCPfu5of tK+asjnku9MLSeT48qjXVDfUpVpqpe3PB1EYag3lu4A1CotxXv2NOawxRO1fPkBUQrkVJL CdHtd+FRD1ouumsBQMA5qwnfCbuftmg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381437; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CKGmz+lKmXdFvQ91j7EaHfHSLwUO7DpcItY8Bz2/bO0=; b=nlPayM8pI51QIJeluhDW03aZYIxWpK6p0GtV0CF6hwYSy9kIH0c6jARU7CoUE05AumlHdh hssoq/kQ/yxYoIBw== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 13/17] vmstate: Drop VMS_ARRAY_OF_POINTER_AUTO_ALLOC Date: Tue, 24 Mar 2026 16:43:28 -0300 Message-ID: <20260324194333.30004-14-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[] 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=2a07:de40:b251:101:10:150:64:1; envelope-from=farosas@suse.de; helo=smtp-out1.suse.de 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381474703158500 Content-Type: text/plain; charset="utf-8" The semantics of the VMS_ARRAY_OF_POINTER_AUTO_ALLOC of allocating memory dynamically for an array of pointers could be thought to be the same as the currently non-existent combination of VMS_ARRAY_OF_POINTER | VMS_ALLOC. The code is now able to handle such invalid combination, so drop the new flag and enable the VMS_ARRAY_OF_POINTER | VMS_ALLOC combo. Note: I don't quite understand why we cannot allocate the first element of the array with VMS_ARRAY_OF_POINTER_AUTO_ALLOC, so I avoided that case when using the other flags as well. Signed-off-by: Fabiano Rosas --- include/migration/vmstate.h | 21 +++++---------------- migration/savevm.c | 28 ++++++++++++---------------- migration/vmstate.c | 12 +++++++----- 3 files changed, 24 insertions(+), 37 deletions(-) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 70bebc60ed..bf12df66e2 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -146,8 +146,8 @@ enum VMStateFlags { /* When loading serialised VM state, allocate memory for the * (entire) field. Only valid in combination with * VMS_POINTER. Note: Not all combinations with other flags are - * currently supported, e.g. VMS_ALLOC|VMS_ARRAY_OF_POINTER won't - * cause the individual entries to be allocated. */ + * currently supported. + */ VMS_ALLOC =3D 0x2000, =20 /* Multiply the number of entries given by the integer at opaque + @@ -161,19 +161,8 @@ enum VMStateFlags { * structure we are referencing to use. */ VMS_VSTRUCT =3D 0x8000, =20 - /* - * This is a sub-flag for VMS_ARRAY_OF_POINTER, so VMS_ARRAY_OF_POINTER - * must be set altogether. When set, it means array elements can - * contain either valid or NULL pointers, vmstate core will sync it - * between the two QEMU instances via the stream protocol. When it's a - * valid pointer, the vmstate core will be responsible to do the proper - * memory allocations. It also means user of this flag must prepare - * the array to be all NULLs otherwise memory may leak. - */ - VMS_ARRAY_OF_POINTER_AUTO_ALLOC =3D 0x10000, - /* Marker for end of list */ - VMS_END =3D 0x20000, + VMS_END =3D 0x10000, }; =20 typedef enum { @@ -610,7 +599,7 @@ extern const VMStateInfo vmstate_info_qlist; .size =3D sizeof(_type), \ .flags =3D VMS_POINTER | VMS_VARRAY_UINT8 | \ VMS_ARRAY_OF_POINTER | VMS_STRUCT | \ - VMS_ARRAY_OF_POINTER_AUTO_ALLOC, \ + VMS_ALLOC, \ .offset =3D vmstate_offset_pointer(_state, _field, _type *), \ } =20 @@ -623,7 +612,7 @@ extern const VMStateInfo vmstate_info_qlist; .size =3D sizeof(_type), \ .flags =3D VMS_POINTER | VMS_VARRAY_UINT32 | \ VMS_ARRAY_OF_POINTER | VMS_STRUCT | \ - VMS_ARRAY_OF_POINTER_AUTO_ALLOC, \ + VMS_ALLOC, \ .offset =3D vmstate_offset_pointer(_state, _field, _type *), \ } =20 diff --git a/migration/savevm.c b/migration/savevm.c index db0721996c..5170928d87 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -869,7 +869,8 @@ static void vmstate_check(const VMStateDescription *vms= d) if (field) { while (field->name) { if (field->flags & VMS_ARRAY_OF_POINTER) { - if (field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { + if (field->flags & VMS_ARRAY_OF_POINTER && + field->flags & VMS_ALLOC) { /* * Size must be provided because dest QEMU needs that * info to know what to allocate @@ -882,22 +883,17 @@ static void vmstate_check(const VMStateDescription *v= msd) * setup of sizes in this case. */ assert(field->size =3D=3D 0 && field->size_offset =3D= =3D 0); + + /* + * Without VMS_ALLOC, VMS_ARRAY_OF_POINTER must be + * used only together with one of VMS_(V)ARRAY* + * flags. + */ + assert(field->flags & (VMS_ARRAY | VMS_VARRAY_INT32 | + VMS_VARRAY_UINT16 | + VMS_VARRAY_UINT8 | + VMS_VARRAY_UINT32)); } - /* - * VMS_ARRAY_OF_POINTER must be used only together with one - * of VMS_(V)ARRAY* flags. - */ - assert(field->flags & (VMS_ARRAY | VMS_VARRAY_INT32 | - VMS_VARRAY_UINT16 | VMS_VARRAY_UINT= 8 | - VMS_VARRAY_UINT32)); - } - - /* - * When VMS_ARRAY_OF_POINTER_ALLOW_NULL is used, we must have - * VMS_ARRAY_OF_POINTER set too. - */ - if (field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { - assert(field->flags & VMS_ARRAY_OF_POINTER); } =20 if (field->flags & (VMS_STRUCT | VMS_VSTRUCT)) { diff --git a/migration/vmstate.c b/migration/vmstate.c index c1ad0ef9a5..8f0f9383e2 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -115,7 +115,7 @@ static void *vmstate_first(void *opaque, const VMStateF= ield *field, { void **first =3D opaque + field->offset; =20 - if (alloc) { + if (alloc && field->flags & VMS_ALLOC) { return vmstate_handle_alloc(first, size, n); } =20 @@ -142,7 +142,7 @@ static void *vmstate_next(void **first, const VMStateFi= eld *field, next =3D *array_elem; =20 if (alloc) { - if (!next || field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { + if (!next || field->flags & VMS_ALLOC) { /* * NOTE: do not use vmstate_size() here, because we * need the object size, not entry size of the @@ -291,7 +291,7 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, int size =3D vmstate_size(opaque, field); =20 head =3D vmstate_first(opaque, field, size, n_elems, - field->flags & VMS_ALLOC); + !(field->flags & VMS_ARRAY_OF_POINTER)); =20 for (i =3D 0; i < n_elems; i++) { /* If we will process the load of field? */ @@ -408,7 +408,8 @@ static bool vmsd_can_compress(const VMStateField *field) return false; } =20 - if (field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC) { + if (field->flags & VMS_ARRAY_OF_POINTER && + field->flags & VMS_ALLOC) { /* * This may involve two VMSD fields to be dumped, one for the * marker to show if the pointer is NULL, followed by the real @@ -659,7 +660,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, * marker first for each element saying if it's popula= ted. */ use_dynamic_array =3D - field->flags & VMS_ARRAY_OF_POINTER_AUTO_ALLOC; + field->flags & VMS_ARRAY_OF_POINTER && + field->flags & VMS_ALLOC; =20 use_marker_field =3D use_dynamic_array || is_null; =20 --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381540; cv=none; d=zohomail.com; s=zohoarc; b=h3/bdHWTTH3iymYaXb8jkLGvUxf76v21F6iWgOs18CXV1RWXI1chluLsdw0r27U4L9t73Xu/ioL3AX5tV7+y2ckLdGfKOmU6DSOO2lAbiGgee/qMd9v95mmFvUG153Zc8R2KQRx9U2IcEnDFS0wjEJSniOlwiLA55pwP6ExLBJ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381540; 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=63mC52iV5MkEp+HLbHVQPfmQqczrd6LZlI71WtZfISA=; b=mnjtjX4VU4jkFRjq2moIWaXAd4XtYORlQceOH2PuN2gooJIOOwtPf+CvBoodmZXy3UblIyaFyPZWI/HiB4qTfkcQHDKGJ/ghsrTXhoVS7sjp6cyWq1h2eZBpUhWLavKniNTmpwPsrtC0GW2d3gRicQ9Ybd5o+qSoY/i/cP93y3Y= 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 1774381540669603.9120395210234; Tue, 24 Mar 2026 12:45:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fz-0003Wf-Jl; Tue, 24 Mar 2026 15:44:31 -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 1w57fx-0003Vq-Hc for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:29 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57fv-0008I6-UX for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:29 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id 8A35F4D302; Tue, 24 Mar 2026 19:43:58 +0000 (UTC) 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 6384C43FE4; Tue, 24 Mar 2026 19:43:57 +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 mJD3DH3pwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63mC52iV5MkEp+HLbHVQPfmQqczrd6LZlI71WtZfISA=; b=n9ClH9OIXYJRv+J6b0tKUi41js7PAQOxs/Nt/zTxVNN7G7anacnzVUAb5rVWl8QB3q76Ql rz6gWhCtg+t0oE52l4hCrFm7RmSHnqMhUvyzXv6oD5mhilFrCOgZdxqaqqsn0UrmFGxLgs fJSQKutobobHyguRLPNmMxZvMU6348o= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63mC52iV5MkEp+HLbHVQPfmQqczrd6LZlI71WtZfISA=; b=9l22+0Ft+kV+ljQozBBmqSzxxrTJHiBBJlXHqCvSS16BeU1jnaZZkhpUqz3hRUigyIqezi xHR8vRlZP6Kj8RCg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63mC52iV5MkEp+HLbHVQPfmQqczrd6LZlI71WtZfISA=; b=n9ClH9OIXYJRv+J6b0tKUi41js7PAQOxs/Nt/zTxVNN7G7anacnzVUAb5rVWl8QB3q76Ql rz6gWhCtg+t0oE52l4hCrFm7RmSHnqMhUvyzXv6oD5mhilFrCOgZdxqaqqsn0UrmFGxLgs fJSQKutobobHyguRLPNmMxZvMU6348o= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381438; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=63mC52iV5MkEp+HLbHVQPfmQqczrd6LZlI71WtZfISA=; b=9l22+0Ft+kV+ljQozBBmqSzxxrTJHiBBJlXHqCvSS16BeU1jnaZZkhpUqz3hRUigyIqezi xHR8vRlZP6Kj8RCg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 14/17] vmstate: Move VMS_MUST_EXIST check Date: Tue, 24 Mar 2026 16:43:29 -0300 Message-ID: <20260324194333.30004-15-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; R_RATELIMIT(0.00)[to_ip_from(RLuo5zndapfjusa9yqdunguuf8)]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; URIBL_BLOCKED(0.00)[suse.de:mid,suse.de:email,imap1.dmz-prg2.suse.org:helo]; RCPT_COUNT_THREE(0.00)[4]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381542447154100 Content-Type: text/plain; charset="utf-8" Move the VMS_MUST_EXIST check into the vmstate_field_exists() function and make it return bool + errp. This deduplicates a bit of code between save and load. XXX: why do we assert on save? Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 48 ++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 8f0f9383e2..5bc860129e 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -30,10 +30,10 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, void *opaque, JSONWriter *vmdesc, int version_id, Error **errp); =20 -/* Whether this field should exist for either save or load the VM? */ -static bool -vmstate_field_exists(const VMStateDescription *vmsd, const VMStateField *f= ield, - void *opaque, int version_id) +static bool vmstate_field_exists(const VMStateDescription *vmsd, + const VMStateField *field, + void *opaque, int version_id, + bool *exists, Error **errp) { bool result; =20 @@ -51,7 +51,16 @@ vmstate_field_exists(const VMStateDescription *vmsd, con= st VMStateField *field, result =3D field->version_id <=3D version_id; } =20 - return result; + *exists =3D result; + + if (!result && field->flags & VMS_MUST_EXIST) { + error_setg(errp, "Expected field to exist, but it doesn't: " + "%s/%s version_id: %d", + vmsd->name, field->name, vmsd->version_id); + return false; + } + + return true; } =20 static int vmstate_n_elems(void *opaque, const VMStateField *field) @@ -257,6 +266,7 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, { ERRP_GUARD(); const VMStateField *field =3D vmsd->fields; + bool ok =3D true; =20 trace_vmstate_load_state(vmsd->name, version_id); =20 @@ -281,7 +291,13 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, } =20 while (field->name) { - bool exists =3D vmstate_field_exists(vmsd, field, opaque, version_= id); + bool exists; + + ok =3D vmstate_field_exists(vmsd, field, opaque, version_id, &exis= ts, + errp); + if (!ok) { + return false; + } =20 trace_vmstate_load_state_field(vmsd->name, field->name, exists); =20 @@ -296,7 +312,6 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, for (i =3D 0; i < n_elems; i++) { /* If we will process the load of field? */ bool load_field =3D true; - bool ok =3D true; void *curr_elem; =20 if (field->flags & VMS_ARRAY_OF_POINTER) { @@ -326,10 +341,6 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, 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 false; } field++; } @@ -635,7 +646,14 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, } =20 while (field->name) { - if (vmstate_field_exists(vmsd, field, opaque, version_id)) { + bool exists; + + ok =3D vmstate_field_exists(vmsd, field, opaque, version_id, &exis= ts, + errp); + if (!ok) { + g_assert_not_reached(); + } + if (exists) { void *head; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); @@ -725,12 +743,6 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, =20 use_vmdesc =3D false; } - } else { - if (field->flags & VMS_MUST_EXIST) { - error_report("Output state validation failed: %s/%s", - vmsd->name, field->name); - assert(!(field->flags & VMS_MUST_EXIST)); - } } field++; } --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381557; cv=none; d=zohomail.com; s=zohoarc; b=E72wcNyiCjcFzWc308l3DZnVhs2HhgosBz6p2l+wjdDbg6+SbrjaXWjiohSrSlmqjNjg4dCZs6pXpUARxq42elcR8yssjDdk7XAS2gCb6S3Jh86GMScIOLlNeQHlLOK5/AB8pEUop9c6SlBi/3w5LfBHRchTu3aY0w+NuJCjd2w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381557; 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=uKkqaMifPLhVuCwU2Uzx6zWtC1DhStHTsblOt5+wAvA=; b=ZfbBpHTUTMZQBVb0A7IiHX8Yb+lHXf06i0hIp+WilarKonpJQJ3f2bguHjRJzJq9TC2c/gVVP6rvKuxWAfxPmEVvhOWEGligfRxh5OcyN0YS9G4m2OM3T/ei2VOlAdWynwqINq9vs/sGEmoPkJCZW6I8HJ58rHaTH2cJ2uZS9kg= 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 1774381557368817.0527792083852; Tue, 24 Mar 2026 12:45:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57fv-0003SY-1C; Tue, 24 Mar 2026 15:44: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 1w57fu-0003Rp-34 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:26 -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 1w57fs-0008Ha-ML for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:25 -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 1CF7E5BE1D; Tue, 24 Mar 2026 19:44:00 +0000 (UTC) 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 EA48A43FE4; Tue, 24 Mar 2026 19:43:58 +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 YFDWLX7pwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:43:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381440; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uKkqaMifPLhVuCwU2Uzx6zWtC1DhStHTsblOt5+wAvA=; b=LJlHHZ/FT4XwhQxWsba7xLivXw8tRl7OERSKWAqdN9+uyUtENrYdUDcsMio4rcyKscuuf3 wdf7FPAUnoWXgfhdaa/0LlXkLVFmfO2lKuI7NYFG00tqiEqexmIVCdA+SwjdrwMO1gGeVF ZYuo4UEYxyN1s+IFlW+9Jw7eOwxeh8g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381440; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uKkqaMifPLhVuCwU2Uzx6zWtC1DhStHTsblOt5+wAvA=; b=SxOx9ekqVA+6fy2vnaLcB5pGmLz8rHvRdGWAzxBza6RTTsBoHM7F0cDDCOkryUR0BUdI91 YEeW23L6BlEvRgAg== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b="LJlHHZ/F"; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=SxOx9ekq DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381440; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uKkqaMifPLhVuCwU2Uzx6zWtC1DhStHTsblOt5+wAvA=; b=LJlHHZ/FT4XwhQxWsba7xLivXw8tRl7OERSKWAqdN9+uyUtENrYdUDcsMio4rcyKscuuf3 wdf7FPAUnoWXgfhdaa/0LlXkLVFmfO2lKuI7NYFG00tqiEqexmIVCdA+SwjdrwMO1gGeVF ZYuo4UEYxyN1s+IFlW+9Jw7eOwxeh8g= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381440; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uKkqaMifPLhVuCwU2Uzx6zWtC1DhStHTsblOt5+wAvA=; b=SxOx9ekqVA+6fy2vnaLcB5pGmLz8rHvRdGWAzxBza6RTTsBoHM7F0cDDCOkryUR0BUdI91 YEeW23L6BlEvRgAg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 15/17] vmstate: Invert exists check Date: Tue, 24 Mar 2026 16:43:30 -0300 Message-ID: <20260324194333.30004-16-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; 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)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from,2a07:de40:b281:106:10:150:64:167:received]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 1CF7E5BE1D 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381558801158500 Content-Type: text/plain; charset="utf-8" Aiming to reduce one level of indentation on these routines, invert the exists check so it can "return early" (continue actually). There is too much code and doing it all at once would be hard to review. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 5bc860129e..1862198c70 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -301,7 +301,10 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescr= iption *vmsd, =20 trace_vmstate_load_state_field(vmsd->name, field->name, exists); =20 - if (exists) { + if (!exists) { + field++; + continue; + } else { void *head; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); @@ -653,7 +656,11 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, if (!ok) { g_assert_not_reached(); } - if (exists) { + + if (!exists) { + field++; + continue; + } else { void *head; int i, n_elems =3D vmstate_n_elems(opaque, field); int size =3D vmstate_size(opaque, field); --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381541; cv=none; d=zohomail.com; s=zohoarc; b=NY8ak+pQYDzmkSP0oIAClAAuE1QjJEvr44G9Rq1qxTicgUoe/MKo/bgweMkPAGTJBP/q6R7caEwIeEoTJfhf2Xyk50o+hdgzKb5SEts/4rtYz5OO2KZZO3Ol2VaHzjPL65xj5+9jweQwK4Ld/NeCzfsXSq9z4KjgNvSnHhlMwOs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381541; 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=JiI2v6n7yX90Xe5eMuiBRbc0Lf65FwJ+s8Qc9S+1YdA=; b=GCAjCEoEZetrYFT9DZ0zIx4Rej03crzufJ9AzR9lXjbW3Y5PRV3m0lNMlX8OiUqpUfYXQv5R4EvXSeka20G7bYQM6J0F7sGdW4aIGVezLFivNFqUvYDdhEf+MNsTWIN2Dl7T1ZgmH0gL4K4KxDNcIR5amUTn8rH5leSze7hC3ZQ= 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 1774381541020810.9831872077926; Tue, 24 Mar 2026 12:45:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57g4-0003aM-4l; Tue, 24 Mar 2026 15:44:36 -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 1w57g3-0003a4-7M for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:35 -0400 Received: from smtp-out1.suse.de ([195.135.223.130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w57g1-0008JA-Pv for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:34 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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-out1.suse.de (Postfix) with ESMTPS id A476B4D30E; Tue, 24 Mar 2026 19:44:01 +0000 (UTC) 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 7D09443FE4; Tue, 24 Mar 2026 19:44:00 +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 uMgqE4DpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:44:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381441; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JiI2v6n7yX90Xe5eMuiBRbc0Lf65FwJ+s8Qc9S+1YdA=; b=aQBAOvKjhjcmNpSfF/FNVrnSOf6CqDAqRLUqD7VezzH9OSHjIpCmieF4QWJaMuh2MHdyuz T18vAM0LzcF8oILFnv4k55Y1MrPuIlxAA0sZbKE3Vcz6Nqb5dvJlvpIhW1HZDIDDpJkpBR qX5NNb8AtqxinDqgt9TeZtji4qcROcs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381441; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JiI2v6n7yX90Xe5eMuiBRbc0Lf65FwJ+s8Qc9S+1YdA=; b=TJqyYFyvfgTTQ0mk/gDJg/+f3y9/VGfGRiPm48/jnQLYQdEzTI9Bw5Ugl3i3aIwmad6ydp 7uipzJQr+HYUEfBg== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381441; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JiI2v6n7yX90Xe5eMuiBRbc0Lf65FwJ+s8Qc9S+1YdA=; b=aQBAOvKjhjcmNpSfF/FNVrnSOf6CqDAqRLUqD7VezzH9OSHjIpCmieF4QWJaMuh2MHdyuz T18vAM0LzcF8oILFnv4k55Y1MrPuIlxAA0sZbKE3Vcz6Nqb5dvJlvpIhW1HZDIDDpJkpBR qX5NNb8AtqxinDqgt9TeZtji4qcROcs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381441; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JiI2v6n7yX90Xe5eMuiBRbc0Lf65FwJ+s8Qc9S+1YdA=; b=TJqyYFyvfgTTQ0mk/gDJg/+f3y9/VGfGRiPm48/jnQLYQdEzTI9Bw5Ugl3i3aIwmad6ydp 7uipzJQr+HYUEfBg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 16/17] vmstate: Declare variables at the top Date: Tue, 24 Mar 2026 16:43:31 -0300 Message-ID: <20260324194333.30004-17-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; R_RATELIMIT(0.00)[to_ip_from(RLuo5zndapfjusa9yqdunguuf8)]; TO_DN_SOME(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FUZZY_RATELIMITED(0.00)[rspamd.com]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_THREE(0.00)[4]; RCVD_TLS_ALL(0.00)[] 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=195.135.223.130; envelope-from=farosas@suse.de; helo=smtp-out1.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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381542757158500 Content-Type: text/plain; charset="utf-8" Move the variables declaration at the top so we can reduce the number of lines in the function by grouping some declarations. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 1862198c70..054e642ec9 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -292,6 +292,8 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, =20 while (field->name) { bool exists; + void *head; + int i, n_elems, size; =20 ok =3D vmstate_field_exists(vmsd, field, opaque, version_id, &exis= ts, errp); @@ -305,9 +307,8 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDescri= ption *vmsd, field++; continue; } else { - void *head; - int i, n_elems =3D vmstate_n_elems(opaque, field); - int size =3D vmstate_size(opaque, field); + n_elems =3D vmstate_n_elems(opaque, field); + size =3D vmstate_size(opaque, field); =20 head =3D vmstate_first(opaque, field, size, n_elems, !(field->flags & VMS_ARRAY_OF_POINTER)); @@ -649,7 +650,9 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMSt= ateDescription *vmsd, } =20 while (field->name) { - bool exists; + bool exists, is_null_prev =3D false, use_vmdesc =3D true; + void *head; + int i, n_elems, size; =20 ok =3D vmstate_field_exists(vmsd, field, opaque, version_id, &exis= ts, errp); @@ -661,11 +664,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMS= tateDescription *vmsd, field++; continue; } else { - void *head; - int i, n_elems =3D vmstate_n_elems(opaque, field); - int size =3D vmstate_size(opaque, field); - bool is_null_prev =3D false; - bool use_vmdesc =3D true; + n_elems =3D vmstate_n_elems(opaque, field); + size =3D vmstate_size(opaque, field); =20 trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems= ); head =3D vmstate_first(opaque, field, size, n_elems, false); --=20 2.51.0 From nobody Fri Apr 3 10:22:59 2026 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=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1774381531; cv=none; d=zohomail.com; s=zohoarc; b=U7Dyb5E4w0Z+BFhaKpl7gh1I7ksh9+oc3D6imIyFE74GoFmC+RDN40oqYIqvAkDFenIHeFn2xvy12uclQ01dgp2JWmzoGGkFHZcG1PMoFIFYnwzpbWkOmGOS6xH6O+3n8q1NyQi4n9TCoPGUIAfGnPFdK+TYrxSptiqcsgGF5s8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774381531; 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=Y1stviN/raIeGwfKRJGzfc+zY9+icZReG+c5s58fsdo=; b=cDTJ9SY9j0R9AdFp+DKOO0Wff1Gkn5Umlr/aghmn0+EKoAdN+zWJoLjlre4cvhJzQZMAVKSUzlZGMiAdIcvJn1GE+Eg8SDHw9zZYdlrNbBw9af/wMFU5P56WPgWww6XO4TNlU+D9Wqb8FZBn5BaQokuCVhdKSDlv/VWwX35RjWo= 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 1774381531925516.1162726320409; Tue, 24 Mar 2026 12:45:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w57g0-0003YK-AH; Tue, 24 Mar 2026 15:44:32 -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 1w57fz-0003WF-0h for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:31 -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 1w57fx-0008IL-4B for qemu-devel@nongnu.org; Tue, 24 Mar 2026 15:44:30 -0400 Received: from imap1.dmz-prg2.suse.org (unknown [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 37EC85BE1C; Tue, 24 Mar 2026 19:44:03 +0000 (UTC) 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 0F97743FE4; Tue, 24 Mar 2026 19:44:01 +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 eHwnNIHpwmlkMQAAD6G6ig (envelope-from ); Tue, 24 Mar 2026 19:44:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381443; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y1stviN/raIeGwfKRJGzfc+zY9+icZReG+c5s58fsdo=; b=VXdP7x+urG6oRbRSv+cO2dKT8gYkMbhvwFXO3lrBM27R+gmNnqpkn1snxKyJsCdAaH608I FYhYfGCvnNtuBLUpvebB28BnjsXKdeLJHR05qyniDVDzfEdKwIibeDa56nCCJtYpglrZeY bapb9I9SoDXf16W5x3xqWHtF2iUqoGc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381443; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y1stviN/raIeGwfKRJGzfc+zY9+icZReG+c5s58fsdo=; b=cskHf+ukmCAfaP7umTs3ZqsGRjG8mCalhhU0tCCuBqWvQuKYXJUvspNk4yLU4KcllUjfm8 oMVl4BiwHtdBNrBg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1774381443; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y1stviN/raIeGwfKRJGzfc+zY9+icZReG+c5s58fsdo=; b=VXdP7x+urG6oRbRSv+cO2dKT8gYkMbhvwFXO3lrBM27R+gmNnqpkn1snxKyJsCdAaH608I FYhYfGCvnNtuBLUpvebB28BnjsXKdeLJHR05qyniDVDzfEdKwIibeDa56nCCJtYpglrZeY bapb9I9SoDXf16W5x3xqWHtF2iUqoGc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1774381443; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y1stviN/raIeGwfKRJGzfc+zY9+icZReG+c5s58fsdo=; b=cskHf+ukmCAfaP7umTs3ZqsGRjG8mCalhhU0tCCuBqWvQuKYXJUvspNk4yLU4KcllUjfm8 oMVl4BiwHtdBNrBg== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Alexander Mikhalitsyn , Juraj Marcin Subject: [RFC PATCH v1 17/17] vmstate: Reduce indentation levels Date: Tue, 24 Mar 2026 16:43:32 -0300 Message-ID: <20260324194333.30004-18-farosas@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324194333.30004-1-farosas@suse.de> References: <20260324194333.30004-1-farosas@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.80 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; MIME_TRACE(0.00)[0:+]; TO_MATCH_ENVRCPT_ALL(0.00)[]; ARC_NA(0.00)[]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; R_RATELIMIT(0.00)[to_ip_from(RLuo5zndapfjusa9yqdunguuf8)]; RCVD_VIA_SMTP_AUTH(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:email] 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=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, 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: qemu development 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 @suse.de) X-ZM-MESSAGEID: 1774381532761158500 Content-Type: text/plain; charset="utf-8" Simply move the code out of the else branch. Signed-off-by: Fabiano Rosas --- migration/vmstate.c | 193 ++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 97 deletions(-) diff --git a/migration/vmstate.c b/migration/vmstate.c index 054e642ec9..22f8758960 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -306,46 +306,46 @@ bool vmstate_load_vmsd(QEMUFile *f, const VMStateDesc= ription *vmsd, if (!exists) { field++; continue; - } else { - n_elems =3D vmstate_n_elems(opaque, field); - size =3D vmstate_size(opaque, field); + } =20 - head =3D vmstate_first(opaque, field, size, n_elems, - !(field->flags & VMS_ARRAY_OF_POINTER)); + n_elems =3D vmstate_n_elems(opaque, field); + size =3D vmstate_size(opaque, field); =20 - for (i =3D 0; i < n_elems; i++) { - /* If we will process the load of field? */ - bool load_field =3D true; - void *curr_elem; + head =3D vmstate_first(opaque, field, size, n_elems, + !(field->flags & VMS_ARRAY_OF_POINTER)); =20 - if (field->flags & VMS_ARRAY_OF_POINTER) { - /* Peek a possible pointer marker instead of VMSD firs= t */ - ok =3D vmstate_ptr_marker_load(f, &load_field); - } + for (i =3D 0; i < n_elems; i++) { + /* If we will process the load of field? */ + bool load_field =3D true; + void *curr_elem; =20 - curr_elem =3D vmstate_next(head, field, size, i, - load_field && ok); + if (field->flags & VMS_ARRAY_OF_POINTER) { + /* Peek a possible pointer marker instead of VMSD first */ + ok =3D vmstate_ptr_marker_load(f, &load_field); + } =20 - if (load_field) { - ok =3D vmstate_load_field(f, curr_elem, size, field, e= rrp); - } + curr_elem =3D vmstate_next(head, field, size, i, load_field &&= ok); =20 - if (ok) { - int ret =3D qemu_file_get_error(f); - if (ret < 0) { - error_setg(errp, - "Failed to load %s state: stream error:= %d", - vmsd->name, ret); - trace_vmstate_load_field_error(field->name, ret); - return false; - } - } else { - qemu_file_set_error(f, -EINVAL); - trace_vmstate_load_field_error(field->name, -EINVAL); + if (load_field) { + ok =3D vmstate_load_field(f, curr_elem, size, field, errp); + } + + if (ok) { + int ret =3D qemu_file_get_error(f); + if (ret < 0) { + error_setg(errp, + "Failed to load %s state: stream error: %d", + vmsd->name, ret); + trace_vmstate_load_field_error(field->name, ret); return false; } + } else { + qemu_file_set_error(f, -EINVAL); + trace_vmstate_load_field_error(field->name, -EINVAL); + return false; } } + field++; } assert(field->flags =3D=3D VMS_END); @@ -663,93 +663,92 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VM= StateDescription *vmsd, if (!exists) { field++; continue; - } else { - n_elems =3D vmstate_n_elems(opaque, field); - size =3D vmstate_size(opaque, field); + } =20 - trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems= ); - head =3D vmstate_first(opaque, field, size, n_elems, false); + n_elems =3D vmstate_n_elems(opaque, field); + size =3D vmstate_size(opaque, field); =20 - for (i =3D 0; i < n_elems; i++) { - bool save_field =3D true; - void *curr_elem =3D vmstate_next(head, field, size, i, fal= se); - int max_elems =3D n_elems - i; + trace_vmstate_save_state_loop(vmsd->name, field->name, n_elems); + head =3D vmstate_first(opaque, field, size, n_elems, false); =20 - if (field->flags & VMS_ARRAY_OF_POINTER) { - bool use_marker_field, is_null, use_dynamic_array; + for (i =3D 0; i < n_elems; i++) { + bool save_field =3D true; + void *curr_elem =3D vmstate_next(head, field, size, i, false); + int max_elems =3D n_elems - i; =20 - is_null =3D !curr_elem; + if (field->flags & VMS_ARRAY_OF_POINTER) { + bool use_marker_field, is_null, use_dynamic_array; =20 + is_null =3D !curr_elem; + + /* + * When this is enabled, it means we will always push a ptr + * marker first for each element saying if it's populated. + */ + use_dynamic_array =3D + field->flags & VMS_ARRAY_OF_POINTER && + field->flags & VMS_ALLOC; + + use_marker_field =3D use_dynamic_array || is_null; + + if (vmdesc && vmsd_can_compress(field)) { /* - * When this is enabled, it means we will always push = a ptr - * marker first for each element saying if it's popula= ted. + * This logic only matters when dumping VM + * Desc, and only when the VMSD field can be + * compressed. + * + * Due to the fake nullptr handling above, if + * there's mixed null/non-null data, it + * doesn't make sense to emit a compressed + * array representation spanning the entire + * array because the field types will be + * different (e.g. struct vs. nullptr). Search + * ahead for the next null/non-null element + * and start a new compressed array if found. */ - use_dynamic_array =3D - field->flags & VMS_ARRAY_OF_POINTER && - field->flags & VMS_ALLOC; - - use_marker_field =3D use_dynamic_array || is_null; - - if (vmdesc && vmsd_can_compress(field)) { - /* - * This logic only matters when dumping VM - * Desc, and only when the VMSD field can be - * compressed. - * - * Due to the fake nullptr handling above, if - * there's mixed null/non-null data, it - * doesn't make sense to emit a compressed - * array representation spanning the entire - * array because the field types will be - * different (e.g. struct vs. nullptr). Search - * ahead for the next null/non-null element - * and start a new compressed array if found. - */ - if (is_null !=3D is_null_prev) { - is_null_prev =3D is_null; - use_vmdesc =3D true; - - for (int j =3D i + 1; j < n_elems; j++) { - void *elem =3D vmstate_next(head, field, s= ize, j, - false); - bool elem_is_null =3D !elem; - - if (is_null !=3D elem_is_null) { - max_elems =3D j - i; - break; - } - } - } - } - - if (use_dynamic_array) { + if (is_null !=3D is_null_prev) { + is_null_prev =3D is_null; use_vmdesc =3D true; - } =20 - if (use_marker_field) { - ok =3D vmstate_ptr_marker_save(f, curr_elem, vmsd,= field, - use_vmdesc ? vmdesc := NULL, - i, max_elems, errp); - if (!ok) { - goto out; + for (int j =3D i + 1; j < n_elems; j++) { + void *elem =3D vmstate_next(head, field, size,= j, + false); + bool elem_is_null =3D !elem; + + if (is_null !=3D elem_is_null) { + max_elems =3D j - i; + break; + } } - - save_field =3D !!curr_elem; } } =20 - if (save_field) { - ok =3D vmstate_save_field_with_vmdesc( - f, curr_elem, size, vmsd, field, - use_vmdesc ? vmdesc : NULL, i, max_elems, errp); + if (use_dynamic_array) { + use_vmdesc =3D true; + } =20 + if (use_marker_field) { + ok =3D vmstate_ptr_marker_save(f, curr_elem, vmsd, fie= ld, + use_vmdesc ? vmdesc : NUL= L, + i, max_elems, errp); if (!ok) { goto out; } + + save_field =3D !!curr_elem; } + } =20 - use_vmdesc =3D false; + if (save_field) { + ok =3D vmstate_save_field_with_vmdesc(f, curr_elem, size, = vmsd, + field, + use_vmdesc ? vmdesc : = NULL, + i, max_elems, errp); + if (!ok) { + goto out; + } } + use_vmdesc =3D false; } field++; } --=20 2.51.0