From nobody Sat Nov 15 09:08:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1753909828; cv=none; d=zohomail.com; s=zohoarc; b=S64rJk16lXDUHQxqmBO9PpxOHgsS4ih8ydV5g5CBXsLbrnEpMzcZPOiRjsRLcSMxQcVTZ7ziCQAtYgXiqr7UI2niND6wEKchUlYUj2sfMH9X84QKpUZhG8gJnO/mazHii0bSxWZNKFmLU2/dxBlYWt+samGFS4pzOlo1L5l5qUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1753909828; 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=GaZ+Yz+zcCEr2tVtA+J5m5quEPo6bIi7orrs7mVcXNo=; b=KdMO4yKtf2dV/XNmqN3ZGLxh0cMQIlS7+ogTkU4HEdmHG1ndLBmWcAiiKp4kmAxZ4Rj5Vu/IsSiPJ6hHxV4QULnIkrQNTRIXFpzjp+TMZwEFIIJSlWveIU22ChzPRN3OIRTW2Kib1szL5oylPnUo/I0m7jZQ7lusGUHbXuTtCJs= 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 17539098280871015.8264711987171; Wed, 30 Jul 2025 14:10:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uhE3P-00029V-8o; Wed, 30 Jul 2025 17:09:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uhDnD-0004PZ-KW for qemu-devel@nongnu.org; Wed, 30 Jul 2025 16:52:55 -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 1uhDnB-0002Iw-L1 for qemu-devel@nongnu.org; Wed, 30 Jul 2025 16:52:55 -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 4B1591F76C; Wed, 30 Jul 2025 20:52:51 +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 0734313A50; Wed, 30 Jul 2025 20:52: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 YEynLiGGimjhPwAAD6G6ig (envelope-from ); Wed, 30 Jul 2025 20:52:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1753908771; 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=GaZ+Yz+zcCEr2tVtA+J5m5quEPo6bIi7orrs7mVcXNo=; b=XPniET5MoLUt+5GlUWuJnU09nHdPIs+J8gMzVFMn1I8XiVoqh0P7ETn7AZ40xo5hN32NNj vLxhNVgA+v3H2pAYTG8fXWPcfPvFn/ourd6JZ2Gal4vl6lybRuyFtRESgIl+46rYdU+S2m pk01MjWUUMK2agXlQcUX+GCllrZ51k4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1753908771; 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=GaZ+Yz+zcCEr2tVtA+J5m5quEPo6bIi7orrs7mVcXNo=; b=3Nk1oLIRKcNGV/RNIranxFQxfnDIeomnKZGzhqQu1fCiWv90xFbSjW+EbKL15tGuT/34su GzFsogC9vodsQYDQ== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1753908771; 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=GaZ+Yz+zcCEr2tVtA+J5m5quEPo6bIi7orrs7mVcXNo=; b=XPniET5MoLUt+5GlUWuJnU09nHdPIs+J8gMzVFMn1I8XiVoqh0P7ETn7AZ40xo5hN32NNj vLxhNVgA+v3H2pAYTG8fXWPcfPvFn/ourd6JZ2Gal4vl6lybRuyFtRESgIl+46rYdU+S2m pk01MjWUUMK2agXlQcUX+GCllrZ51k4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1753908771; 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=GaZ+Yz+zcCEr2tVtA+J5m5quEPo6bIi7orrs7mVcXNo=; b=3Nk1oLIRKcNGV/RNIranxFQxfnDIeomnKZGzhqQu1fCiWv90xFbSjW+EbKL15tGuT/34su GzFsogC9vodsQYDQ== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: Peter Xu , Peter Maydell Subject: [RFC PATCH 1/3] target/arm: Fix migration to QEMU 10.1 Date: Wed, 30 Jul 2025 17:52:43 -0300 Message-Id: <20250730205245.2118-2-farosas@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20250730205245.2118-1-farosas@suse.de> References: <20250730205245.2118-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%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-0.999]; 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)[imap1.dmz-prg2.suse.org:helo]; 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)[3]; 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=2a07:de40:b251:101:10:150:64:2; envelope-from=farosas@suse.de; helo=smtp-out2.suse.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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: 1753909829821116600 Content-Type: text/plain; charset="utf-8" The DBGDTRTX register definition was removed from cpu->cp_regs in the 10.1 cycle. This breaks migration from QEMU versions < 10.1 due to the present of an extra, unknown (to 10.1) register in the migration stream. Change the cpu_post_load validation code to recognise that the register has been removed and ignore it when present in the stream. Keep a compatibility list with the registers that should be ignored when sent from versions older than 10.1. The value of the cpregs hashtable key is used because it can be derived on the destination (where this patch applies) from the cpreg_vmstate_indexes array. Note that this solution is *not* generic for other QEMU versions moving forward, this is a stop gap to avoid machines being stuck in QEMU < 10.1 without a migration path. A proper solution would include versioning of the register list and recognizing any registers removed/changed. Fixes: 655659a74a ("target/arm: Correct encoding of Debug Communications Ch= annel registers") Signed-off-by: Fabiano Rosas --- Will an older guest using the register have issues after migration once the register gets set to its default value? --- target/arm/machine.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/target/arm/machine.c b/target/arm/machine.c index 6986915bee..2d4df53817 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -8,6 +8,7 @@ #include "cpu-features.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" +#include "target/arm/cpregs.h" #include "target/arm/gtimer.h" =20 static bool vfp_needed(void *opaque) @@ -868,6 +869,14 @@ static const VMStateInfo vmstate_powered_off =3D { .put =3D put_power, }; =20 +static uint64_t compat_cpreg_keys_virt_10_0[] =3D { + /* + * { .name =3D "DBGDTRTX", .state =3D ARM_CP_STATE_AA32, + * .cp =3D 14, .crn =3D 0, .crm =3D 5, .opc1 =3D 3, .opc2 =3D 0 } + */ + ENCODE_CP_REG(14, 0, 1, 0, 5, 3, 0), +}; + static int cpu_pre_save(void *opaque) { ARMCPU *cpu =3D opaque; @@ -951,7 +960,7 @@ static int cpu_post_load(void *opaque, int version_id) { ARMCPU *cpu =3D opaque; CPUARMState *env =3D &cpu->env; - int i, v; + int i, j, v; =20 /* * Handle migration compatibility from old QEMU which didn't @@ -987,10 +996,23 @@ static int cpu_post_load(void *opaque, int version_id) } if (cpu->cpreg_vmstate_indexes[v] < cpu->cpreg_indexes[i]) { /* register in their list but not ours: fail migration */ + + for (j =3D 0; j < ARRAY_SIZE(compat_cpreg_keys_virt_10_0); j++= ) { + if (cpu->cpreg_vmstate_indexes[v] =3D=3D + cpreg_to_kvm_id(compat_cpreg_keys_virt_10_0[j])) { + /* + * ...unless the extra register is being explicitly + * ignored for migration compatibility purposes. + */ + i--; + goto next; + } + } return -1; } /* matching register, copy the value over */ cpu->cpreg_values[i] =3D cpu->cpreg_vmstate_values[v]; + next: v++; } =20 --=20 2.35.3