{"id":2228883,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2228883/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260427124738.966578-29-peter.maydell@linaro.org/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.1/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260427124738.966578-29-peter.maydell@linaro.org>","date":"2026-04-27T12:47:02","name":"[PULL,28/63] target/arm: Clear AArch64 ID regs from ARMISARegisters if AArch64 disabled","commit_ref":null,"pull_url":null,"state":"not-applicable","archived":false,"hash":"2ac1b3d186d8f7a8461b13324bbe28e660c0b073","submitter":{"id":5111,"url":"http://patchwork.ozlabs.org/api/1.1/people/5111/?format=json","name":"Peter Maydell","email":"peter.maydell@linaro.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260427124738.966578-29-peter.maydell@linaro.org/mbox/","series":[{"id":501642,"url":"http://patchwork.ozlabs.org/api/1.1/series/501642/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501642","date":"2026-04-27T12:46:34","name":"[PULL,01/63] docs/system: add FEAT_AA32 and FEAT_AA64 to emulation list","version":1,"mbox":"http://patchwork.ozlabs.org/series/501642/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2228883/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2228883/checks/","tags":{},"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=a1wFQ2Rl;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g43Zw5Zb1z1yHX\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 23:00:40 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wHLT7-0004Nq-Cq; Mon, 27 Apr 2026 08:53:50 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <peter.maydell@linaro.org>)\n id 1wHLNo-00084h-W5\n for qemu-devel@nongnu.org; Mon, 27 Apr 2026 08:48:25 -0400","from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <peter.maydell@linaro.org>)\n id 1wHLNi-0005fe-3C\n for qemu-devel@nongnu.org; Mon, 27 Apr 2026 08:48:12 -0400","by mail-wm1-x32b.google.com with SMTP id\n 5b1f17b1804b1-488a8ca4aadso142334585e9.3\n for <qemu-devel@nongnu.org>; Mon, 27 Apr 2026 05:48:06 -0700 (PDT)","from lanath.. (wildly.archaic.org.uk. [81.2.115.145])\n by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-488ffc5e3f4sm448974115e9.2.2026.04.27.05.48.04\n for <qemu-devel@nongnu.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 27 Apr 2026 05:48:04 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1777294085; x=1777898885; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:from:to:cc:subject:date:message-id\n :reply-to; bh=blK/QB0ifCOHjFFZaugJe65T2S2vwxgGyAYmHanyIto=;\n b=a1wFQ2RlqLH1abMMQZGcJlsVqcNt3PzxQ3LZdIbuwkTq5NkNYfIkTduWPo2aOcpPFt\n l4AKP8G3SkwRKLEeFsN0DteX/sl59MUZUAGmzOt8H+lIogJwLaXJWV/5kNE49YpBal57\n KqD+kpaB5/HDVRYzxoAPJkLPRydmlojAdguA5ZMNOf2Gvlf8sJlaTGc9ieuo/J/pS6wH\n Pg+xgt3nqjdqJcpngUN5c89FxxYWyU26u96YbJ+/WpgvY4lBsuJ5y5J859aXsX9wAivH\n x73gfkQg7E0ZXblIUCUyh/mVOqZLoTJy8zTMFKCEpkjJ7LNCKCoU2MjkIxB0KoQNQl2B\n SSFQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777294085; x=1777898885;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=blK/QB0ifCOHjFFZaugJe65T2S2vwxgGyAYmHanyIto=;\n b=GMa4AwF+mkPEOMW7sxFa2CViCmQK2ORwcPi/ihjmRbmA0rQ7tFU0JruoKX2QVa9ngK\n 63cqOYtsujrB6n82Hb8cuLIyLJC7jT5Vc9uWo40dUU+RUTkmkRxNcL6gZOFNBm3+EXaF\n GZn5LX5sE7jGLZm8gMYble2NFOCamkc5NLJoN/5nXkEDkOlgS2PBLa5wX2YdapymQUEj\n fFYMBLIaghyz9BS2BrFsIOhdEERyp146hoC9eaCsaT7mTsW/5BaXSR1FUGlVERuLTcFL\n n5VTBETtMbHI0P5THbrwOryN2J+SpgrUfYlpMTzMQCEuMvQuODtEeTA9oXNJwswSF6Ri\n MPBA==","X-Gm-Message-State":"AOJu0YwZr0KA+MR5hPZg6bgl1slciQ5XH4ESp1yui3AUFFlBDwdkjcCr\n EMTfEHMw5nzG0p3f7Hzi6blIgD/iE+nRQsXbZuYasQxxoVZ3HBqDn8Xu5fq1qgHZI8hpAFO+xtU\n W/KBK","X-Gm-Gg":"AeBDies/CPNszLhUARSwpbgJovtXKyc2nArx0kZJjxlNgzAy2+ipBxYh+l2djFs7AOs\n WNfqwYAC5noUft95e798jviu50/mgavAHwxkvOqte6CAO9Y/Gqii1xpoMg6PmyV8dvHf5vOSZgv\n 3Qt7RD9yEx9L3f8xbHVVQ1v439/hxdwyz8cYF162iv2WARjIJXqh12gtyHEaCO0LPpWZhJbKg9c\n RILmNs7mE7dxay0BJS8PFNIC0BUUgIrUvg4Zh/TfaLljoNrPGeW2g0VXATE05lVf3qpU//6nThf\n jWzFLclw00xINY4esfEVigG0tjf8uPN71rqryb27fltqiGK7lCJ0hpy7FMX3w7Oq4RGrXS7lKNg\n zq46wqCDhJQTaQiwlsA480px8UqH/5hObmHUr8x6jmKLDow7CikzCxt6yKPyAqfEoTTbusIq38e\n bPccbVOvUB8LK8MsjJzbF8YBBFzpL2O5E8A4ig6CZJVNHm4zVp1I2vOJeqtyQv1G6zDxV3q81Q2\n 8NcIv+ZdazvVbnEyJ8BYY4OFsnaT8AZuTqrkw8fpw==","X-Received":"by 2002:a05:600c:1da1:b0:488:f453:b976 with SMTP id\n 5b1f17b1804b1-488fb7844c5mr655106685e9.27.1777294085364;\n Mon, 27 Apr 2026 05:48:05 -0700 (PDT)","From":"Peter Maydell <peter.maydell@linaro.org>","To":"qemu-devel@nongnu.org","Subject":"[PULL 28/63] target/arm: Clear AArch64 ID regs from ARMISARegisters\n if AArch64 disabled","Date":"Mon, 27 Apr 2026 13:47:02 +0100","Message-ID":"<20260427124738.966578-29-peter.maydell@linaro.org>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260427124738.966578-1-peter.maydell@linaro.org>","References":"<20260427124738.966578-1-peter.maydell@linaro.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::32b;\n envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com","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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n 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 <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"If we create a normally-AArch64 CPU and configure it with\naarch64=off, this will by default leave all the AArch64 ID register\nvalues in its ARMISARegisters struct untouched.  That in turn means\nthat tests of cpu_isar_feature(aa64_something, cpu) will return true.\n\nUntil now we have had a design policy that you shouldn't check an\naa64_ feature unless you know that the CPU has AArch64; but this is\nquite fragile as it's easy to forget and only causes a problem in the\ncorner case where AArch64 was turned off.  In particular, when we\nextend the ability to disable AArch64 from only KVM to also TCG there\nare many more aa64 feature check points which we would otherwise have\nto audit for whether they needed to be guarded with a check on\nARM_FEATURE_AARCH64.\n\nInstead, make the CPU realize function zero out all the 64-bit ID\nregisters if a TCG CPU doesn't have AArch64; this will make aa64_\nfeature tests generally return false.\n\nWe only do this for TCG because only TCG really needs it, and for\nKVM it might be confusing to have QEMU's idea of the ID registers\nbe different from KVM's.\n\nSigned-off-by: Peter Maydell <peter.maydell@linaro.org>\nReviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\nReviewed-by: Richard Henderson <richard.henderson@linaro.org>\nMessage-id: 20260416165353.589569-2-peter.maydell@linaro.org\n---\n target/arm/cpu.c | 35 +++++++++++++++++++++++++++++++++++\n target/arm/cpu.h |  3 ++-\n 2 files changed, 37 insertions(+), 1 deletion(-)","diff":"diff --git a/target/arm/cpu.c b/target/arm/cpu.c\nindex b62de8addf..6705ee9db7 100644\n--- a/target/arm/cpu.c\n+++ b/target/arm/cpu.c\n@@ -1606,6 +1606,27 @@ void arm_cpu_finalize_features(ARMCPU *cpu, Error **errp)\n     }\n }\n \n+static void arm_clear_aarch64_idregs(ARMCPU *cpu)\n+{\n+    /* Zero out all the AArch64 ID registers in ARMISARegisters */\n+    SET_IDREG(&cpu->isar, ID_AA64ISAR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64ISAR1, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64ISAR2, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64PFR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64PFR1, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64PFR2, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64MMFR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64MMFR1, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64MMFR2, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64MMFR3, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64DFR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64DFR1, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64AFR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64AFR1, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64ZFR0, 0);\n+    SET_IDREG(&cpu->isar, ID_AA64SMFR0, 0);\n+}\n+\n static void arm_cpu_realizefn(DeviceState *dev, Error **errp)\n {\n     CPUState *cs = CPU(dev);\n@@ -1733,6 +1754,20 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)\n     }\n #endif\n \n+    /*\n+     * A TCG aarch64=off CPU has no AArch64 at all, so we clear out the\n+     * ID registers to avoid cpu_isar_feature(aa64_something, cpu) tests\n+     * incorrectly returning true. We don't do this for other accelerators\n+     * (which in practice means \"for KVM\", since no others have AArch32\n+     * guest support) because from KVM's point of view the AArch64 ID\n+     * registers still exist and must have their correct values. So we\n+     * avoid clearing them out so that we don't have QEMU and KVM with\n+     * different ideas of the ID registers.\n+     */\n+    if (tcg_enabled() && !arm_feature(env, ARM_FEATURE_AARCH64)) {\n+        arm_clear_aarch64_idregs(cpu);\n+    }\n+\n #ifdef CONFIG_USER_ONLY\n     /*\n      * User mode relies on IC IVAU instructions to catch modification of\ndiff --git a/target/arm/cpu.h b/target/arm/cpu.h\nindex 657ff4ab20..ab6bacf4aa 100644\n--- a/target/arm/cpu.h\n+++ b/target/arm/cpu.h\n@@ -1080,7 +1080,8 @@ struct ArchCPU {\n      * Note that if you add an ID register to the ARMISARegisters struct\n      * you need to also update the 32-bit and 64-bit versions of the\n      * kvm_arm_get_host_cpu_features() function to correctly populate the\n-     * field by reading the value from the KVM vCPU.\n+     * field by reading the value from the KVM vCPU. If it is an AArch64\n+     * ID register then you also must update arm_clear_aarch64_idregs().\n      */\n     struct ARMISARegisters {\n         uint32_t mvfr0;\n","prefixes":["PULL","28/63"]}