From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 79242FEC107 for ; Tue, 24 Mar 2026 19:44:18 +0000 (UTC) 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) 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== 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 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: 8bit 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-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: D94A95BE1D 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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; } - -/* - * 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 VMStateDescription *vmsd, curr_elem = *(void **)curr_elem_p; } - use_marker_field = vmstate_use_marker_field(curr_elem, size, - use_dynamic_array); + use_marker_field = use_dynamic_array || (!curr_elem && size); + 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 VMStateDescription *vmsd, int i, n_elems = vmstate_n_elems(opaque, field); int size = vmstate_size(opaque, field); JSONWriter *vmdesc_loop = vmdesc; - bool use_marker_field_prev = false; + bool is_null_prev = 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 VMStateDescription *vmsd, for (i = 0; i < n_elems; i++) { void *curr_elem = first_elem + size * i; const VMStateField *inner_field; - bool use_marker_field; + bool use_marker_field, is_null; int max_elems = n_elems - i; if (field->flags & VMS_ARRAY_OF_POINTER) { @@ -659,8 +643,8 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vmsd, curr_elem = *(void **)curr_elem; } - use_marker_field = vmstate_use_marker_field(curr_elem, size, - use_dynamic_array); + is_null = (!curr_elem && size); + use_marker_field = use_dynamic_array || is_null; if (use_marker_field) { inner_field = vmsd_create_ptr_marker_field(field); @@ -681,16 +665,16 @@ static bool vmstate_save_vmsd_v(QEMUFile *f, const VMStateDescription *vmsd, */ if (vmdesc && vmsd_can_compress(field) && (field->flags & VMS_ARRAY_OF_POINTER) && - use_marker_field != use_marker_field_prev) { + is_null != is_null_prev) { - use_marker_field_prev = use_marker_field; + is_null_prev = is_null; vmdesc_loop = vmdesc; for (int j = i + 1; j < n_elems; j++) { void *elem = *(void **)(first_elem + size * j); - bool elem_use_marker_field = !elem && size; + bool elem_is_null = !elem && size; - if (use_marker_field != elem_use_marker_field) { + if (is_null != elem_is_null) { max_elems = j - i; break; } -- 2.51.0