From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783993; cv=none; d=zohomail.com; s=zohoarc; b=DxtNWz/Mwk4O2ThxWkkmmwuI820f2Umf3yJKpaZEjvWmL1Worf+8nCQxOw8eBotUguHYCar6o1rmXbY+qR+n23BVpp2vwQ2X/ZQxhs12k475VJ5y6yq23QUL+HlGIv70BH/K+ZweG89AkYZXifCP6ZDUu6ISXSF6ia0LgskSXZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783993; 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=9oCqgkLy0DFJ4Z9S9ppARUIR4xtUYlH2rZkEz4wFBJQ=; b=BZ6xErfBt+7961EyaJm13J5KwkuUBDS8ix1pLuLogg1/L+ueEP96Tm0R3FA5g2tOZR8aYj7n3SJv0MhPdhnyyqZr/qo25senxcQeb+youJ13O4J0SwaZbyGSsav6Sei7j9OsBVOzLQS7guUN8+j+vroy1CvPUTftdbiR5gWpciE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783993163777.0530409561468; Thu, 5 Mar 2026 23:59:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4b-0007P7-Av; Fri, 06 Mar 2026 02:58:13 -0500 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 1vyQ4Z-0007O9-G4 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:11 -0500 Received: from p-west2-cluster1-host7-snip4-6.eps.apple.com ([57.103.68.89] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4Y-00063w-7C for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:11 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 8F2EA1800115; Fri, 6 Mar 2026 07:58:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 4BAB7180019D; Fri, 6 Mar 2026 07:58:02 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783889; x=1775375889; bh=9oCqgkLy0DFJ4Z9S9ppARUIR4xtUYlH2rZkEz4wFBJQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=JGiuzMT0E1/92xr1czUJVk3yQnA9q9jZjXlsyxnBDghJ6cVsiy0w5pLWMz1FRb3BgfW/mMN/4p8CxHkRFwqC2qyVcJnH3lmqtYJ+HhUaBWpzB1DvgT1GRbyP+bmdMLoMNDTneQ58jPjLHxqWlbgCkMtiEY17EuhJSu2l/g+angdxJvoChgFMhQlCwJRBIlSoMqqbAlGI/Op9aBe8rggj3TfIsC5oFoCo9yUDWPK3H18Aj79U62B2CsnkRyxn83TqU+ZUCqE0Ei3jnUgHOwiRYoOdfLzq4B31IN5ASTUwaO1EVEz5m0DSd+kXH6gLWy1UT3jJjXXbwdVTfIz9QdWYWQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 01/17] hw/arm: virt: remove hvf_arm.h include Date: Fri, 6 Mar 2026 08:57:40 +0100 Message-ID: <20260306075756.88922-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 6cOiNnDJocIINmB7Jb6B4rV8Pc7x5WiY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX8ezIe5CA0EBu m4lbkNe/wrLSN78WCy6g2A+ALNgL49hWbK9p0EAVNlqWQRX8GDJhNun+tB0au5u1KoRx/OzRR9u 0JTX5uTC2lm6V57Fi/SJqITEehIKExbEDyXQvELPGDEzXjASybh3gCbBhqc3Wn1cmQlkYOxiUD6 SKEikbxqaZGWAHy02ZOAyOQ6IytkK9d/b1BlTyFB/UEzCjHbVwcASAW33iwsFUpXvcelVMRcu6+ 36ON7sua5j4ZapVYNP1B1fRNu36w71Bzr9vyrTbvgRvrBOYkGBgqFMdMLZ3Za9m0jtlBTKjc0qM H8BDKbHDNj2lTzZb/3olc5+tg0n4zjn+/aXgEJh9UcuKqGmvpkm5gCo/IqlW4c= X-Authority-Info-Out: v=2.4 cv=RKC+3oi+ c=1 sm=1 tr=0 ts=69aa890f cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=lDyTXvYnw_i6wWSIVMAA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-ORIG-GUID: 6cOiNnDJocIINmB7Jb6B4rV8Pc7x5WiY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=676 bulkscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAAB7DAaP/lrW56/0Kj4sh18EXvvGBsQ9gmMWhffoZWDYnsRBfQLxY5yoSxOAJNJa5qJlTwIT44619avivRrw4z1YGCTqaTfUxYYdH20xfU8ILzeuUpK/KoCQxmnk3ttOy+rU4Rz1a1emVsIFL8/nZzLAP8LJBianPoWkEF9tYWGg47SHwT/prAqVs9LPbjRqaFMTRtCThh0gw0fdADsQ/Chl8Cg16kY4olS1QFucn08+der7JQFIbPRgJUpS+zUlxmzn+chO/EOlYAdfou/0R+beldzagz0B//Do+JE5XF1XZ1bdBnEzIiNipArRCwPXHgJSYcjEEyxyI12K+PAgAHCK5W4JzDIdINydYwi+llHYU9a5aBclih6RADDN/SupERW1GcxIasGfAfBH/4rbeqYZgCfe+OibiV1gCmSCZavOhYn3gUro6YJjNdQIEP7lQ2kSTQrLWIQNsHG0FS/fvauNxDg4hs6suZo5fC+34LqbPkh1CQgCHvVfBxZVD5CI+EOPox7ggt2ghYO9X7GYIqPzBBEEw/AwyyVAGaiprjqvXIhLBYgD/WMOMa48hyZE8IGlGMvPwHUTf/JNqCWnDeK/jI9mkPVyD1kPKnwf1Gc7WnlV0Kgb3rn99VTXQthP7eyiquJFKM2UdJQU5koAqwR1hkOZPPVUxNKce8CBfYN7K4Qt/uDA+OrLPvAw2TRP/Zf4/lVQ7tTq/5egKmMJV6df2Se8rnB9fAI/uqZ4YVjW1FAfNNWxg== 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=57.103.68.89; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783995379158500 Content-Type: text/plain; charset="utf-8" Having that include breaks the build for Linux after inclusion of SME suppo= rt. Signed-off-by: Mohamed Mediouni --- hw/arm/virt.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index cab2e21e8a..7456614d05 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -71,7 +71,6 @@ #include "hw/intc/arm_gicv3_its_common.h" #include "hw/core/irq.h" #include "kvm_arm.h" -#include "hvf_arm.h" #include "whpx_arm.h" #include "hw/firmware/smbios.h" #include "qapi/visitor.h" --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784194; cv=none; d=zohomail.com; s=zohoarc; b=IZBcondHPR/sv+gDJ0P2r4m8fpTBAkq7ZsqUpRgDA98R5/87xMfh9AAWRH+CVM0wUz8qhc52X7awCbrHcDUiF3y1DCbmUy4hEjzrXi68Zf/cjA6gXPs/xFrWiGWC1u2z+d0ZObS8vAUvPCguWy2mXhH0aioQ7Yb9fxpEsriDTsA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784194; 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=oermosgqoh8JEhoMeWDgwAHnYHuofVFkfxeTkLOlkJ8=; b=P0rLiozAD8oC9VtEBKYy1VhfmezxFpTOB3p0XOanT+u5ThF9lzeGqR7lUjbT1+PZxEbS81zqkt4ee/0CT4Lc6qshGCRzGHJX1ZU05MO7ef5/QLSXULXGRfhuN1cHFPC4OcyCX0PXEf4EdWbcBGfcpyFGuvOmEYbeBp7WlIZSocg= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784194803172.9060297128832; Fri, 6 Mar 2026 00:03:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4d-0007QW-JG; Fri, 06 Mar 2026 02:58:15 -0500 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 1vyQ4b-0007P9-P8 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:13 -0500 Received: from p-west2-cluster1-host4-snip4-10.eps.apple.com ([57.103.68.83] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4Z-000648-0z for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:13 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 0D6631800137; Fri, 6 Mar 2026 07:58:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 1AA621800193; Fri, 6 Mar 2026 07:58:04 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783889; x=1775375889; bh=oermosgqoh8JEhoMeWDgwAHnYHuofVFkfxeTkLOlkJ8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Os9UgHfjDN0ev9Klms3nNK/Q/Dh2kmVvJx/owByWZODMrpCHF4Dw2NSsBU2qIo/qpdFXEB/M3zODEPT2LxY8F/cNNCsNUwcHns1ILeKm920YXiwJuJKdNV59SL/E6r7Yk9bu9BmizbKDLozPssWs0rz0XEBXtJF0dQ+LW2pLfbtLis04O1EHmKqFsg7jyu3S8CHEnJdJZv81bT/fo1LPbpGMaeVOWSuK03VbJ4tN3FJIZ7Q5TcE5zUBw9tvK3VnyQRV4EJ2hSLLlcnx9PmWxuG7LI1jontjpmvUdpPdcrBRojzkTSnPXrDJVlWGpTHsL9SHbaWv9Rhu8gSmw6cosxw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Manos Pitsidianakis , Richard Henderson Subject: [PATCH v13 02/17] hvf/arm: handle FEAT_SME2 migration Date: Fri, 6 Mar 2026 08:57:41 +0100 Message-ID: <20260306075756.88922-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ZuujbfkxjOW3OYMMZ98_g_hA1PC5SQAf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX9iAkwWYNYisQ MgcHNzIM8d0sYRNLJLKH8pFV0pkAJ80wVK0/5lfypjOoRqSVF+D8xIIfOybSnebBeWxPRLW2RG6 bN+xrLEcvvssdR7CTKuvnvysDBnUJ5Yz6Kjx8JhmG02hc7seVFu07EW1UvN4Jxhv6LlI/D/gNlk 7bwPZ2owZtoHTFytwoSaRKbov4ssuW4wZKuemb527PlyLXllUz9xNMTAGIRCRIQXXDJyL//SdQl ppDCxTfciuo8bFWECqwq29TLPa2nn7mnT8rScFucbYtID1aterbyGmzH4GzjOS8vV0JX1zsM0z1 JY5Z6LCS5IqlMfPq/5UnrAlctsznu+xJWfmPeLP2wSqpZOfxa05RyDSR862zUU= X-Authority-Info-Out: v=2.4 cv=RKC+3oi+ c=1 sm=1 tr=0 ts=69aa8911 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=FLErkvThLWmWEKq3f44A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: ZuujbfkxjOW3OYMMZ98_g_hA1PC5SQAf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABOz7phm5ZJ0xxhpZwKEqPW95p/DIB6mUaETQjLWYBCt7nXPs6iV2dXFcHdDRnW2MA3bux0+tQek4JYZJ6G/vbeTzkBwE12mt7SFOQTxebJcpM4xxUIMQdMggH5cWnT9OcQxV5ve4fqHe+rCJOBxPxOggxWrniFPhKbuOgvSwNZUH9bHaPY+P9tT5XGlw0c0A2/eQlzf+2UaF0u6Jr7xJv+Exl3YiZX2kd3iyEFVFkk05YrjfmkhmFwEeqtBjbF0yBX6NORmVNPL55nBlGTyQ0l2E1ODdP2OKYsVaH2sAFvvJeWjaTCAkU34yvvBihcoO2ZEQ7/DvADTFyAm8tL6fbFsWIh7z5ErbmJgKOAukCA1EljzB9Go3KAaCQvqHu2C/TUDbevOkudcGxtc1mGGqK6tTOan7l6LkwJeqXav3UlvzltEYp5UbossCnrCrUqFNTdE4N5WPSC1sA8Vq5DjxUmRWlKj7w63iI80E86Q6w+vJOvhHolMJHY5ZAE4zPsMIkARQq3wJjxLqkMlvVzzI46UGQ46/a/5OBD8iHasceOpFLZLRx9EtxJ/j7Nz0UDz9xxUjOJBYmWrIzsJsu11YTeBp57zy90uBbIVZ/wkkz93zzTW+iQdQtILzTAQ741XAUSQ3TfeF6X59a9nRzs39S8dkABmR60jQ0fyRajhCzlO+cOe6WEONMFbMwmJvjOGKPA3W3KWX43D9FDxOHn47MaWhxw/PE6koVvBQZ+q4Loo/s2FHjHSboXjpABWHhql8F+FdYiMLdIWU= 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=57.103.68.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784195753158500 Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis SME2 support adds the following state for HVF guests: - Vector registers Z0, ... , Z31 (introduced by FEAT_SVE but HVF does not support it) - Predicate registers P0, .., P15 (also FEAT_SVE) - ZA register - ZT0 register - PSTATE.{SM,ZA} bits (SVCR pseudo-register) - SMPRI_EL1 which handles the PE's priority in the SMCU - TPIDR2_EL0 the thread local ID register for SME Signed-off-by: Manos Pitsidianakis Reviewed-by: Richard Henderson Message-Id: <20260303-sme2-hvf-v6-1-b473702d8287@linaro.org> --- target/arm/hvf/hvf.c | 294 ++++++++++++++++++++++++++++++++- target/arm/hvf/hvf_sme_stubs.h | 158 ++++++++++++++++++ target/arm/hvf/sysreg.c.inc | 8 + target/arm/hvf_arm.h | 41 +++++ target/arm/machine.c | 2 +- 5 files changed, 500 insertions(+), 3 deletions(-) create mode 100644 target/arm/hvf/hvf_sme_stubs.h diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index d79469ca27..3d194680cc 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -395,6 +395,60 @@ static const struct hvf_reg_match hvf_fpreg_match[] = =3D { { HV_SIMD_FP_REG_Q31, offsetof(CPUARMState, vfp.zregs[31]) }, }; =20 +static const struct hvf_reg_match hvf_sme2_zreg_match[] =3D { + { HV_SME_Z_REG_0, offsetof(CPUARMState, vfp.zregs[0]) }, + { HV_SME_Z_REG_1, offsetof(CPUARMState, vfp.zregs[1]) }, + { HV_SME_Z_REG_2, offsetof(CPUARMState, vfp.zregs[2]) }, + { HV_SME_Z_REG_3, offsetof(CPUARMState, vfp.zregs[3]) }, + { HV_SME_Z_REG_4, offsetof(CPUARMState, vfp.zregs[4]) }, + { HV_SME_Z_REG_5, offsetof(CPUARMState, vfp.zregs[5]) }, + { HV_SME_Z_REG_6, offsetof(CPUARMState, vfp.zregs[6]) }, + { HV_SME_Z_REG_7, offsetof(CPUARMState, vfp.zregs[7]) }, + { HV_SME_Z_REG_8, offsetof(CPUARMState, vfp.zregs[8]) }, + { HV_SME_Z_REG_9, offsetof(CPUARMState, vfp.zregs[9]) }, + { HV_SME_Z_REG_10, offsetof(CPUARMState, vfp.zregs[10]) }, + { HV_SME_Z_REG_11, offsetof(CPUARMState, vfp.zregs[11]) }, + { HV_SME_Z_REG_12, offsetof(CPUARMState, vfp.zregs[12]) }, + { HV_SME_Z_REG_13, offsetof(CPUARMState, vfp.zregs[13]) }, + { HV_SME_Z_REG_14, offsetof(CPUARMState, vfp.zregs[14]) }, + { HV_SME_Z_REG_15, offsetof(CPUARMState, vfp.zregs[15]) }, + { HV_SME_Z_REG_16, offsetof(CPUARMState, vfp.zregs[16]) }, + { HV_SME_Z_REG_17, offsetof(CPUARMState, vfp.zregs[17]) }, + { HV_SME_Z_REG_18, offsetof(CPUARMState, vfp.zregs[18]) }, + { HV_SME_Z_REG_19, offsetof(CPUARMState, vfp.zregs[19]) }, + { HV_SME_Z_REG_20, offsetof(CPUARMState, vfp.zregs[20]) }, + { HV_SME_Z_REG_21, offsetof(CPUARMState, vfp.zregs[21]) }, + { HV_SME_Z_REG_22, offsetof(CPUARMState, vfp.zregs[22]) }, + { HV_SME_Z_REG_23, offsetof(CPUARMState, vfp.zregs[23]) }, + { HV_SME_Z_REG_24, offsetof(CPUARMState, vfp.zregs[24]) }, + { HV_SME_Z_REG_25, offsetof(CPUARMState, vfp.zregs[25]) }, + { HV_SME_Z_REG_26, offsetof(CPUARMState, vfp.zregs[26]) }, + { HV_SME_Z_REG_27, offsetof(CPUARMState, vfp.zregs[27]) }, + { HV_SME_Z_REG_28, offsetof(CPUARMState, vfp.zregs[28]) }, + { HV_SME_Z_REG_29, offsetof(CPUARMState, vfp.zregs[29]) }, + { HV_SME_Z_REG_30, offsetof(CPUARMState, vfp.zregs[30]) }, + { HV_SME_Z_REG_31, offsetof(CPUARMState, vfp.zregs[31]) }, +}; + +static const struct hvf_reg_match hvf_sme2_preg_match[] =3D { + { HV_SME_P_REG_0, offsetof(CPUARMState, vfp.pregs[0]) }, + { HV_SME_P_REG_1, offsetof(CPUARMState, vfp.pregs[1]) }, + { HV_SME_P_REG_2, offsetof(CPUARMState, vfp.pregs[2]) }, + { HV_SME_P_REG_3, offsetof(CPUARMState, vfp.pregs[3]) }, + { HV_SME_P_REG_4, offsetof(CPUARMState, vfp.pregs[4]) }, + { HV_SME_P_REG_5, offsetof(CPUARMState, vfp.pregs[5]) }, + { HV_SME_P_REG_6, offsetof(CPUARMState, vfp.pregs[6]) }, + { HV_SME_P_REG_7, offsetof(CPUARMState, vfp.pregs[7]) }, + { HV_SME_P_REG_8, offsetof(CPUARMState, vfp.pregs[8]) }, + { HV_SME_P_REG_9, offsetof(CPUARMState, vfp.pregs[9]) }, + { HV_SME_P_REG_10, offsetof(CPUARMState, vfp.pregs[10]) }, + { HV_SME_P_REG_11, offsetof(CPUARMState, vfp.pregs[11]) }, + { HV_SME_P_REG_12, offsetof(CPUARMState, vfp.pregs[12]) }, + { HV_SME_P_REG_13, offsetof(CPUARMState, vfp.pregs[13]) }, + { HV_SME_P_REG_14, offsetof(CPUARMState, vfp.pregs[14]) }, + { HV_SME_P_REG_15, offsetof(CPUARMState, vfp.pregs[15]) }, +}; + /* * QEMU uses KVM system register ids in the migration format. * Conveniently, HVF uses the same encoding of the op* and cr* parameters @@ -406,22 +460,201 @@ static const struct hvf_reg_match hvf_fpreg_match[] = =3D { #define HVF_TO_KVMID(HVF) \ (CP_REG_ARM64 | CP_REG_SIZE_U64 | CP_REG_ARM64_SYSREG | (HVF)) =20 -/* Verify this at compile-time. */ +/* + * Verify this at compile-time. + * + * SME2 registers are guarded by a runtime availability attribute instead = of a + * compile-time def, so verify those at runtime in hvf_arch_init_vcpu() be= low. + */ =20 #define DEF_SYSREG(HVF_ID, ...) \ QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); +#define DEF_SYSREG_15_02(...) =20 #include "sysreg.c.inc" =20 #undef DEF_SYSREG +#undef DEF_SYSREG_15_02 =20 #define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG_15_02(...) =20 static const hv_sys_reg_t hvf_sreg_list[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG +#undef DEF_SYSREG_15_02 + +#define DEF_SYSREG(...) +#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, + +API_AVAILABLE(macos(15.2)) +static const hv_sys_reg_t hvf_sreg_list_sme2[] =3D { +#include "sysreg.c.inc" +}; + +#undef DEF_SYSREG +#undef DEF_SYSREG_15_02 + +/* + * For FEAT_SME2 migration, we need to store PSTATE.{SM,ZA} bits which are + * accessible with the SVCR pseudo-register. However, in the HVF API this = is + * not exposed as a system-register (i.e. HVF_SYS_REG_SVCR) but a custom + * struct, hv_vcpu_sme_state_t. So we need to define our own KVMID in orde= r to + * store it in cpreg_values and make it migrateable. + */ +#define SVCR KVMID_AA64_SYS_REG64(3, 3, 4, 2, 2) + +API_AVAILABLE(macos(15.2)) +static void hvf_arch_put_sme(CPUState *cpu) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + const size_t svl_bytes =3D hvf_arm_sme2_get_svl(); + const size_t z_size =3D svl_bytes; + const size_t preg_size =3D DIV_ROUND_UP(z_size, 8); + const size_t za_size =3D svl_bytes * svl_bytes; + hv_vcpu_sme_state_t sme_state =3D { 0 }; + hv_return_t ret; + uint64_t svcr; + int n; + + /* + * Set PSTATE.{SM,ZA} bits + */ + svcr =3D arm_cpu->cpreg_values[arm_cpu->cpreg_array_len - 1]; + env->svcr =3D svcr; + + /* + * Construct SVCR (PSTATE.{SM,ZA}) state to pass to HVF: + */ + sme_state.streaming_sve_mode_enabled =3D FIELD_EX64(env->svcr, SVCR, S= M) > 0; + sme_state.za_storage_enabled =3D FIELD_EX64(env->svcr, SVCR, ZA) > 0; + ret =3D hv_vcpu_set_sme_state(cpu->accel->fd, &sme_state); + assert_hvf_ok(ret); + + /* + * We only care about Z/P registers if we're in streaming SVE mode, i.= e. + * PSTATE.SM is set, because only then can instructions that access th= em be + * used. We don't care about the register values otherwise. This is be= cause + * when the processing unit exits/enters this mode, it zeroes out those + * registers. + */ + if (sme_state.streaming_sve_mode_enabled) { + for (n =3D 0; n < ARRAY_SIZE(hvf_sme2_zreg_match); ++n) { + ret =3D hv_vcpu_set_sme_z_reg(cpu->accel->fd, + hvf_sme2_zreg_match[n].reg, + (uint8_t *)&env->vfp.zregs[n].d[0], + z_size); + assert_hvf_ok(ret); + } + + for (n =3D 0; n < ARRAY_SIZE(hvf_sme2_preg_match); ++n) { + ret =3D hv_vcpu_set_sme_p_reg(cpu->accel->fd, + hvf_sme2_preg_match[n].reg, + (uint8_t *)&env->vfp.pregs[n].p[0], + preg_size); + assert_hvf_ok(ret); + } + } + + /* + * If PSTATE.ZA bit is set then ZA and ZT0 are valid, otherwise they a= re + * zeroed out. + */ + if (sme_state.za_storage_enabled) { + hv_sme_zt0_uchar64_t tmp =3D { 0 }; + + memcpy(&tmp, &env->za_state.zt0, 64); + ret =3D hv_vcpu_set_sme_zt0_reg(cpu->accel->fd, &tmp); + assert_hvf_ok(ret); + + ret =3D hv_vcpu_set_sme_za_reg(cpu->accel->fd, + (uint8_t *)&env->za_state.za, + za_size); + assert_hvf_ok(ret); + } + + return; +} + +API_AVAILABLE(macos(15.2)) +static void hvf_arch_get_sme(CPUState *cpu) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + const size_t svl_bytes =3D hvf_arm_sme2_get_svl(); + const size_t z_size =3D svl_bytes; + const size_t preg_size =3D DIV_ROUND_UP(z_size, 8); + const size_t za_size =3D svl_bytes * svl_bytes; + hv_vcpu_sme_state_t sme_state =3D { 0 }; + hv_return_t ret; + uint64_t svcr; + int n; + + /* + * Get SVCR (PSTATE.{SM,ZA}) state from HVF: + */ + ret =3D hv_vcpu_get_sme_state(cpu->accel->fd, &sme_state); + assert_hvf_ok(ret); + + /* + * Set SVCR first because changing it will zero out Z/P regs + */ + svcr =3D + (sme_state.za_storage_enabled ? R_SVCR_ZA_MASK : 0) + | (sme_state.streaming_sve_mode_enabled ? R_SVCR_SM_MASK : 0); + + aarch64_set_svcr(env, svcr, R_SVCR_ZA_MASK | R_SVCR_SM_MASK); + arm_cpu->cpreg_values[arm_cpu->cpreg_array_len - 1] =3D svcr; + + /* + * We only care about Z/P registers if we're in streaming SVE mode, i.= e. + * PSTATE.SM is set, because only then can instructions that access th= em be + * used. We don't care about the register values otherwise. This is be= cause + * when the processing unit exits/enters this mode, it zeroes out those + * registers. + */ + if (sme_state.streaming_sve_mode_enabled) { + for (n =3D 0; n < ARRAY_SIZE(hvf_sme2_zreg_match); ++n) { + ret =3D hv_vcpu_get_sme_z_reg(cpu->accel->fd, + hvf_sme2_zreg_match[n].reg, + (uint8_t *)&env->vfp.zregs[n].d[0], + z_size); + assert_hvf_ok(ret); + } + + for (n =3D 0; n < ARRAY_SIZE(hvf_sme2_preg_match); ++n) { + ret =3D hv_vcpu_get_sme_p_reg(cpu->accel->fd, + hvf_sme2_preg_match[n].reg, + (uint8_t *)&env->vfp.pregs[n].p[0], + preg_size); + assert_hvf_ok(ret); + } + } + + /* + * If PSTATE.ZA bit is set then ZA and ZT0 are valid, otherwise they a= re + * zeroed out. + */ + if (sme_state.za_storage_enabled) { + hv_sme_zt0_uchar64_t tmp =3D { 0 }; + + /* Get ZT0 in a tmp vector, and then copy it to env.za_state.zt0 */ + ret =3D hv_vcpu_get_sme_zt0_reg(cpu->accel->fd, &tmp); + assert_hvf_ok(ret); + + memcpy(&env->za_state.zt0, &tmp, 64); + ret =3D hv_vcpu_get_sme_za_reg(cpu->accel->fd, + (uint8_t *)&env->za_state.za, + za_size); + assert_hvf_ok(ret); + + } + + return; +} =20 static uint32_t hvf_reg2cp_reg(uint32_t reg) { @@ -534,6 +767,10 @@ int hvf_arch_get_registers(CPUState *cpu) uint64_t kvm_id =3D arm_cpu->cpreg_indexes[i]; int hvf_id =3D KVMID_TO_HVF(kvm_id); =20 + if (kvm_id =3D=3D HVF_TO_KVMID(SVCR)) { + continue; + } + if (cpu->accel->guest_debug_enabled) { /* Handle debug registers */ switch (hvf_id) { @@ -627,6 +864,13 @@ int hvf_arch_get_registers(CPUState *cpu) =20 arm_cpu->cpreg_values[i] =3D val; } + if (cpu_isar_feature(aa64_sme, arm_cpu)) { + if (__builtin_available(macOS 15.2, *)) { + hvf_arch_get_sme(cpu); + } else { + g_assert_not_reached(); + } + } assert(write_list_to_cpustate(arm_cpu)); =20 aarch64_restore_sp(env, arm_current_el(env)); @@ -643,6 +887,18 @@ int hvf_arch_put_registers(CPUState *cpu) hv_simd_fp_uchar16_t fpval; int i, n; =20 + /* + * Set SVCR first because changing it will zero out Z/P (including NEO= N) + * regs + */ + if (cpu_isar_feature(aa64_sme, arm_cpu)) { + if (__builtin_available(macOS 15.2, *)) { + hvf_arch_put_sme(cpu); + } else { + g_assert_not_reached(); + } + } + for (i =3D 0; i < ARRAY_SIZE(hvf_reg_match); i++) { val =3D *(uint64_t *)((void *)env + hvf_reg_match[i].offset); ret =3D hv_vcpu_set_reg(cpu->accel->fd, hvf_reg_match[i].reg, val); @@ -672,6 +928,10 @@ int hvf_arch_put_registers(CPUState *cpu) uint64_t kvm_id =3D arm_cpu->cpreg_indexes[i]; int hvf_id =3D KVMID_TO_HVF(kvm_id); =20 + if (kvm_id =3D=3D HVF_TO_KVMID(SVCR)) { + continue; + } + if (cpu->accel->guest_debug_enabled) { /* Handle debug registers */ switch (hvf_id) { @@ -985,6 +1245,18 @@ int hvf_arch_init_vcpu(CPUState *cpu) hv_return_t ret; int i; =20 + if (__builtin_available(macOS 15.2, *)) { + sregs_match_len +=3D ARRAY_SIZE(hvf_sreg_list_sme2) + 1; + +#define DEF_SYSREG_15_02(HVF_ID, ...) \ + g_assert(HVF_ID =3D=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS= __))); +#define DEF_SYSREG(...) + +#include "sysreg.c.inc" + +#undef DEF_SYSREG +#undef DEF_SYSREG_15_02 + } env->aarch64 =3D true; =20 /* system count frequency sanity check */ @@ -1005,7 +1277,7 @@ int hvf_arch_init_vcpu(CPUState *cpu) memset(arm_cpu->cpreg_values, 0, sregs_match_len * sizeof(uint64_t)); =20 /* Populate cp list for all known sysregs */ - for (i =3D 0; i < sregs_match_len; i++) { + for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list); i++) { hv_sys_reg_t hvf_id =3D hvf_sreg_list[i]; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); @@ -1016,6 +1288,24 @@ int hvf_arch_init_vcpu(CPUState *cpu) arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; } } + if (__builtin_available(macOS 15.2, *)) { + for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { + hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i]; + uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); + uint32_t key =3D kvm_to_cpreg_id(kvm_id); + const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs= , key); + + if (ri) { + assert(!(ri->type & ARM_CP_NO_RAW)); + arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; + } + } + /* + * Add SVCR last. It is elsewhere assumed its index is after + * hvf_sreg_list and hvf_sreg_list_sme2. + */ + arm_cpu->cpreg_indexes[sregs_cnt++] =3D HVF_TO_KVMID(SVCR); + } arm_cpu->cpreg_array_len =3D sregs_cnt; arm_cpu->cpreg_vmstate_array_len =3D sregs_cnt; =20 diff --git a/target/arm/hvf/hvf_sme_stubs.h b/target/arm/hvf/hvf_sme_stubs.h new file mode 100644 index 0000000000..9c679b7110 --- /dev/null +++ b/target/arm/hvf/hvf_sme_stubs.h @@ -0,0 +1,158 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +typedef int32_t hv_return_t; +typedef uint64_t hv_vcpu_t; + +static inline bool hvf_arm_sme2_supported(void) +{ + return false; +} + +static inline uint32_t hvf_arm_sme2_get_svl(void) +{ + g_assert_not_reached(); +} + +typedef enum hv_sme_p_reg_t { + HV_SME_P_REG_0, + HV_SME_P_REG_1, + HV_SME_P_REG_2, + HV_SME_P_REG_3, + HV_SME_P_REG_4, + HV_SME_P_REG_5, + HV_SME_P_REG_6, + HV_SME_P_REG_7, + HV_SME_P_REG_8, + HV_SME_P_REG_9, + HV_SME_P_REG_10, + HV_SME_P_REG_11, + HV_SME_P_REG_12, + HV_SME_P_REG_13, + HV_SME_P_REG_14, + HV_SME_P_REG_15, +} hv_sme_p_reg_t; + +typedef __attribute__((ext_vector_type(64))) uint8_t hv_sme_zt0_uchar64_t; + +typedef enum hv_sme_z_reg_t { + HV_SME_Z_REG_0, + HV_SME_Z_REG_1, + HV_SME_Z_REG_2, + HV_SME_Z_REG_3, + HV_SME_Z_REG_4, + HV_SME_Z_REG_5, + HV_SME_Z_REG_6, + HV_SME_Z_REG_7, + HV_SME_Z_REG_8, + HV_SME_Z_REG_9, + HV_SME_Z_REG_10, + HV_SME_Z_REG_11, + HV_SME_Z_REG_12, + HV_SME_Z_REG_13, + HV_SME_Z_REG_14, + HV_SME_Z_REG_15, + HV_SME_Z_REG_16, + HV_SME_Z_REG_17, + HV_SME_Z_REG_18, + HV_SME_Z_REG_19, + HV_SME_Z_REG_20, + HV_SME_Z_REG_21, + HV_SME_Z_REG_22, + HV_SME_Z_REG_23, + HV_SME_Z_REG_24, + HV_SME_Z_REG_25, + HV_SME_Z_REG_26, + HV_SME_Z_REG_27, + HV_SME_Z_REG_28, + HV_SME_Z_REG_29, + HV_SME_Z_REG_30, + HV_SME_Z_REG_31, +} hv_sme_z_reg_t; + +enum { + HV_SYS_REG_SMCR_EL1, + HV_SYS_REG_SMPRI_EL1, + HV_SYS_REG_TPIDR2_EL0, + HV_SYS_REG_ID_AA64ZFR0_EL1, + HV_SYS_REG_ID_AA64SMFR0_EL1, +}; + +typedef struct { + bool streaming_sve_mode_enabled; + bool za_storage_enabled; +} hv_vcpu_sme_state_t; + +static inline hv_return_t hv_sme_config_get_max_svl_bytes(size_t *value) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_get_sme_state(hv_vcpu_t vcpu, + hv_vcpu_sme_state_t *sme_s= tate) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_set_sme_state(hv_vcpu_t vcpu, + const hv_vcpu_sme_state_t = *sme_state) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_get_sme_z_reg(hv_vcpu_t vcpu, + hv_sme_z_reg_t reg, + uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_set_sme_z_reg(hv_vcpu_t vcpu, + hv_sme_z_reg_t reg, + const uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_get_sme_p_reg(hv_vcpu_t vcpu, + hv_sme_p_reg_t reg, + uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_set_sme_p_reg(hv_vcpu_t vcpu, + hv_sme_p_reg_t reg, + const uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_get_sme_za_reg(hv_vcpu_t vcpu, + uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_set_sme_za_reg(hv_vcpu_t vcpu, + const uint8_t *value, + size_t length) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_get_sme_zt0_reg(hv_vcpu_t vcpu, + hv_sme_zt0_uchar64_t *va= lue) +{ + g_assert_not_reached(); +} + +static inline hv_return_t hv_vcpu_set_sme_zt0_reg(hv_vcpu_t vcpu, + const hv_sme_zt0_uchar64= _t *value) +{ + g_assert_not_reached(); +} diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc index 067a8603fa..7a2f880f78 100644 --- a/target/arm/hvf/sysreg.c.inc +++ b/target/arm/hvf/sysreg.c.inc @@ -145,3 +145,11 @@ DEF_SYSREG(HV_SYS_REG_TPIDRRO_EL0, 3, 3, 13, 0, 3) DEF_SYSREG(HV_SYS_REG_CNTV_CTL_EL0, 3, 3, 14, 3, 1) DEF_SYSREG(HV_SYS_REG_CNTV_CVAL_EL0, 3, 3, 14, 3, 2) DEF_SYSREG(HV_SYS_REG_SP_EL1, 3, 4, 4, 1, 0) + +DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6) +DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4) +DEF_SYSREG_15_02(HV_SYS_REG_TPIDR2_EL0, 3, 3, 13, 0, 5) +DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, 4, 4) +DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5) +DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4) +DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6) diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index 5d19d82e5d..6b1c3b9792 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -22,4 +22,45 @@ void hvf_arm_init_debug(void); =20 void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); =20 +/* + * We need access to types from macOS SDK >=3D15.2, so expose stubs if the + * headers are not available until we raise our minimum macOS version. + */ +#ifdef __MAC_OS_X_VERSION_MAX_ALLOWED + #if (__MAC_OS_X_VERSION_MAX_ALLOWED >=3D 150200) + #include "system/hvf_int.h" + + static inline bool hvf_arm_sme2_supported(void) + { + if (__builtin_available(macOS 15.2, *)) { + size_t svl_bytes; + hv_return_t result =3D hv_sme_config_get_max_svl_bytes(&svl_by= tes); + if (result =3D=3D HV_UNSUPPORTED) { + return false; + } + assert_hvf_ok(result); + return svl_bytes > 0; + } else { + return false; + } + } + + static inline uint32_t hvf_arm_sme2_get_svl(void) + { + if (__builtin_available(macOS 15.2, *)) { + size_t svl_bytes; + hv_return_t result =3D hv_sme_config_get_max_svl_bytes(&svl_by= tes); + assert_hvf_ok(result); + return svl_bytes; + } else { + abort(); + } + } + #else /* (__MAC_OS_X_VERSION_MAX_ALLOWED >=3D 150200) */ + #include "hvf/hvf_sme_stubs.h" + #endif /* (__MAC_OS_X_VERSION_MAX_ALLOWED >=3D 150200) */ +#else /* ifdef __MAC_OS_X_VERSION_MAX_ALLOWED */ + #include "hvf/hvf_sme_stubs.h" +#endif /* ifdef __MAC_OS_X_VERSION_MAX_ALLOWED */ + #endif diff --git a/target/arm/machine.c b/target/arm/machine.c index bbaae34449..81a506ce4c 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -231,7 +231,7 @@ static bool sve_needed(void *opaque) { ARMCPU *cpu =3D opaque; =20 - return cpu_isar_feature(aa64_sve, cpu); + return cpu_isar_feature(aa64_sve, cpu) || cpu_isar_feature(aa64_sme, c= pu); } =20 /* The first two words of each Zreg is stored in VFP state. */ --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784194; cv=none; d=zohomail.com; s=zohoarc; b=U4N6YCmhDUoMMMf9mzKbr8nsU+XdLUnR+6ffoim7ACgcJjccpL6f7QtnClsn1rkCJB/lVb6YlnyYV/zATiAr8cV37q7JVAb6wL6uqLvrgX+KY01p99vxOjLkwP4uFcjGzGBbIIYQvW2bweGp2h9nVECZqyMGWe3aZTtN4GNse/8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784194; 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=uXYQoqD+b6enx0yN1GfreUu+eHC54GkioqxlyRGkbEw=; b=L2DYKHt+zBJFERTtXPblg/rpy0QEbpZy7TlU6j1SF870mhFecI+kSlyNZnifuO1LEx3ANJNxvML0Y5rNG3yq5l2TXlxr3/JwQUjeacnsAyClyZMrkWaEcz6nlCcZJck2gleMMy3tbb5n4cVXamidC+NZx51as/Ro1sOl+1gKJ7o= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784194700713.1295813992464; Fri, 6 Mar 2026 00:03:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4d-0007Qa-W6; Fri, 06 Mar 2026 02:58:16 -0500 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 1vyQ4c-0007Q7-TH for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:14 -0500 Received: from p-west2-cluster1-host2-snip4-3.eps.apple.com ([57.103.68.16] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4a-00064h-Vr for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:14 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id B4E58180024C; Fri, 6 Mar 2026 07:58:10 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id BDE971800116; Fri, 6 Mar 2026 07:58:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783892; x=1775375892; bh=uXYQoqD+b6enx0yN1GfreUu+eHC54GkioqxlyRGkbEw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Zz9nXDRjxegFuv/no1KBjm4JVJCtVXdwP1F/2J22Wt8hzrcAhIvvtq/B/S/UGS901mRBXW+oD7sFEbXp+wUTpzAwtKrrl9BwTYLT4ueX8jatWx9UdRrU1KVyCh0K5aft3ixKafTrSaCSdtYQ1NOAUxmQkfHa1k2Id/PXYTSNyUejNH38wt7o/Qbrc0h337kHoMs58xtrbMgqVjBXVAKQ8L0kASuXBDh3p5lSkAeW83dK3uAFyqXqfuR9cLkKGVvzw+hXxwa838kYMyeJ2Zt1RkDA2Bd3mUj53ayKoBhR263l0xoUSCw+B3pR54/ZdlPJbyX2l26xuSUNePAez/Y+qA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Manos Pitsidianakis , Richard Henderson Subject: [PATCH v13 03/17] hvf/arm: expose FEAT_SME2 to guest if available Date: Fri, 6 Mar 2026 08:57:42 +0100 Message-ID: <20260306075756.88922-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=aua/yCZV c=1 sm=1 tr=0 ts=69aa8913 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=oZ2wCSY6f7DP8ugrgSYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: vzcpVkRlDdkNOYvx3gQjHH2FADRhWchc X-Proofpoint-ORIG-GUID: vzcpVkRlDdkNOYvx3gQjHH2FADRhWchc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX+TDEWjF1HIYp ObhnHoA72IxnyzIewKbnJseCH8Pr5+muYBm+hGwJ8WJq1CW9hU+TxM042hDU3gqlYTD18zJxDKE GQb7plMumSt98qqCLcH5kwavDpf1J6z+3vWfveICE3dVLiKill7JBVgMIkW/G3BkPprQ+IezQ1U FWNmhLMQdcGzIvSGUe9yFGfa9hD3Nwa39uIEmPDqni36qDeeZPln1C7WvugIHZxb57LIaWhQ3x7 xYW6e33MN/xlhzADrhjz+qJElZCZWECzOn2LClk6Ool/J86mNvT/Ne8JvkvBPByAzgrTdv0N/JA AuiLb+QkQqfiJVYtu7bhV4uKf4bAVnVpmYaHKtnIbNVDz8KirgBZV2taHgQrr8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 adultscore=0 phishscore=0 malwarescore=0 mlxscore=0 clxscore=1030 mlxlogscore=999 suspectscore=0 bulkscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABD/n7aIeT5yqk+BmH918izJ8daNoOLVnlDEaO0C1dIP2BuqJl2eEaPI/ZRxK5/BNa78CvYU1ksIyXTuyjJ40yNA4Qd0+Xl/0R+wBLQZGAPjCWxPTwFRfFzCqfWfc2N3hqRJuOagAJZMOPq99NANbEOhnLfTvLmbtpmR88GKmxB/39L5sIbP0UkFS4NiROLKYhF5H6UWSG5dWZ053tzMDkw3vIWawt7JkjRFW7DkADbh9LYesZG3kucoBv3KnS3Nr4vg4PtffOZ74GrfORvkRq3R++GfwgxLiTO9/W/EsGfb0cQHe5XJuKFzNgZVjTTKVTkSzQQT21elzd7xu6LYuoS5rdfQ38alOcpc12Wk6M23e78GzycNM6Y8cHTa9Wu+VpYpb9x6A5QHfsBVPSqqRQIkmDSSP7sE0SE2Nm5qZeRMS9Q1mFbx+wKOG6TURFmKb03xGrip6HY8Ruen6jAaB4wJi3Kr1EsGHJ6ATRkVcJZiE+8IkwTy0apW05HbeE043+XP1f8q+1JRkccbK5fTfRBTQ2yi1v7c2l0RrOtWQp+7FlH2V5D7DN7px06jM/+NckFUWgtef9aOTGBuwpe5blR3ssiNfo3J3k5i361ytqYBWhsx1endaCw75HJTG6fAw6IZu7QnrVPojw2+RBSYeuF8I+BD7X6ri2q4K4u67YkyGEwOLWPg8oDzdRTFoKwxXFhqy5Bs+qPiQiB8aWlkNx9+3HsKd5Vmz2dKywKuOXNdJjxb/VT7Q/DvJjWZstvyyekACdna1BRVlXvIhP69sMzF/l+9gsXRF1yQ== 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=57.103.68.16; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784197786158500 Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis Starting from M4 cores and MacOS 15.2 SDK, HVF can virtualise FEAT_SME2. Signed-off-by: Manos Pitsidianakis Reviewed-by: Richard Henderson Message-Id: <20260303-sme2-hvf-v6-2-b473702d8287@linaro.org> --- target/arm/hvf/hvf.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 3d194680cc..c9787b3ea1 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -315,6 +315,7 @@ typedef struct ARMHostCPUFeatures { uint64_t features; uint64_t midr; uint32_t reset_sctlr; + uint32_t sme_vq_supported; const char *dtb_compatible; } ARMHostCPUFeatures; =20 @@ -1121,19 +1122,6 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) =20 clamp_id_aa64mmfr0_parange_to_ipa_size(&host_isar); =20 - /* - * Disable SME, which is not properly handled by QEMU hvf yet. - * To allow this through we would need to: - * - make sure that the SME state is correctly handled in the - * get_registers/put_registers functions - * - get the SME-specific CPU properties to work with accelerators - * other than TCG - * - fix any assumptions we made that SME implies SVE (since - * on the M4 there is SME but not SVE) - */ - SET_IDREG(&host_isar, ID_AA64PFR1, - GET_IDREG(&host_isar, ID_AA64PFR1) & ~R_ID_AA64PFR1_SME_MASK= ); - ahcf->isar =3D host_isar; =20 /* @@ -1148,6 +1136,8 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUF= eatures *ahcf) */ ahcf->reset_sctlr |=3D 0x00800000; =20 + ahcf->sme_vq_supported =3D hvf_arm_sme2_supported() ? hvf_arm_sme2_get= _svl() : 0; + /* Make sure we don't advertise AArch32 support for EL0/EL1 */ if ((GET_IDREG(&host_isar, ID_AA64PFR0) & 0xff) !=3D 0x11) { return false; @@ -1199,6 +1189,7 @@ void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu) cpu->env.features =3D arm_host_cpu_features.features; cpu->midr =3D arm_host_cpu_features.midr; cpu->reset_sctlr =3D arm_host_cpu_features.reset_sctlr; + cpu->sme_vq.supported =3D arm_host_cpu_features.sme_vq_supported; } =20 void hvf_arch_vcpu_destroy(CPUState *cpu) @@ -1339,6 +1330,7 @@ int hvf_arch_init_vcpu(CPUState *cpu) arm_cpu->isar.idregs[ID_AA64MMFR0_EL1_IDX]); assert_hvf_ok(ret); =20 + aarch64_add_sme_properties(OBJECT(cpu)); return 0; } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783951; cv=none; d=zohomail.com; s=zohoarc; b=J1yNUYx0OD73baNCBL7FAhLrmoDqIGY8KfdGVz7S9KZuJkceKqnFh1AJeKr8MIIYCjbOXMtTUEvj2qFlUf2xL/yZdx6i6nbRg3q03/7bBe7eBiWKrtdDIBpjQ6myhtPJkTxA84sZTOnzVydsMZckl+iZ1r+379SuTM9dXmkMGdI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783951; h=Content-Type: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=Zp00OUDs5i7KBbqMJ9QqV+rI4APAR+Ak88cZ5RV37w4=; b=O50bzaeH+BY+hmHzPNXqLcJUffXsWPyKZvOGUWWDLDzpCHcfLUYONq3eESYOr5QW17ruo4LKwVc4hqvYt98hNcyyA2k2Gem7MXeHnF9bM4gCB3hp8G04X6RhUjsEAmsVqjuf/e6V12+aHxGnIbWsQ8OYkoMExyJ9eUDB2OVpLSE= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783950988925.6232394887168; Thu, 5 Mar 2026 23:59:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4k-0007Te-Tz; Fri, 06 Mar 2026 02:58:22 -0500 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 1vyQ4j-0007SY-1z for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:21 -0500 Received: from p-west2-cluster1-host10-snip4-10.eps.apple.com ([57.103.68.123] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4e-00065L-J7 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:20 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 5FCF518001B9; Fri, 6 Mar 2026 07:58:13 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 7F074180024B; Fri, 6 Mar 2026 07:58:10 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783895; x=1775375895; bh=Zp00OUDs5i7KBbqMJ9QqV+rI4APAR+Ak88cZ5RV37w4=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=azQXVZOoDwmcLpfKMxYlzEtKQE5Zv6HiLD2yJj1RcbTeOsd/tPvR4u89I6NYbiVpVTPlOIyUU00bsnxaRZWF8euPBDXm/xSy6Mb5RFN9dAwWMNCYOPg9kUxJKyZqgveikMmR+h4jrGGXtPiilJb+/JfX/dyWYQs2lFY45UgDaKyCHfNKkFRBXRPyJ4vAYcnd6E5fYN8X6EwcFmrptm83nDQPld37diiaxgcIarfZpg3ZWY5uACA7Wl5VzA9UhsG6WD6fpJ6hpWFvXC0o7ZWJnbk0G/hZr/H5p3YyWbx+wK/E9+/kpO+VWF62Pe3lIEz0WM96B13W3+E7X2uKbxxiwA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 04/17] hw/intc: Add hvf vGIC interrupt controller support Date: Fri, 6 Mar 2026 08:57:43 +0100 Message-ID: <20260306075756.88922-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: A1dzYZR_BtZI2NFtp7NBA81Ec2Er9vnW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX5I65XNtUIPJW wwCJpM3n8yy0Rw+0739S16Z5Xqb5x6YTkDivy4hQE5GY7aQqcj8ct3+RQClyKdQK5IqoQR/4B7A sZIkXVb1cAO+98bCGWoLU34zAnvMHyvQ9OyrfZYPAf8UN7QnwKe2i9LpwptK3Wnqzfi9fdQRsAK RAmkp++2cEYeICGq5C+aBgUwyGn9oQYulis4/pXdsU5vpE1JjGIjfkVj8dREEfXSGs52KT4S30t dvSoqSGZ+3vV6GScWSGrt4CrDBbHSkjJ2TZOcbNGv2hR2bKe+YZTBsi3f5L7bDeStoa6/gcNv7j KWVjI0IjUVeOhALRRTSOyf2ola239akYH+9HfDV0uIwwJA4Jk7IhtwWJc89P90= X-Authority-Info-Out: v=2.4 cv=KNtXzVFo c=1 sm=1 tr=0 ts=69aa8916 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=D2JAlcJVxmvnjXxMMLIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: A1dzYZR_BtZI2NFtp7NBA81Ec2Er9vnW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 clxscore=1030 phishscore=0 mlxscore=0 lowpriorityscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABxpAq6twtB34dwGXV/64MN/Q5eoBiY95LXmlIIRQBTEVJPIM4Rvx6TglztKxwmEPymrLwTNdYsvQafYYZuLDvJJ5Oz07HJHEAKf42mdAbOJpEuklGGpMiRltifaIbg/gDEz5pNt8K3CXhq13gDSBUaXxYm0jtcNVVtGkyanHL4p9F6vO5wKmSjz4veOzxSpMQvD51uw2FkeSm8j8wzJ+xxdfvLI3SieZWGkkJJzgVlgJfRzworj/OXxctYldjyTn7mwSTAcVpMiz+byFm0+4d+Br9ZBHnALqkcbsFot25g1ZIaoVusHhyfS+3z3yuJhr/XEPSTxWxottpGl8Y/95awQmMqkC1VjfRG85jm9t6db2ncauzv6Tn3GALIWEgLaHROItq4LleMVIUfXKU3esuFtsY6KgSbEGrpT8wVzlX254i0VEh5kiliIIwG5XmPVmoMONurOrHnqg9WjrQ46ywv5rr96AWl+LwMQPi3+tv1gTLXJDMg9aYcmFqHa8LlFNM49FK3BUSgHL7MHVTfp/WwUP8ymHISqZyRGbi0823F288z5sIRG60rF5oumwFz5CR1AW/jo8b7WzbpH5kXvhr1amlnNh05QZPwhTZ/K9Yo9wETnncmar7inem4RwiSXYK7Zc+71Ck//kPEBd+bdtX0HsCvRRhHEVa8NtxJzChl0VdA/omSKAhR6JreUbLrL/2tvSDDJ5sfSnwjX+keqCahNcHUtVzsP2SqMoYOhkGUDd+KLIxqlXLNXNo8UQjhjSZ0w== 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=57.103.68.123; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783956394154100 This opens up the door to nested virtualisation support. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_hvf.c | 735 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 1 + 3 files changed, 737 insertions(+) create mode 100644 hw/intc/arm_gicv3_hvf.c diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c new file mode 100644 index 0000000000..d6a46b7d53 --- /dev/null +++ b/hw/intc/arm_gicv3_hvf.c @@ -0,0 +1,735 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support + * + * Copyright (c) 2025 Mohamed Mediouni + * Based on vGICv3 KVM code by Pavel Fedin + * + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "hw/intc/arm_gicv3_common.h" +#include "qemu/error-report.h" +#include "qemu/module.h" +#include "system/runstate.h" +#include "system/hvf.h" +#include "system/hvf_int.h" +#include "hvf_arm.h" +#include "gicv3_internal.h" +#include "vgic_common.h" +#include "qom/object.h" +#include "target/arm/cpregs.h" +#include + +struct HVFARMGICv3Class { + ARMGICv3CommonClass parent_class; + DeviceRealize parent_realize; + ResettablePhases parent_phases; +}; + +typedef struct HVFARMGICv3Class HVFARMGICv3Class; + +/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ +DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, + HVF_GICV3, TYPE_HVF_GICV3); + +/* + * Loop through each distributor IRQ related register; since bits + * corresponding to SPIs and PPIs are RAZ/WI when affinity routing + * is enabled, we skip those. + */ +#define for_each_dist_irq_reg(_irq, _max, _field_width) \ + for (_irq =3D GIC_INTERNAL; _irq < _max; _irq +=3D (32 / _field_width)) + +/* + * Wrap calls to the vGIC APIs to assert_hvf_ok() + * as a macro to keep the code clean. + */ +#define hv_gic_get_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_get_distributor_reg(offset, reg)) + +#define hv_gic_set_distributor_reg(offset, reg) \ + assert_hvf_ok(hv_gic_set_distributor_reg(offset, reg)) + +#define hv_gic_get_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_set_redistributor_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_redistributor_reg(vcpu, reg, value)) + +#define hv_gic_get_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_icc_reg(vcpu, reg, value)) + +#define hv_gic_set_icc_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_icc_reg(vcpu, reg, value)) + +#define hv_gic_get_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_get_ich_reg(vcpu, reg, value)) + +#define hv_gic_set_ich_reg(vcpu, reg, value) \ + assert_hvf_ok(hv_gic_set_ich_reg(vcpu, reg, value)) + +static void hvf_dist_get_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint64_t reg; + uint32_t *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + hv_gic_get_distributor_reg(offset, ®); + *field =3D reg; + offset +=3D 4; + field++; + } +} + +static void hvf_dist_put_priority(GICv3State *s, hv_gic_distributor_reg_t = offset + , uint8_t *bmp) +{ + uint32_t reg, *field; + int irq; + field =3D (uint32_t *)(bmp); + + for_each_dist_irq_reg(irq, s->num_irq, 8) { + reg =3D *field; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + field++; + } +} + +static void hvf_dist_get_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + hv_gic_get_distributor_reg(offset, ®); + reg =3D half_unshuffle32(reg >> 1); + if (irq % 32 !=3D 0) { + reg =3D (reg << 16); + } + *gic_bmp_ptr32(bmp, irq) |=3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_put_edge_trigger(GICv3State *s, hv_gic_distributor_re= g_t offset, + uint32_t *bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 2) { + reg =3D *gic_bmp_ptr32(bmp, irq); + if (irq % 32 !=3D 0) { + reg =3D (reg & 0xffff0000) >> 16; + } else { + reg =3D reg & 0xffff; + } + reg =3D half_shuffle32(reg) << 1; + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +/* Read a bitmap register group from the kernel VGIC. */ +static void hvf_dist_getbmp(GICv3State *s, hv_gic_distributor_reg_t offset= , uint32_t *bmp) +{ + uint64_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + + hv_gic_get_distributor_reg(offset, ®); + *gic_bmp_ptr32(bmp, irq) =3D reg; + offset +=3D 4; + } +} + +static void hvf_dist_putbmp(GICv3State *s, hv_gic_distributor_reg_t offset, + hv_gic_distributor_reg_t clroffset, uint32_t *= bmp) +{ + uint32_t reg; + int irq; + + for_each_dist_irq_reg(irq, s->num_irq, 1) { + /* + * If this bitmap is a set/clear register pair, first write to the + * clear-reg to clear all bits before using the set-reg to write + * the 1 bits. + */ + if (clroffset !=3D 0) { + reg =3D 0; + hv_gic_set_distributor_reg(clroffset, reg); + clroffset +=3D 4; + } + reg =3D *gic_bmp_ptr32(bmp, irq); + hv_gic_set_distributor_reg(offset, reg); + offset +=3D 4; + } +} + +static void hvf_gicv3_check(GICv3State *s) +{ + uint64_t reg; + uint32_t num_irq; + + /* Sanity checking s->num_irq */ + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_TYPER, ®); + num_irq =3D ((reg & 0x1f) + 1) * 32; + + if (num_irq < s->num_irq) { + error_report("Model requests %u IRQs, but HVF supports max %u", + s->num_irq, num_irq); + abort(); + } +} + +static void hvf_gicv3_put_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, c->ich_vmcr_el2); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, c->ich_lr_el2[i]); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + c->ich_apr[GICV3_G0][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + c->ich_apr[GICV3_G1NS][3]); + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_set_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_put_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint32_t reg; + uint64_t reg64; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + reg =3D c->gicr_waker; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D c->gicr_igroupr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICENA= BLER0, reg); + reg =3D c->gicr_ienabler0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, reg); + + /* Restore config before pending so we treat level/edge correctly */ + reg =3D half_shuffle32(c->edge_trigger >> 16) << 1; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICPEN= DR0, reg); + reg =3D c->gicr_ipendr0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, reg); + + reg =3D ~0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICACT= IVER0, reg); + reg =3D c->gicr_iactiver0; + hv_gic_set_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, reg); + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + reg =3D c->gicr_ipriorityr[i] | + (c->gicr_ipriorityr[i + 1] << 8) | + (c->gicr_ipriorityr[i + 2] << 16) | + (c->gicr_ipriorityr[i + 3] << 24); + hv_gic_set_redistributor_reg(vcpu, + HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, reg); + } + + /* CPU interface state */ + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, c->icc_sre_el1); + + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + c->icc_ctlr_el1[GICV3_NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + c->icc_igrpen[GICV3_G0]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + c->icc_igrpen[GICV3_G1NS]); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, c->icc_pmr_el1); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, c->icc_bpr[GICV3_G0]= ); + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, c->icc_bpr[GICV3_G1N= S]); + + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & + ICC_CTLR_EL1_PRIBITS_MASK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + 1; + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G0][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G0][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G0][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G0][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, reg64); + } + + switch (num_pri_bits) { + case 7: + reg64 =3D c->icc_apr[GICV3_G1NS][3]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, reg64); + reg64 =3D c->icc_apr[GICV3_G1NS][2]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, reg64); + /* fall through */ + case 6: + reg64 =3D c->icc_apr[GICV3_G1NS][1]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, reg64); + /* fall through */ + default: + reg64 =3D c->icc_apr[GICV3_G1NS][0]; + hv_gic_set_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, reg64); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_put_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_put(GICv3State *s) +{ + uint32_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + reg =3D s->gicd_ctlr; + hv_gic_set_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, reg); + + /* per-CPU state */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_put_cpu, data); + } + + /* s->enable bitmap -> GICD_ISENABLERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0 + , HV_GIC_DISTRIBUTOR_REG_GICD_ICENABLER0, s->enabled); + + /* s->group bitmap -> GICD_IGROUPRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0 + , 0, s->group); + + /* Restore targets before pending to ensure the pending state is set on + * the appropriate CPU interfaces in the kernel + */ + + /* s->gicd_irouter[irq] -> GICD_IROUTERn */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + (8 * i) + - (8 * GIC_INTERNAL); + hv_gic_set_distributor_reg(offset, s->gicd_irouter[i]); + } + + /* + * s->trigger bitmap -> GICD_ICFGRn + * (restore configuration registers before pending IRQs so we treat + * level/edge correctly) + */ + hvf_dist_put_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0, s->ed= ge_trigger); + + /* s->pending bitmap -> GICD_ISPENDRn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICPENDR0, s->pending); + + /* s->active bitmap -> GICD_ISACTIVERn */ + hvf_dist_putbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, + HV_GIC_DISTRIBUTOR_REG_GICD_ICACTIVER0, s->active); + + /* s->gicd_ipriority[] -> GICD_IPRIORITYRn */ + hvf_dist_put_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0, s->g= icd_ipriority); +} + +static void hvf_gicv3_get_cpu_el2(CPUState *cpu_state, run_on_cpu_data arg) +{ + int num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_VMCR_EL2, &c->ich_vmcr_el2); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_HCR_EL2, &c->ich_hcr_el2); + + for (int i =3D 0; i < GICV3_LR_MAX; i++) { + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_LR0_EL2, &c->ich_lr_el2[i]= ); + } + + num_pri_bits =3D c->vpribits; + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 3, + &c->ich_apr[GICV3_G0][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 2, + &c->ich_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2 + 1, + &c->ich_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP0R0_EL2, + &c->ich_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 3, + &c->ich_apr[GICV3_G1NS][3]); + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 2, + &c->ich_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2 + 1, + &c->ich_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_ich_reg(vcpu, HV_GIC_ICH_REG_AP1R0_EL2, + &c->ich_apr[GICV3_G1NS][0]); + } +} + +static void hvf_gicv3_get_cpu(CPUState *cpu_state, run_on_cpu_data arg) +{ + uint64_t reg; + int i, num_pri_bits; + + /* Redistributor state */ + GICv3CPUState *c =3D arg.host_ptr; + hv_vcpu_t vcpu =3D c->cpu->accel->fd; + + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IGROU= PR0, + ®); + c->gicr_igroupr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISENA= BLER0, + ®); + c->gicr_ienabler0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ICFGR= 1, + ®); + c->edge_trigger =3D half_unshuffle32(reg >> 1) << 16; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISPEN= DR0, + ®); + c->gicr_ipendr0 =3D reg; + hv_gic_get_redistributor_reg(vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_ISACT= IVER0, + ®); + c->gicr_iactiver0 =3D reg; + + for (i =3D 0; i < GIC_INTERNAL; i +=3D 4) { + hv_gic_get_redistributor_reg( + vcpu, HV_GIC_REDISTRIBUTOR_REG_GICR_IPRIORITYR0 + i, ®); + c->gicr_ipriorityr[i] =3D extract32(reg, 0, 8); + c->gicr_ipriorityr[i + 1] =3D extract32(reg, 8, 8); + c->gicr_ipriorityr[i + 2] =3D extract32(reg, 16, 8); + c->gicr_ipriorityr[i + 3] =3D extract32(reg, 24, 8); + } + + /* CPU interface */ + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_SRE_EL1, &c->icc_sre_el1); + + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_CTLR_EL1, + &c->icc_ctlr_el1[GICV3_NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN0_EL1, + &c->icc_igrpen[GICV3_G0]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_IGRPEN1_EL1, + &c->icc_igrpen[GICV3_G1NS]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_PMR_EL1, &c->icc_pmr_el1); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR0_EL1, &c->icc_bpr[GICV3_G0= ]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_BPR1_EL1, &c->icc_bpr[GICV3_G1= NS]); + num_pri_bits =3D ((c->icc_ctlr_el1[GICV3_NS] & ICC_CTLR_EL1_PRIBITS_MA= SK) >> + ICC_CTLR_EL1_PRIBITS_SHIFT) + + 1; + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 3, + &c->icc_apr[GICV3_G0][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 2, + &c->icc_apr[GICV3_G0][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1 + 1, + &c->icc_apr[GICV3_G0][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP0R0_EL1, + &c->icc_apr[GICV3_G0][0]); + } + + switch (num_pri_bits) { + case 7: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 3, + &c->icc_apr[GICV3_G1NS][3]); + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 2, + &c->icc_apr[GICV3_G1NS][2]); + /* fall through */ + case 6: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1 + 1, + &c->icc_apr[GICV3_G1NS][1]); + /* fall through */ + default: + hv_gic_get_icc_reg(vcpu, HV_GIC_ICC_REG_AP1R0_EL1, + &c->icc_apr[GICV3_G1NS][0]); + } + + /* Registers beyond this point are with nested virt only */ + if (c->gic->maint_irq) { + hvf_gicv3_get_cpu_el2(cpu_state, arg); + } +} + +static void hvf_gicv3_get(GICv3State *s) +{ + uint64_t reg; + int ncpu, i; + + hvf_gicv3_check(s); + + hv_gic_get_distributor_reg(HV_GIC_DISTRIBUTOR_REG_GICD_CTLR, ®); + s->gicd_ctlr =3D reg; + + /* Redistributor state (one per CPU) */ + + for (ncpu =3D 0; ncpu < s->num_cpu; ncpu++) { + run_on_cpu_data data; + data.host_ptr =3D &s->cpu[ncpu]; + run_on_cpu(s->cpu[ncpu].cpu, hvf_gicv3_get_cpu, data); + } + + /* GICD_IGROUPRn -> s->group bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_IGROUPR0, s->group); + + /* GICD_ISENABLERn -> s->enabled bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISENABLER0, s->enabled); + + /* GICD_ISPENDRn -> s->pending bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISPENDR0, s->pending); + + /* GICD_ISACTIVERn -> s->active bitmap */ + hvf_dist_getbmp(s, HV_GIC_DISTRIBUTOR_REG_GICD_ISACTIVER0, s->active); + + /* GICD_ICFGRn -> s->trigger bitmap */ + hvf_dist_get_edge_trigger(s, HV_GIC_DISTRIBUTOR_REG_GICD_ICFGR0 + , s->edge_trigger); + + /* GICD_IPRIORITYRn -> s->gicd_ipriority[] */ + hvf_dist_get_priority(s, HV_GIC_DISTRIBUTOR_REG_GICD_IPRIORITYR0 + , s->gicd_ipriority); + + /* GICD_IROUTERn -> s->gicd_irouter[irq] */ + for (i =3D GIC_INTERNAL; i < s->num_irq; i++) { + uint32_t offset =3D HV_GIC_DISTRIBUTOR_REG_GICD_IROUTER32 + + (8 * i) - (8 * GIC_INTERNAL); + hv_gic_get_distributor_reg(offset, &s->gicd_irouter[i]); + } +} + +static void hvf_gicv3_set_irq(void *opaque, int irq, int level) +{ + GICv3State *s =3D opaque; + if (irq > s->num_irq) { + return; + } + hv_gic_set_spi(GIC_INTERNAL + irq, !!level); +} + +static void hvf_gicv3_icc_reset(CPUARMState *env, const ARMCPRegInfo *ri) +{ + GICv3CPUState *c; + + c =3D env->gicv3state; + c->icc_pmr_el1 =3D 0; + /* + * Architecturally the reset value of the ICC_BPR registers + * is UNKNOWN. We set them all to 0 here; when the kernel + * uses these values to program the ICH_VMCR_EL2 fields that + * determine the guest-visible ICC_BPR register values, the + * hardware's "writing a value less than the minimum sets + * the field to the minimum value" behaviour will result in + * them effectively resetting to the correct minimum value + * for the host GIC. + */ + c->icc_bpr[GICV3_G0] =3D 0; + c->icc_bpr[GICV3_G1] =3D 0; + c->icc_bpr[GICV3_G1NS] =3D 0; + + c->icc_sre_el1 =3D 0x7; + memset(c->icc_apr, 0, sizeof(c->icc_apr)); + memset(c->icc_igrpen, 0, sizeof(c->icc_igrpen)); +} + +static void hvf_gicv3_reset_hold(Object *obj, ResetType type) +{ + GICv3State *s =3D ARM_GICV3_COMMON(obj); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + + if (kgc->parent_phases.hold) { + kgc->parent_phases.hold(obj, type); + } + + hvf_gicv3_put(s); +} + + +/* + * CPU interface registers of GIC needs to be reset on CPU reset. + * For the calling arm_gicv3_icc_reset() on CPU reset, we register + * below ARMCPRegInfo. As we reset the whole cpu interface under single + * register reset, we define only one register of CPU interface instead + * of defining all the registers. + */ +static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { + { .name =3D "ICC_CTLR_EL1", .state =3D ARM_CP_STATE_BOTH, + .opc0 =3D 3, .opc1 =3D 0, .crn =3D 12, .crm =3D 12, .opc2 =3D 4, + /* + * If ARM_CP_NOP is used, resetfn is not called, + * So ARM_CP_NO_RAW is appropriate type. + */ + .type =3D ARM_CP_NO_RAW, + .access =3D PL1_RW, + .readfn =3D arm_cp_read_zero, + .writefn =3D arm_cp_write_ignore, + /* + * We hang the whole cpu interface reset routine off here + * rather than parcelling it out into one little function + * per register + */ + .resetfn =3D hvf_gicv3_icc_reset, + }, +}; + +static void hvf_gicv3_realize(DeviceState *dev, Error **errp) +{ + ERRP_GUARD(); + GICv3State *s =3D HVF_GICV3(dev); + HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); + int i; + + kgc->parent_realize(dev, errp); + if (*errp) { + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + } + + if (s->security_extn) { + error_setg(errp, "the platform vGICv3 does not implement the " + "security extensions"); + return; + } + + if (s->nmi_support) { + error_setg(errp, "NMI is not supported with the platform GIC"); + return; + } + + if (s->nb_redist_regions > 1) { + error_setg(errp, "Multiple VGICv3 redistributor regions are not " + "supported by HVF"); + error_append_hint(errp, "A maximum of %d VCPUs can be used", + s->redist_region_count[0]); + return; + } + + gicv3_init_irqs_and_mmio(s, hvf_gicv3_set_irq, NULL); + + for (i =3D 0; i < s->num_cpu; i++) { + ARMCPU *cpu =3D ARM_CPU(qemu_get_cpu(i)); + + define_arm_cp_regs(cpu, gicv3_cpuif_reginfo); + } + + if (s->maint_irq && s->maint_irq !=3D HV_GIC_INT_MAINTENANCE) { + error_setg(errp, "vGIC maintenance IRQ mismatch with the hardcoded= one in HVF."); + return; + } +} + +static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + ARMGICv3CommonClass *agcc =3D ARM_GICV3_COMMON_CLASS(klass); + HVFARMGICv3Class *kgc =3D HVF_GICV3_CLASS(klass); + + agcc->pre_save =3D hvf_gicv3_get; + agcc->post_load =3D hvf_gicv3_put; + + device_class_set_parent_realize(dc, hvf_gicv3_realize, + &kgc->parent_realize); + resettable_class_set_parent_phases(rc, NULL, hvf_gicv3_reset_hold, NUL= L, + &kgc->parent_phases); +} + +static const TypeInfo hvf_arm_gicv3_info =3D { + .name =3D TYPE_HVF_GICV3, + .parent =3D TYPE_ARM_GICV3_COMMON, + .instance_size =3D sizeof(GICv3State), + .class_init =3D hvf_gicv3_class_init, + .class_size =3D sizeof(HVFARMGICv3Class), +}; + +static void hvf_gicv3_register_types(void) +{ + type_register_static(&hvf_arm_gicv3_info); +} + +type_init(hvf_gicv3_register_types) diff --git a/hw/intc/meson.build b/hw/intc/meson.build index 96742df090..b7baf8a0f6 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -42,6 +42,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GIC', if_true: files(= 'arm_gicv3_cpuif_common arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: files('arm_gicv3_cpui= f.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index c55cf18120..9adcab0a0c 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -315,6 +315,7 @@ DECLARE_OBJ_CHECKERS(GICv3State, ARMGICv3CommonClass, =20 /* Types for GICv3 kernel-irqchip */ #define TYPE_WHPX_GICV3 "whpx-arm-gicv3" +#define TYPE_HVF_GICV3 "hvf-arm-gicv3" =20 struct ARMGICv3CommonClass { /*< private >*/ --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783963; cv=none; d=zohomail.com; s=zohoarc; b=dWh9AMeJ3YHl3jUVy3uSTXVbeB/tdyydGCWiTOaQNQcS0Qy1yVmnOwZE7aw6y3V7lNVfeBQuzEWlyaoI3XyHTmJiCSReGi8DVcTGR4olHjFSlrSxrpttMxo/FXgQQOJFDwDjupdupOUHgEb6g120E9B0vGa8epEOYC8YaCb4Mqg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783963; h=Content-Type: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=XhMMsyuNqxqx54T1OMmdgINiRA0qeWFXPChvfberBDE=; b=ZRN+nKO29SJJn6JGxsfZx8ShA7v0zbDr+fUguKnDzGYL0TUfOpIpPTJDpauU/CxMx+hNMlR6w6aAJo6u7/DEnxoPs8FlgTcNK/ywbpBBhCi9kQBr3aOj/HUmDby3/6w++ivkUWEHEw+Z5XkFRYZ/zq8UoWKe7u+A0HRLAKGJPL8= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783963394471.213467799431; Thu, 5 Mar 2026 23:59:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4j-0007So-A7; Fri, 06 Mar 2026 02:58:21 -0500 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 1vyQ4i-0007SB-5H for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:20 -0500 Received: from p-west2-cluster1-host11-snip4-10.eps.apple.com ([57.103.68.33] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4f-00065c-Ud for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:19 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id B08E21800135; Fri, 6 Mar 2026 07:58:15 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 12B6A18001A7; Fri, 6 Mar 2026 07:58:12 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783897; x=1775375897; bh=XhMMsyuNqxqx54T1OMmdgINiRA0qeWFXPChvfberBDE=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=JXev3j002/Qn6b6hNlBG8bmujauHJNHAqK6DhXMot9f75M8XjsPyEh9Bob9ZkaXxPuXGm8Iic8GZMIMJaQgzGSFk2sjoBheJfC9PMxhRqFOEWBjgTymYkCU8kJ4VJnuYQ21vvUsxkLHHDF8qIG+8GVt16x/Em7EoDNUOoKMBHaS8aiPORiIJ0vQzd3C1gKwNIykXJIsfgqeVrenXnU1lPfzym+NnalYnbWO1UGhV2OzGcyrXA2xxbKQTG01Txb3my8l4p9T45HdRlLCbZep59iNZGo5Y5Cg2Rzx4q2os/5rjzCuMoZcpUhQMG3czjC0pILzd5Ej9BdmK8YpEIozosQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 05/17] hw/intc: arm_gicv3_hvf: save/restore Apple GIC state Date: Fri, 6 Mar 2026 08:57:44 +0100 Message-ID: <20260306075756.88922-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: qGw-ey-Dc9Kl5Gwh5qigbYcUzQ3N2x2a X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfXwuWZTAS/Z9Hx HTQz9exXNhFr2Ka/NmOpvGhlQUyJFoor8yqkJqxFpQCB/Uyc9GelNlkA+uGjCKhFKXeh+BradHf mqaHaDdPcHRm8UlC7dGH7tWrbLZhilzBVGZ5vTHOFTRn8Szo2tMFRQmwAiKePVXqvWTh3KCNIAY J9XPjpgCrJpvLQcHO7yP107m8EOGMfchrXpbKuB21JxVtJwZ3lbv/vqv5R2SmRjeOBCTiAuPc3+ goYh/TvrkqgF/qJqHNJJ3NeDYhXcROutd886mMpRmYil8c/sfrI4/cgzmoG2MjqpsdsuvJhXdr6 EaFeRf8iBpIoRRPvdhLsqzDtPzH8jWJXdVZcSnedX1kGyqrFIY7DnBSsyw6v+o= X-Proofpoint-ORIG-GUID: qGw-ey-Dc9Kl5Gwh5qigbYcUzQ3N2x2a X-Authority-Info-Out: v=2.4 cv=ArvjHe9P c=1 sm=1 tr=0 ts=69aa8918 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=kNOF8fv34t_zTB2Y_VIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 adultscore=0 suspectscore=0 phishscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABNQ/FdLk++zi7tdLLt1agwTB1y0ur/W/myN52FsSDEZkBS4lLPNTgG7d83VQgT49scz6yNYIWvyGripem8afkBauGeegVb0yTPFnffb/fWgsPwycq+auq/MKzdoOIrdgcTi/PtAGu3duxblwQVeXmJnnLkhPbZrgHUN8Lh8UkVIcfEaTnzpUBvty9nfpSGUjpNuslajfp0qV9eAd/bylLcf7GQGqxRlJe0AC459ceEtqValX2MVPZzjsgAktQqr4clCrofqux+oDxtCbQpix4UXL+sxdzIjYBUBeistZ7KS5jrk31MHw88ov5R8GPAcVglSHcip7tuXowsfYkb+GI9Oi0jIjCBz5Si6iwPVbZxxtSrDk30ByqjxS5shIrvG3rTjz2n61l241+huYoh7q2XskmyU81cQZqB+EfgYCzQVhjgb6qoyLrR06kepMKsjwEaU3fsjWPE2s5NaTglWgVqtRoBzhzGeVH6yE4IExhVqqusKr8YQHnb8DQVKSrZaFfnAxD2q6GEc4yJnzyzbS5A1Zg1JDFsjYIyrqwvhEncGBGKO7woMQ5sXHmJEfM+Ws9avn4DoS8s6LNx4Gs4M9X1cZgIbZyS6wKS/Z2tVc3xx1Gha4kTM72PjrruDdKszlWq1Jvzh1CXrO5up5THMevDMH3YwtQtn5Y8ZgpJJOzQTfezQYpFIimoFqD94N/nutOHAhdkIAj1FLIT4yav2AMQRCRPsvuPshk/iQ8Ruo//b6b1M/PzWD8rOIIcqIsy3SbuOs/AsGV/dHVNa8fvv6YMXbWbJ/MCyOhTcVS9TTteO8= 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=57.103.68.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783966192154100 On HVF, some of the GIC state is in an opaque Apple-provided structure. Save/restore that state to be able to save/restore VMs that use the hardwar= e GIC. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/intc/arm_gicv3_common.c | 1 + hw/intc/arm_gicv3_hvf.c | 95 ++++++++++++++++++++++++++++-- hw/intc/arm_gicv3_hvf_stub.c | 25 ++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 hw/intc/arm_gicv3_hvf_stub.c diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9200671c7a..9c3fb2f4bf 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -305,6 +305,7 @@ static const VMStateDescription vmstate_gicv3 =3D { .subsections =3D (const VMStateDescription * const []) { &vmstate_gicv3_gicd_no_migration_shift_bug, &vmstate_gicv3_gicd_nmi, + &vmstate_gicv3_hvf, NULL } }; diff --git a/hw/intc/arm_gicv3_hvf.c b/hw/intc/arm_gicv3_hvf.c index d6a46b7d53..f2249a7e7c 100644 --- a/hw/intc/arm_gicv3_hvf.c +++ b/hw/intc/arm_gicv3_hvf.c @@ -13,6 +13,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "system/runstate.h" +#include "migration/vmstate.h" #include "system/hvf.h" #include "system/hvf_int.h" #include "hvf_arm.h" @@ -30,8 +31,13 @@ struct HVFARMGICv3Class { =20 typedef struct HVFARMGICv3Class HVFARMGICv3Class; =20 -/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ -DECLARE_OBJ_CHECKERS(GICv3State, HVFARMGICv3Class, +typedef struct HVFGICv3State { + GICv3State gicv3_state; + uint32_t size; + void *state; +} HVFGICv3State; + +DECLARE_OBJ_CHECKERS(HVFGICv3State, HVFARMGICv3Class, HVF_GICV3, TYPE_HVF_GICV3); =20 /* @@ -656,7 +662,7 @@ static const ARMCPRegInfo gicv3_cpuif_reginfo[] =3D { static void hvf_gicv3_realize(DeviceState *dev, Error **errp) { ERRP_GUARD(); - GICv3State *s =3D HVF_GICV3(dev); + GICv3State *s =3D (GICv3State *)HVF_GICV3(dev); HVFARMGICv3Class *kgc =3D HVF_GICV3_GET_CLASS(s); int i; =20 @@ -703,6 +709,87 @@ static void hvf_gicv3_realize(DeviceState *dev, Error = **errp) } } =20 +/* + * HVF doesn't have a way to save the RDIST pending tables + * to guest memory, only to an opaque data structure. + */ +static bool gicv3_is_hvf(void *opaque) +{ + return hvf_enabled() && hvf_irqchip_in_kernel(); +} + +static int hvf_gic_opaque_state_save(void* opaque) +{ + HVFGICv3State* gic =3D opaque; + hv_gic_state_t gic_state; + hv_return_t err; + size_t size; + + gic_state =3D hv_gic_state_create(); + if (gic_state =3D=3D NULL) { + error_report("hvf: vgic: failed to create hv_gic_state_create."); + return 1; + } + err =3D hv_gic_state_get_size(gic_state, &size); + gic->size =3D size; + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state size."); + os_release(gic_state); + return 1; + } + gic->state =3D g_malloc(gic->size); + err =3D hv_gic_state_get_data(gic_state, gic->state); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to get GIC state."); + os_release(gic_state); + return 1; + } + + os_release(gic_state); + return 0; +} + +static int hvf_gic_opaque_state_free(void* opaque) +{ + HVFGICv3State* gic =3D opaque; + free(gic->state); + return 0; +} + +static int hvf_gic_opaque_state_restore(void* opaque, int version_id) +{ + HVFGICv3State* gic =3D opaque; + hv_return_t err; + if (!gic->size) { + return 0; + } + err =3D hv_gic_set_state(gic->state, gic->size); + if (err !=3D HV_SUCCESS) { + error_report("hvf: vgic: failed to restore GIC state."); + return 1; + } + return 0; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D gicv3_is_hvf, + .pre_save =3D hvf_gic_opaque_state_save, + .post_save =3D hvf_gic_opaque_state_free, + .post_load =3D hvf_gic_opaque_state_restore, + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(size, HVFGICv3State), + VMSTATE_VBUFFER_ALLOC_UINT32(state, + HVFGICv3State, 0, 0, + size), + VMSTATE_END_OF_LIST() + }, +}; + static void hvf_gicv3_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -722,7 +809,7 @@ static void hvf_gicv3_class_init(ObjectClass *klass, co= nst void *data) static const TypeInfo hvf_arm_gicv3_info =3D { .name =3D TYPE_HVF_GICV3, .parent =3D TYPE_ARM_GICV3_COMMON, - .instance_size =3D sizeof(GICv3State), + .instance_size =3D sizeof(HVFGICv3State), .class_init =3D hvf_gicv3_class_init, .class_size =3D sizeof(HVFARMGICv3Class), }; diff --git a/hw/intc/arm_gicv3_hvf_stub.c b/hw/intc/arm_gicv3_hvf_stub.c new file mode 100644 index 0000000000..a587332c7c --- /dev/null +++ b/hw/intc/arm_gicv3_hvf_stub.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * ARM Generic Interrupt Controller using HVF platform support stub + * + * Copyright (c) 2026 Mohamed Mediouni + * + */ +#include "qemu/osdep.h" +#include "hw/intc/arm_gicv3_common.h" +#include "migration/vmstate.h" +#include "qemu/typedefs.h" + +static bool needed_never(void *opaque) +{ + return false; +} + +const VMStateDescription vmstate_gicv3_hvf =3D { + .name =3D "arm_gicv3/hvf_gic_state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D needed_never, + .version_id =3D 1, + .minimum_version_id =3D 1, +}; diff --git a/hw/intc/meson.build b/hw/intc/meson.build index b7baf8a0f6..c6de2d9d00 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -43,6 +43,7 @@ arm_common_ss.add(when: 'CONFIG_ARM_GICV3', if_true: file= s('arm_gicv3_cpuif.c')) specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'= )) specific_ss.add(when: ['CONFIG_WHPX', 'TARGET_AARCH64'], if_true: files('a= rm_gicv3_whpx.c')) specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_true: files('= arm_gicv3_hvf.c')) +specific_ss.add(when: ['CONFIG_HVF', 'CONFIG_ARM_GICV3'], if_false: files(= 'arm_gicv3_hvf_stub.c')) specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: f= iles('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c')) arm_common_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c')) specific_ss.add(when: 'CONFIG_GRLIB', if_true: files('grlib_irqmp.c')) diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3= _common.h index 9adcab0a0c..03ab3e8f2f 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -339,4 +339,7 @@ void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_h= andler handler, */ const char *gicv3_class_name(void); =20 +/* HVF vGIC-specific state: stubbed out on a build with HVF disabled */ +extern const VMStateDescription vmstate_gicv3_hvf; + #endif --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784080; cv=none; d=zohomail.com; s=zohoarc; b=CEyn1wEU8WBEDoDDVZJnoSEXfiSwwKr2FtI8s7j18XGZC6hsNISHqTu3CuuCBYU/f2KzClDz4D5c1mCbTupC1Q/HtjGPtnCHD8Xc+YM1zhm9qfUeg21tR5ocEBA/8GrCQRvBfiPyICn8D7IE83f7GisAlXLfv3Yt1UddaICPMo0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784080; h=Content-Type: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=rXaTTmnJueHpahv5mbbFGzhoxXeyj8KEzu1DLRBsCwo=; b=P9oNWJO5cXDEdVBX23DI8qjbwKWFmMYtJ6/BRG6F0vSwsKwn5LW2EIHC0jRTZlk7ObVa5xQbplPVtI7NCBs9+L//JGpTTXW0e09HIofTclSYAjGm3cGaMaVcJE31ukEeiu9Oj47GvJxel+qqXYTE7J23rQm+RF3Svbt85cAk0qo= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784080367111.27363313048079; Fri, 6 Mar 2026 00:01:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4l-0007U9-Vc; Fri, 06 Mar 2026 02:58:23 -0500 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 1vyQ4l-0007Tt-9p for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:23 -0500 Received: from p-west2-cluster1-host9-snip4-1.eps.apple.com ([57.103.68.104] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4j-00066b-Dw for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:23 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 5C26818001A1; Fri, 6 Mar 2026 07:58:18 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 87432180010C; Fri, 6 Mar 2026 07:58:15 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783900; x=1775375900; bh=rXaTTmnJueHpahv5mbbFGzhoxXeyj8KEzu1DLRBsCwo=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=AidyLoIFRg64713a0hxWK6QKe6Hy4jGshpwkG66BemMn4qVpMkwgrsP8R9xBNun3+Mi3/dvdU/ZYRCMBhVKcBP2Cg+TYzEN3x6Mm3oIDduyO7igMpsHTU4bcIKrWQE7audC6xDYOSkFmZDrTtDMJjv106QMMEymEXJaTTtEU9KHmpOYAs3qgNYPqvEbWDa2W99+s+HOo0JuU0G5bhHfau9fDgLrLOtTnrv5Am9yLxd7+74l/AFxyFEp234XIoVG8ZCueTBrwVK2NsaXR1kJHkTaxhJlKy8p/dyVgxwI7hDCPHzCMlZqMqD+1FGx8Mg0n4Iot4opw4pAmDYFqZ7w3yA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 06/17] accel, hw/arm, include/system/hvf: infrastructure changes for HVF vGIC Date: Fri, 6 Mar 2026 08:57:45 +0100 Message-ID: <20260306075756.88922-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=EPwLElZC c=1 sm=1 tr=0 ts=69aa891b cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=n4FVybPFTm1vobq06wUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: zqj6LLWqGogIUI8bFugu6M-bBgJNRPzf X-Proofpoint-ORIG-GUID: zqj6LLWqGogIUI8bFugu6M-bBgJNRPzf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX+9iodP4jgUzC b5JGbniZ7oIT4fJgxrFUWDyEjqMFNtK2kCBc4i17Q70DqfpOukWYnyXCVJVlJs8UVq3yPTfPW+P PQZtoqLM5Trqr0OFBYGdi5pFvsryU47sebAhxgXviSh6MvNeCwwVm0xTuKMAacFGqIyZn8oJw6v OYKZVVx76gWdnB4cQdHShEQrgHd+7kFDPURaozsFXzXjUrW2NQRAYrQ7Bjqg7F2vOEmpUD2KjF/ 0P0FmUkg/lC9AsXptvM0E78YVoYID2ptgns32UJCJoSPKbXLIdF8sYkDl9JXDHtWErHGeVk8MII e4jkBTR/G02LXoZzWtPMbrSKonKnRYJHCq9Tnl7R3PguldO/8k3vzvDjQvWlUw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 spamscore=0 bulkscore=0 phishscore=0 mlxlogscore=999 suspectscore=0 lowpriorityscore=0 clxscore=1030 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABNT8c6H+nAZkU+OrcU8WGBXEMixOcqnZCYSQhLE/9v+Uw3RBsIXfTOCSZE9syLjfjy28NEFoqv/iCx/1wuV54Y1eHMwpF9WrjxpAhh2KD2eCtVTcpgZL8h7PHcrXCHboxzJ5xtIauvi75e987gZy8cD9iiry4CQ8/YTyC/dbJyNjc1tjJZZmLFDAiN6FSONGjAK3rti5kZZItvfPyhXxxP5CbWkiNqT1S/2OgmK2js1I4SyZ5lwwEZ1I8sTvm8BAqGjtjlika9NZeTWTmVvzVhJBZ3xhfYD2p5m+QFzMgaASaZvMBf7cnrHEzVu5zACOTev14K0uWGHAzTq5ie+qtMLQwWhht+1JhiHNjjY3Pn5NgM7CFhgBW9RmNvef99qWdBh4oY/PT4V54to4iXOKXU2ADbO/s8CF1HN/Xtfc/o5iS71pbht4S6NR98KijG8fX1rgkaNj2sJTjlhuigVtglAOuapdNbvp2HudBSojtTkVubxRzLwUdQlvs3ZvUODUSYMNDn65Wfgsmx8jCrsXM/BeUdB7bS04uTQncDXWETCA3XIuwVs69DBGFlvSUdu/MAZCeN59hoxIOlT9D0pL4zbeuoIAZFwRuE2xiOzVP2MbZrStve/XxDFAjonl4q1c0dcMWh25qTuIBaSB8TUxif/h/AXBIj2paWvM/IFlX1IpN6EW/1OZxI667RgF6oOGYVk3qKZpyEhoh5CyVKkYJ7SlpF3vFANa9tCjnoduZr/aFY9OtkawaiG8wUt8REDbU5xQEgNQ= 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=57.103.68.104; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784083361154100 Misc changes needed for HVF vGIC enablement. Note: x86_64 macOS exposes interrupt controller virtualisation since macOS = 12. Keeping an #ifdef here in case we end up supporting that... However, given that x86_64 macOS is on its way out, it'll probably (?) not = be supported in Qemu. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- accel/hvf/hvf-all.c | 50 ++++++++++++++++++++++++++++++++++++++ accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 23 +++++++++++++++--- hw/intc/arm_gicv3_common.c | 3 +++ include/system/hvf.h | 3 +++ system/vl.c | 2 ++ 6 files changed, 78 insertions(+), 4 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 033c677b6f..929f53fd37 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -10,6 +10,8 @@ =20 #include "qemu/osdep.h" #include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-visit-common.h" #include "accel/accel-ops.h" #include "exec/cpu-common.h" #include "system/address-spaces.h" @@ -22,6 +24,7 @@ #include "trace.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; =20 const char *hvf_return_string(hv_return_t ret) { @@ -217,6 +220,43 @@ static int hvf_gdbstub_sstep_flags(AccelState *as) return SSTEP_ENABLE | SSTEP_NOIRQ; } =20 +static void hvf_set_kernel_irqchip(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + OnOffSplit mode; + if (!visit_type_OnOffSplit(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_SPLIT_ON: +#ifdef HOST_X86_64 + /* macOS 12 onwards exposes an HVF virtual APIC. */ + error_setg(errp, "HVF: kernel irqchip is not currently implemented= for x86."); + break; +#else + hvf_kernel_irqchip =3D true; + break; +#endif + + case ON_OFF_SPLIT_OFF: + hvf_kernel_irqchip =3D false; + break; + + case ON_OFF_SPLIT_SPLIT: + error_setg(errp, "HVF: split irqchip is not supported on HVF."); + break; + + default: + /* + * The value was checked in visit_type_OnOffSplit() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + static void hvf_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); @@ -224,6 +264,16 @@ static void hvf_accel_class_init(ObjectClass *oc, cons= t void *data) ac->init_machine =3D hvf_accel_init; ac->allowed =3D &hvf_allowed; ac->gdbstub_supported_sstep_flags =3D hvf_gdbstub_sstep_flags; +#ifdef HOST_X86_64 + hvf_kernel_irqchip =3D false; +#else + hvf_kernel_irqchip =3D true; +#endif + object_class_property_add(oc, "kernel-irqchip", "on|off|split", + NULL, hvf_set_kernel_irqchip, + NULL, NULL); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure HVF irqchip"); } =20 static const TypeInfo hvf_accel_type =3D { diff --git a/accel/stubs/hvf-stub.c b/accel/stubs/hvf-stub.c index 42eadc5ca9..6bd08759ba 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -10,3 +10,4 @@ #include "system/hvf.h" =20 bool hvf_allowed; +bool hvf_kernel_irqchip; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 7456614d05..7a6fad1094 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -837,7 +837,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) * interrupts; there are always 32 of the former (mandated by GIC spec= ). */ qdev_prop_set_uint32(vms->gic, "num-irq", NUM_IRQS + 32); - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-security-extensions", vms->secure= ); } =20 @@ -860,7 +860,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) qdev_prop_set_array(vms->gic, "redist-region-count", redist_region_count); =20 - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && + !(hvf_enabled() && hvf_irqchip_in_kernel())) { if (vms->tcg_its) { object_property_set_link(OBJECT(vms->gic), "sysmem", OBJECT(mem), &error_fatal); @@ -871,7 +872,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) ARCH_GIC_MAINT_IRQ); } } else { - if (!kvm_irqchip_in_kernel()) { + if (!kvm_irqchip_in_kernel() && !hvf_irqchip_in_kernel()) { qdev_prop_set_bit(vms->gic, "has-virtualization-extensions", vms->virt); } @@ -2118,7 +2119,15 @@ static void finalize_gic_version(VirtMachineState *v= ms) accel_name =3D "KVM with kernel-irqchip=3Doff"; } else if (whpx_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; - } else if (tcg_enabled() || hvf_enabled() || qtest_enabled()) { + } else if (hvf_enabled()) { + if (!hvf_irqchip_in_kernel()) { + gics_supported |=3D VIRT_GIC_VERSION_2_MASK; + } + /* Hypervisor.framework doesn't expose EL2<->1 transition notifier= s */ + if (!(!hvf_irqchip_in_kernel() && vms->virt)) { + gics_supported |=3D VIRT_GIC_VERSION_3_MASK; + } + } else if (tcg_enabled() || qtest_enabled()) { gics_supported |=3D VIRT_GIC_VERSION_2_MASK; if (module_object_class_by_name("arm-gicv3")) { gics_supported |=3D VIRT_GIC_VERSION_3_MASK; @@ -2160,6 +2169,8 @@ static void finalize_msi_controller(VirtMachineState = *vms) vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else if (whpx_enabled()) { vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; } else { vms->msi_controller =3D VIRT_MSI_CTRL_ITS; } @@ -2179,6 +2190,10 @@ static void finalize_msi_controller(VirtMachineState= *vms) error_report("ITS not supported on WHPX."); exit(1); } + if (hvf_enabled() && hvf_irqchip_in_kernel()) { + error_report("ITS not supported on HVF when using the hardware= vGIC."); + exit(1); + } } =20 assert(vms->msi_controller !=3D VIRT_MSI_CTRL_AUTO); diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 9c3fb2f4bf..f7ba74e6d5 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -33,6 +33,7 @@ #include "hw/arm/linux-boot-if.h" #include "system/kvm.h" #include "system/whpx.h" +#include "system/hvf.h" =20 =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) @@ -659,6 +660,8 @@ const char *gicv3_class_name(void) return "kvm-arm-gicv3"; } else if (whpx_enabled()) { return TYPE_WHPX_GICV3; + } else if (hvf_enabled() && hvf_irqchip_in_kernel()) { + return TYPE_HVF_GICV3; } else { if (kvm_enabled()) { error_report("Userspace GICv3 is not supported with KVM"); diff --git a/include/system/hvf.h b/include/system/hvf.h index d3dcf088b3..dc8da85979 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -26,8 +26,11 @@ #ifdef CONFIG_HVF_IS_POSSIBLE extern bool hvf_allowed; #define hvf_enabled() (hvf_allowed) +extern bool hvf_kernel_irqchip; +#define hvf_irqchip_in_kernel() (hvf_kernel_irqchip) #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 +#define hvf_irqchip_in_kernel() 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") diff --git a/system/vl.c b/system/vl.c index 3e341142a0..7a3db97ee6 100644 --- a/system/vl.c +++ b/system/vl.c @@ -1778,6 +1778,8 @@ static void qemu_apply_legacy_machine_options(QDict *= qdict) false); object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqch= ip", value, false); + object_register_sugar_prop(ACCEL_CLASS_NAME("hvf"), "kernel-irqchi= p", value, + false); qdict_del(qdict, "kernel-irqchip"); } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784191; cv=none; d=zohomail.com; s=zohoarc; b=nlDlgd09zViyIwBTmPb5OBr9PdrvdeLfkLx4tRs/mzgWRbUQmvyiYyNAC5PKWD0lLoe+Pk7afiJ9uPzYkcRilk+Wz09aAGoOcSSLM9pR4JThgtSczn65Pko7Plik4rGDN56D2bPMwyph+PSc980MaDGGHLvduE0E3N3dpdsg/tU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784191; h=Content-Type: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=o4Lxm1TA6Kcx7liGCFRS9hTpKNWDkwXTIIQbMAQVIyk=; b=Qmu4hUXyp6hLxEsIlQoKSnGF6IJJITAXNWRsvALVDjtuVYKVn0oDHvkuUxsczLO3uRYfSvqyNXKe0Uk17oMJ0sKXEKlpp9T7dVMrTJ/GXZUS+JAvYSUvhQxJaNFwmvafUxzIh11l2NvL0Koz/nEJ89oXnDfwNo8LK32KFygaRnk= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784191490990.9270448425068; Fri, 6 Mar 2026 00:03:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4o-0007Vu-JA; Fri, 06 Mar 2026 02:58:26 -0500 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 1vyQ4n-0007V1-4B for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:25 -0500 Received: from p-west2-cluster1-host5-snip4-10.eps.apple.com ([57.103.68.53] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4l-00066v-PR for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:24 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id D4F0C180024B; Fri, 6 Mar 2026 07:58:20 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 0B9E0180019D; Fri, 6 Mar 2026 07:58:17 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783902; x=1775375902; bh=o4Lxm1TA6Kcx7liGCFRS9hTpKNWDkwXTIIQbMAQVIyk=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=bmoa9uHRBTGUrp6Y0WWINJxbe35VLA5zJBxCJnm+F1Elx7ljbJeQL5My/d54cmd07YYzzdnRorv8tW/c7lEg45tM0lIXLAEsl0FjmtEaLe9X56aIwO4f68E5yk/kLBoCyRDWVXjwdW9ZkRk5JbcGzAqNmi5+NrODYhNCKpnuoXb3gDFVtZ+lP79y6mT7Qt5QmpnJ98c2aPLB9cIC1jpzi/nHjnUyM73CJhpI9RDvzEPsLmBFh7kzXekKqEMutFhWqIP1aC73OpTVVgGw7m6V9m+VOQc0UdLAinL2QxV3cRkSAQLI+qrO2pDrAnsQ7/NoUcEiDxx9oHCzLK/fbw23Fg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 07/17] target/arm: hvf: instantiate GIC early Date: Fri, 6 Mar 2026 08:57:46 +0100 Message-ID: <20260306075756.88922-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: CgDkqctUPa12qg15WxE9x-dcavLBIgyV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfXwIpo/OGmaAxM 3wMOp7SLoY72QRXRi8O5twpNqGtXyd66v1rrYV+zvpkMxtah3Y53nDDdsqXnpeRC3jU1V72ikx9 zBRBecEPswkZMYrXTTCj0mr/jmGs4tgz+MUMVd/9fdPkm0yeroozqyBin4ncc8fYhB2bFk6zwtq jcH1+p8jes9mTgvFEnYrj/t6oiu77CNP5n1a9ZTLA1+v9E4HMkCxKebxKRGLNBAUOTWnQIUDuOU MKkFSeTHKNE3xvyKQ0SIHlxfq23mZIr2Ho079ew7YzteHaUpmbEnMh53iX/IuAyKkcn198QksQo GFBIF7pl1/AmAoG3OOanC39BPvDlaOLEsgipixz6hZYvuZyNvGzbfC2gzDXCcQ= X-Authority-Info-Out: v=2.4 cv=HPPO14tv c=1 sm=1 tr=0 ts=69aa891e cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=iW0rYzIOeSeTUJq9hTUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: CgDkqctUPa12qg15WxE9x-dcavLBIgyV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 lowpriorityscore=0 clxscore=1030 mlxscore=0 spamscore=0 suspectscore=0 adultscore=0 mlxlogscore=731 bulkscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABM00CIXuMFIUULxeDTN2HK5AcfUeY+OSiB6uGACgTi1vchp7QlKZGM+/YFGEZBWvUFBrhwNSmVcxT216ZuJpV7tQFDvt8u0rCgtJFkWno9z9yFEHLMmCyyGSdMSdOkjyvRMY1QHhSbuatV8zzfptIrzojqGsjZ1a905LYXofOBqyIoCIuDaG7oJALQqzqUctFgsq/YjNC0ysItWnkQTUKO5aIBXGH4zrp5lxYznzgU6JOJULz4Tk2v4jFiB0iJveL6HrnbDK6ZY/9zNQXragqGf7EC7U4fKIACf/QqL4umJt/9yvySHdQ1xcPRfFiew9Dt8vftixyCNSYjvyPmF/JaXb4TbPc0Kmkomlv7Z97zS1C92loZKe+cQ+tDG26aZGVXYCzKqRIQASN8GYdNWQocmKyz38Md+mmBOcaCKaoW5uNrt/2i46MNXrcxrMlzVFjo151+5LIG1tCbk3r4mcd3GkxHqmmHsWnI0liBZEle5EwX//9yC//K+c/u7BHliFAfUNidHFSE7adDnRGHcGWswrb8H/5+GhhyaJgU9eS02yIimBg/rJgS1ctBw9jTQve+FaPOAW9mWfT/hZp7Nk8eo46NqpUMTarGPlw9xrFC1DTgJpY3rwcyzuvWSnTwiaSdfeG+hMtFOwJ88Lp0dEfl2TdgX98Z9EWcIjle74QhikrTlmZKPB252t8cjqt5f+IJGw6+7pWGOD1Jok8YmJuGEe5GRh9uhbz3rbNBSNzDQwS3g== 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=57.103.68.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784191746158500 While figuring out a better spot for it, put it in hv_arch_vm_create(). After hv_vcpu_create is documented as too late, and deferring vCPU initialization isn't enough either. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index c9787b3ea1..c37493b92a 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1212,6 +1212,22 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) chosen_ipa_bit_size =3D pa_range; =20 ret =3D hv_vm_create(config); + if (hvf_irqchip_in_kernel()) { + /* + * Instantiate GIC. + * This must be done prior to the creation of any vCPU + * but past hv_vm_create() + */ + hv_gic_config_t cfg =3D hv_gic_config_create(); + hv_gic_config_set_distributor_base(cfg, 0x08000000); + hv_gic_config_set_redistributor_base(cfg, 0x080A0000); + hv_return_t err =3D hv_gic_create(cfg); + if (err !=3D HV_SUCCESS) { + error_report("error creating platform VGIC"); + goto cleanup; + } + os_release(cfg); + } =20 cleanup: os_release(config); --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783997; cv=none; d=zohomail.com; s=zohoarc; b=VVqGvj6bdtBSqXqgatXHcMXl7nWlzq/doB0M3eGG/6yWFHoUVfJmJ3OR2fjX8YanStp+5Tk4NBk53z93fs5SkmQh4UVhqT2MbAM4irjv23D/5PKvBDS44Rd7rjHgrgW7sIYDqmmWlgnORmkcYvxFSfy9IdQxEhFlKrYFgF2w/+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783997; h=Content-Type: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=8XH+Hhnj5QM/AUysPNVtOAslN9RQQb3vjnIJaHs60Yw=; b=XYsq0nMceQPsNO17t3vfB7mLdXF6h8G99I8EujJRBWs579JOIANLXEmp7Tw7elBJ78qUZQfrcno+5tYDeT9K4Uqqx/4OleI0LF6GlTGO/5hTEN0n4AV1gs0fJdxlbnz7wOziHf4yxepdIu9yYn2PVjZEQydAfsgtic3Mc0M9mIs= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783997553553.1405334638181; Thu, 5 Mar 2026 23:59:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4r-0007WR-FV; Fri, 06 Mar 2026 02:58:29 -0500 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 1vyQ4q-0007W9-05 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:28 -0500 Received: from p-west2-cluster1-host11-snip4-10.eps.apple.com ([57.103.68.33] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4o-00067i-9f for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:27 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 7B7751800249; Fri, 6 Mar 2026 07:58:23 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id AD170180010C; Fri, 6 Mar 2026 07:58:20 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783905; x=1775375905; bh=8XH+Hhnj5QM/AUysPNVtOAslN9RQQb3vjnIJaHs60Yw=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=anhmAZX+Ddz0BkornuZpjGtrtxsV92PjdNo54nHNcBqwx0xYz0bRtSPh9qjQYmK4vnAVipSkpXJxeOz+tdrTKc3IQfBdHkcBWu+uCbRAX+9yfaJAS7zYh3VsnzGDe0aDy9nAcu2nVy1w4P4aWaEuhewVdSTiPVte+iPhc4TSk308JusqTFPeqpl2u6qVmuRdefzXsYLgzJoWyW6zVckNukoU3Rk5fLMoaTiMiKDBTxm3wZEwVYgxO97xrRXNY7SA/ZtFepHM3juoEiTVG/Ou8TdPUCloBaInjMrUnK2LtZqSXvrSGi2il3uYYJrZkgbErUK+H62ibOTSGjmmekzWEA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 08/17] hw/arm, target/arm: nested virtualisation on HVF Date: Fri, 6 Mar 2026 08:57:47 +0100 Message-ID: <20260306075756.88922-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=KJ5XzVFo c=1 sm=1 tr=0 ts=69aa8920 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=0QeE6rx795gg9bSW8oEA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: lCAPGNXyYUlwoW0j0yxzEezJOu2onX05 X-Proofpoint-ORIG-GUID: lCAPGNXyYUlwoW0j0yxzEezJOu2onX05 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX842Kyn26Z8bh I6dZUZMnOyFcLuoM/MwCv8p4HiwS48Aloz86UMX1gPCP039GQS6k7WVzfnpSrEs2KqulFHXgRIP gr0gk5wwtEuR0zTMGjRV0Gns/2+QefS87HtGG3e9TTuuU7TKcYAjnVtCEkYp1+DyMJw2LmP28OR qaf/5WzxNfd7C5JJGf9BRfk2eDlfv0eBTvd/IsjNggoYXlwzYJAznw7CwJpzQ8l2nJ6TFsAHvSx VPTlv3bkoPBDQgOtVDB7OiOGRPJ2Tc0nK9NYOo6KfiAl+znWhX4YWF1m/OapT/acT3lgCK6qe8i 0csp1I2oIevNj599hQJhY9jsSZ461ad2qq8dbvjjGmg4PYx2dAEQlotYX62ubQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 clxscore=1030 mlxscore=0 suspectscore=0 lowpriorityscore=0 adultscore=0 mlxlogscore=869 spamscore=0 phishscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABrFTTu0QX1tavo6wfZtcI8AfNFwK5cgqQt7UIYWgeqKKT7qhgb7NR/LVZolTGuZMQNOVgtKGOOrgF7d/ijaYuX9vitzTqVuCmCNMCNW1sDM9INmURKibyxz0HsMBMU8yb1/exm6joycVo26eXwA4Sddsr4lHOtibRnBfRxo/Plu93RwqbviHvLY2Z01I512XKRxL8fmtMCvLRoQECu5BLl/VXlrUr5ohUAcdmZWcgqzjaN6auyDQHrFrFTkuYcX2EOMbHZdNLkUknQ+/XPMfISs56jM93Xitine+qXHCBm5KIZPJIIi4z01ukNZ9uLs0v/FNCcl+81kq5QSTslq2NDjHuDVc93rdmxulFb0SFdpNU5kJx0COuLG7HzB3jmY+ObrluyCtXnDiU1XvFZxaD/O7PtEUeiCwZhPhxQ90g7tIXVrtLrWpIkWdoiKINCrBny9TM2//KVofaoydzlDDsI9FfgeOlypDT6wPu0Bvo+TeGo2Hge04qEVLc6TwtzgvBP+t4nJp8vTWVdAjJSqH0qTxdXpv8j0BdaPhUnxxG7k1SZO+BfCW9uv7vTNhwg+3H1u6+LADUzOfidJbC3J4SDYzEePyHGI4652JH9h3nR89JxO91jrVv8nrYe3QkU3dTEtPo6jpLVJIqamHKugj83AXCbqRK/NTf5jNJ6M1zBfcUUP2rDZ5Fq5lvPNGTdKgvntXeztPLrHkGncP3K9WuRKsuVtxU1KfLEMtaBPqsouHpuqc= 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=57.103.68.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784000064154100 Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- accel/hvf/hvf-all.c | 1 + accel/stubs/hvf-stub.c | 1 + hw/arm/virt.c | 5 +++++ include/system/hvf.h | 5 +++++ target/arm/hvf/hvf.c | 36 ++++++++++++++++++++++++++++++++++-- 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 929f53fd37..88f6d5accb 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -25,6 +25,7 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_nested_virt; =20 const char *hvf_return_string(hv_return_t ret) { diff --git a/accel/stubs/hvf-stub.c b/accel/stubs/hvf-stub.c index 6bd08759ba..cec1cbb056 100644 --- a/accel/stubs/hvf-stub.c +++ b/accel/stubs/hvf-stub.c @@ -11,3 +11,4 @@ =20 bool hvf_allowed; bool hvf_kernel_irqchip; +bool hvf_nested_virt; diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 7a6fad1094..90769936d0 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2661,6 +2661,11 @@ static void virt_set_virt(Object *obj, bool value, E= rror **errp) VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 vms->virt =3D value; + /* + * At this point, HVF is not initialised yet. + * However, it needs to know if nested virt is enabled at init time. + */ + hvf_nested_virt_enable(value); } =20 static bool virt_get_highmem(Object *obj, Error **errp) diff --git a/include/system/hvf.h b/include/system/hvf.h index dc8da85979..0f0632f7ae 100644 --- a/include/system/hvf.h +++ b/include/system/hvf.h @@ -28,9 +28,14 @@ extern bool hvf_allowed; #define hvf_enabled() (hvf_allowed) extern bool hvf_kernel_irqchip; #define hvf_irqchip_in_kernel() (hvf_kernel_irqchip) +extern bool hvf_nested_virt; +#define hvf_nested_virt_enabled() (hvf_nested_virt) +#define hvf_nested_virt_enable(enable) hvf_nested_virt =3D enable #else /* !CONFIG_HVF_IS_POSSIBLE */ #define hvf_enabled() 0 #define hvf_irqchip_in_kernel() 0 +#define hvf_nested_virt_enabled() 0 +#define hvf_nested_virt_enable(enable) 0 #endif /* !CONFIG_HVF_IS_POSSIBLE */ =20 #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index c37493b92a..c90124338f 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -27,6 +27,7 @@ #include "system/memory.h" #include "hw/core/boards.h" #include "hw/core/irq.h" +#include "hw/arm/virt.h" #include "qemu/main-loop.h" #include "system/cpus.h" #include "arm-powerctl.h" @@ -1103,6 +1104,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) (1ULL << ARM_FEATURE_PMU) | (1ULL << ARM_FEATURE_GENERIC_TIMER); =20 + if (hvf_nested_virt_enabled()) { + ahcf->features |=3D 1ULL << ARM_FEATURE_EL2; + } + for (i =3D 0; i < ARRAY_SIZE(regs); i++) { r |=3D hv_vcpu_config_get_feature_reg(config, regs[i].reg, &host_isar.idregs[regs[i].inde= x]); @@ -1200,6 +1205,15 @@ void hvf_arch_vcpu_destroy(CPUState *cpu) assert_hvf_ok(ret); } =20 +static bool hvf_arm_el2_supported(void) +{ + bool is_nested_virt_supported; + hv_return_t ret =3D hv_vm_config_get_el2_supported(&is_nested_virt_sup= ported); + assert_hvf_ok(ret); + return is_nested_virt_supported; +} + + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { hv_return_t ret; @@ -1211,6 +1225,18 @@ hv_return_t hvf_arch_vm_create(MachineState *ms, uin= t32_t pa_range) } chosen_ipa_bit_size =3D pa_range; =20 + if (hvf_nested_virt_enabled()) { + if (!hvf_arm_el2_supported()) { + error_report("Nested virtualization not supported on this syst= em."); + goto cleanup; + } + ret =3D hv_vm_config_set_el2_enabled(config, true); + if (ret !=3D HV_SUCCESS) { + error_report("Failed to enable nested virtualization."); + goto cleanup; + } + } + ret =3D hv_vm_create(config); if (hvf_irqchip_in_kernel()) { /* @@ -1392,6 +1418,13 @@ static void hvf_psci_cpu_off(ARMCPU *arm_cpu) assert(ret =3D=3D QEMU_ARM_POWERCTL_RET_SUCCESS); } =20 +static int hvf_psci_get_target_el(void) +{ + if (hvf_nested_virt_enabled()) { + return 2; + } + return 1; +} /* * Handle a PSCI call. * @@ -1413,7 +1446,6 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) CPUState *target_cpu_state; ARMCPU *target_cpu; target_ulong entry; - int target_el =3D 1; int32_t ret =3D 0; =20 trace_arm_psci_call(param[0], param[1], param[2], param[3], @@ -1467,7 +1499,7 @@ static bool hvf_handle_psci_call(CPUState *cpu, int *= excp_ret) entry =3D param[2]; context_id =3D param[3]; ret =3D arm_set_cpu_on(mpidr, entry, context_id, - target_el, target_aarch64); + hvf_psci_get_target_el(), target_aarch64); break; case QEMU_PSCI_0_1_FN_CPU_OFF: case QEMU_PSCI_0_2_FN_CPU_OFF: --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784061; cv=none; d=zohomail.com; s=zohoarc; b=Dd74WqJTvsXtOYHEhJ/A1aJv2ePllGexyKTLxlUz/RbCtCxUxiW1sxvmdZY+Cd456If09s9qSH6zxhFzQZRNiJfvW63DyxtCl350AAl3QsPLGGSKk2OWXsYsXxDI81uKQHXeEPsbcf/+Zu428AsX4NrjWZvhWsX2BOZf6bBHnoI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784061; h=Content-Type: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=piYFY6zwrd04Sa9xxLjLf/dk2zFIxF6bTXzzDY0hs/Q=; b=KUXLQlbAJJFs8apVxlroXTeftFGEI8BOmQiOeR1Zi1RkdnhZ6tZnH2+8Y+Dqm+s58cEkPoF0TsiPihu/8kI9G67OL3bKOzGuPhcgu0MeM9lfn9nDnYlpOFnbZa3w0yYpAAVxICX9o+S+Uj4DyIfdPa6oiqsnLn0cZdk7dwVEBdw= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784060732515.4506048902025; Fri, 6 Mar 2026 00:01:00 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4t-0007XN-93; Fri, 06 Mar 2026 02:58:31 -0500 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 1vyQ4s-0007X6-G2 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:30 -0500 Received: from p-west2-cluster1-host4-snip4-7.eps.apple.com ([57.103.68.80] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4r-00068K-01 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:30 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 07B4218001B0; Fri, 6 Mar 2026 07:58:25 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 30993180010E; Fri, 6 Mar 2026 07:58:23 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783908; x=1775375908; bh=piYFY6zwrd04Sa9xxLjLf/dk2zFIxF6bTXzzDY0hs/Q=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=OxWPslXhlelIOhMpiB1djCIFc+yktjCFcKQnBBYcCzlegJLkfi63j1VktLgEvBlecsMOc2tl9wEmK8b6a87c00+UHryL1/+Yy1HZXG7DUH1CVjpAd/1J44/tDER51gi7MRbI0Oq0M3DK+PozV7ZdjaWEPV38hwwPx24VoIbJlJZ6E4tH3fDsRsI3Jzi42DykW6hkrkLu+Fy6QxKACPJYfOZGIvsj4lPT5fmSNE5Qpr/nmwVnfgzbEaywbRHCyLoB7tMAVeAzbonbjK6OG0e+6udURn8eXlx8G9bFgrEQY+WqNE8SY9Y58RwuKohCvgNOpJadYwfNwDHZh9BbX/cDkA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 09/17] hvf: only call hvf_sync_vtimer() when running without the platform vGIC Date: Fri, 6 Mar 2026 08:57:48 +0100 Message-ID: <20260306075756.88922-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: G5016BvUvyBoON6hkDmcxhor1BJEKsFN X-Authority-Info-Out: v=2.4 cv=PZzyRyhd c=1 sm=1 tr=0 ts=69aa8923 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=PzQS8Z__MZ2uSZov3vkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: G5016BvUvyBoON6hkDmcxhor1BJEKsFN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfXx3c2XAwEViBf KH+shMLwslYqHF1tZ/8WIxdcu+HgsGQ0A8vmPh8J5e9pvujB/E8kgPxFc0Ccp8naLUrFixMhQqn cpyId+IwiaLYvEYc9qZLE57GGlkER6u6/ys/o/I4jdgnrqOHm8SnfzS48NB1TnY8DcAFhaihKOY +iu9k6dMKAKjuWSjt8I620+nxbRwsNiGEujFO7CdLplaANdUNMQejtWC5dWJyQUEtFDk8v6fqAN iHqTly/Bu2UenHv5gbO/Lhl3km7c7mtdJcH/kUP3cENpJAH0caN71fPF4daK2gveFc7Zg8SXjDS fQkPS2A7C0RHXeNbDivi8dniELbbsyVTkRZ7ySDg6NvG6GIzqldg0XmqB25Ylk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=910 phishscore=0 suspectscore=0 spamscore=0 clxscore=1030 malwarescore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABNZaAuHdPsO36rx08mQSsWrZICTEESUzjZTc3XLVsAdnLNuXTF8BazbYOatDK5nfV5l8gtd23FWVaXfXv9QcrWoqy9hxzOzT0B3hgKRzrkgKn56b+GygY/JAq4n+ODn6gisX7jD1qUwKuPs2NmUGG/3hFHAl7Il4Zbn1uP5HSgEyTCY9rQbtHLH2liGn/rvSADKtNBhmSroeX3dPZ9bbgQsRCu0yzPuNf+pDuEwtce0iiTTGxQ8Sqlja7c688FOkw2W9rpKGnsTKP2EvvsmNsVlyZ/PLwkv7kSjajSwljbANlLLAI5KF1+BNSghbGHn6aNExttmpuGXNWxReaasryjk5uG9AmxblbNpOfNB7cJkzh89t+OS9AFLalGdVUR2jYXxVqBucYuy3sndSMN9fQDcXKHP9shcEJg2gbzp3QFuvRiN8NAU84N+wVfGI5NX/ele5VCCqVbRqgPf43We9IzUBhvvpzpCGobhjUvZraQZvTHISYNX7WKczrUX07E8UAWaQJZBZTjhvCBZDtagQF0y1UFRv26RxljegiJ74KACPvr3/MFEFtxuq08O7ojsdpwL37GuVjrrmO0+8N7juy/vbCmwQS2Hd6WMHBIfnzQIr0Ah0SA7VfWSVCPBWUv0mFReSAuzZUQdRPnEeeAYHNtTl6buIsgkKNRtj/C6mmEFA2OaBPU5jLes7I+uXTrK4nw6ywl3FhxgDUy1SxksWgIVn7ZfCRqrp+FowCI512qNz5ia6j3gU5mZk= 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=57.103.68.80; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784063521158500 When running with the Apple vGIC, the EL1 vtimer is handled by the platform. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index c90124338f..047b3601c9 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -2334,7 +2334,9 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) =20 switch (exit->reason) { case HV_EXIT_REASON_EXCEPTION: - hvf_sync_vtimer(cpu); + if (!hvf_irqchip_in_kernel()) { + hvf_sync_vtimer(cpu); + } ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783998; cv=none; d=zohomail.com; s=zohoarc; b=ClBKZAm7n5sBmPA7bLGC+irNKs/PdR6vgoinNn0u5vucxGVqP8Tx2PQ/om0xueHX1Hxu+OwUBOaJ1f+3gWOABeLFUyxhwfrufSaYzcy25m62uiPp0bzEGdCta7uekTqEi2nq4rCWSG9Kj22iCVl9o1uNSHizaqF3Qozm5sKNR8g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783998; h=Content-Type: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=qAVaZtJuZJH9uX/VVXHmkmsjUQo1XpfNBC4AOqSB4uA=; b=BLlCYxzqOm3cZB8duURPiboyTLReiFbnvljvvyJWnnwyCVSrQs8vehC2r0tfytwgbPR8gOK5H5/BuvNlfwK4KAQp+Ohslm8lnWp4i0GLH8Joo2E9WUDcipVn5LRtqR5VR7TMVwhy9z0sPX328xDec4CjRq4LVJq0ldI/xJTx930= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783998314215.95945027012783; Thu, 5 Mar 2026 23:59:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4v-0007Ym-Pl; Fri, 06 Mar 2026 02:58:33 -0500 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 1vyQ4t-0007XO-Ly for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:31 -0500 Received: from p-west2-cluster1-host5-snip4-10.eps.apple.com ([57.103.68.53] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4s-00068g-3m for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:31 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 0873E1800193; Fri, 6 Mar 2026 07:58:27 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id A9D3718001A8; Fri, 6 Mar 2026 07:58:25 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783909; x=1775375909; bh=qAVaZtJuZJH9uX/VVXHmkmsjUQo1XpfNBC4AOqSB4uA=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=gWIl8l17mVEh+GMhITYujqbSVvTUl1DMrB4z9TQ7n/m5kELFsjP6f0D+slcxciMSp0qAb930s5Kzwxp+VtEx8Z/Cl8FfoXeD0/iXph8qG2bK20HCBoFJrSktcRuzvqCWjxbM/RT/0pbUD5X1w19zD3wdwDJnaHkHglrKMy5SzMnkAyi7CkZZXQIq1Vib6dJNUrzgl0Ml7w8HzTnm1nIoSVF3HdVE4igBRW3p23+0XYebPljgcd38gbRLRd40GDGiDtwYDCmGAhZOgOzSkdw6zfkpNxW3M0mMEK7MnA6wUqqbZ3ykxOXlFMYlOfhGvNA9KrPXKwjk5Xs6aETcEGE1Vw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 10/17] hvf: gate ARM_FEATURE_PMU register emulation behind not being at EL2 Date: Fri, 6 Mar 2026 08:57:49 +0100 Message-ID: <20260306075756.88922-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: gUReKH9zc4B5gnQYvDMEhqmCePIJ3n9s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX91DdaBLkDZEZ gOO+s3VK18hzls8jBPZO3ZiGpkniFsGwOt/LZrKDMWXZWuRga2EcnzVXVm2JZ4x7DLw7dZ7ak6D 7c5I6oYtJKOFEcAkDK9UyANLO1AIBUlafMF0BOpfExyBOrKENC+YTw55jspOYU732UpVD9JjqZC e+MzTmpaw2AIvsegwb1PBw+38k9oIBaVcy/eIUMRreAekD1rd2mgv0Gq9RAiEd3JBbVC+m3UzqV zGmHT1izs0Cwf40dWfU9l4Ex0I5oQu4F502Q/M0h0UJxJsNPCanGWIu9HUGGPSHdDeXWUYxtxTZ fYgXYmDLArk+P1DmI1Vfhe225qCOcs+rw+hYTPRcxArhs0BLkaTntk6bfkAXCA= X-Authority-Info-Out: v=2.4 cv=SuGdKfO0 c=1 sm=1 tr=0 ts=69aa8924 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=lOv7bB1OiAV5i3s2B4UA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: gUReKH9zc4B5gnQYvDMEhqmCePIJ3n9s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 mlxlogscore=762 phishscore=0 malwarescore=0 adultscore=0 lowpriorityscore=0 mlxscore=0 clxscore=1030 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABNbZMC1utbIE4S1MXxaNer6tqTH+CNL4PCIZqPQipJ3tkZKIy6ev8IdFwvkm8yiCuOjgEQIZdnZQCigmbg5zSj8nNXZ7zwy79QMFuDMnsg2EC5KX12mLCE4BwneM6XJDWS5okpo3DvyrQUdMqc1GyTB5jCl1iDKYIeXWUrvxD3CNBHcGWOXQwYwcmly0A4wHMpgI84N5vx7n/Lm3OPpV0yF1CqGPW93E+UZcYR686eIr0sf/Ye7C+/D3hK8umxIEK1j3xEUblNzWcZu5y/wp9uFUjPcbPErE9OQLqfptEvOpPxujBE0BpoHrmkD6g9EIrDyRRAYfIHiGzpGrhrVMvPlaqvoi03zSjCVtfqtfVspCHcOSX8fz1gNdkLtS/l08s5KsCEmE8Juafk9gCraVztVCTNCFK0oWL+y0Bmr4OAs4uEvEkO8/TABvnG/2jdvhrIcdQmGWv7NgRldlKZViARooexxukJxfi9xO18hj0AGwGA44VFN0NwjHT4+RSftz8+4WD9Y2MNyTI7RNzry6bs7AC85S5dP79kSGTDDAm/Ge+1cTmyPVu34JoMcIP3p78HVDky+5FKoN2LB4xc3QmTrykiBq/Huvr8uawgVQcYi8TcKmNo/s6Xv67pXxhJ/HDmCrkl7NggB/zKsKC19FidkXocyZDQrlxxIaVERAGzOaKJm/8FoYUXAnfFLSoPxz8XBZxXt6bgdkcsjtO4mR4RD+gBAPaWdte1zwNMpza93BruHiq/Koc4R3TpA== 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=57.103.68.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783999394158500 From Apple documentation: > When EL2 is disabled, PMU register accesses trigger "Trapped MSR, MRS, or > System Instruction" exceptions. When this happens, hv_vcpu_run()=E2=80=AF= returns, and the > =E2=80=AFhv_vcpu_exit_t=E2=80=AFobject contains the information about thi= s exception. > When EL2 is enabled, the handling of PMU register accesses is determined = by the PMUVer > field of ID_AA64DFR0_EL1=E2=80=AFregister. > If the PMUVer=E2=80=AFfield value is zero or is invalid, PMU register acc= esses generate "Undefined" > exceptions, which are sent to the guest. > If the PMUVer=E2=80=AFfield value is non-zero and valid, PMU register acc= esses are emulated by the framework. > The ID_AA64DFR0_EL1=E2=80=AFregister can be modified via hv_vcpu_set_sys_= reg=E2=80=AFAPI. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 047b3601c9..da6b548880 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1567,7 +1567,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) ARMCPU *arm_cpu =3D ARM_CPU(cpu); CPUARMState *env =3D &arm_cpu->env; =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCR_EL0: *val =3D env->cp15.c9_pmcr; @@ -1828,7 +1828,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) SYSREG_OP2(reg), val); =20 - if (arm_feature(env, ARM_FEATURE_PMU)) { + if (!hvf_nested_virt_enabled() && arm_feature(env, ARM_FEATURE_PMU)) { switch (reg) { case SYSREG_PMCCNTR_EL0: pmu_op_start(env); --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784075; cv=none; d=zohomail.com; s=zohoarc; b=I8P37mDPIkUP70wleKXjq2xbg8dma+5eFuyBhFPgxlEZoaLJRrbw+kxXDVGSPkLOnykxSNO/ZKEKWdhZ/1P+PgR2lPM/DRhR1utm1u0vJeEGaeRr/6X7hkPFFw0539SX58VwB3CQlCfWjwJS30x+/YmtdSWf+Jfhse1vkPhWRzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784075; h=Content-Type: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=OUuDxgqNdZmzpnnMy18wEMM/IqxNg59OjqOVW0/0Og0=; b=TotSuFI0aC9RLwJeYH8Il+od0/uo2jqrBWUe7rOvxp4U/y/YYRWNHQYt4bjwFHOCI9hB+2WWwjvT2ccSo+NB9cKm7Jfn61ZX/y4uM9xSB8KgXt24HOR+CZEzft7WXgKDmKbhOYDI1w+5F2IKlauyHaJW30n7d9EVhzq8TatIQHI= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177278407532069.43273889459044; Fri, 6 Mar 2026 00:01:15 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ4z-0007Zw-V9; Fri, 06 Mar 2026 02:58:37 -0500 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 1vyQ4x-0007Z3-Um for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:35 -0500 Received: from p-west2-cluster1-host1-snip4-4.eps.apple.com ([57.103.68.7] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4w-0006D1-HN for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:35 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id A90A61800250; Fri, 6 Mar 2026 07:58:30 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 2C217180010E; Fri, 6 Mar 2026 07:58:28 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783913; x=1775375913; bh=OUuDxgqNdZmzpnnMy18wEMM/IqxNg59OjqOVW0/0Og0=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=cqD7RGhyeqxAw1fFJovaqYsjU38DIj1dLuh60IZSiTJ64yMdLJUrBDmkSzl9PbpSwWVnlmg01eRYTaMoI65+8yeL2xi/zbShYHni/4NlVAyKK9PoKqzZRfhEabxGuOciSpK+PojqFWYoCS/QrIW3+dNT8Rem5vZGHV6oznYKp1//ZyaNKAsp2Qm/TMD+5FqP1gEa1TEWHUl2ug51uP6cqsHv5ShzaxIJlQXyjSFrfKqdUT3ECXalwOkpVmTTLwBJgm4ay+gC3MSOZhGplsjaYHbgXrrLEGiV+tOQfDb+e22+kYkpx4sX/4maah6zaRTHDTeSjGdXjoFcGu3QYEoYiA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 11/17] hvf: arm: allow exposing minimal PMU when running with nested virt on Date: Fri, 6 Mar 2026 08:57:50 +0100 Message-ID: <20260306075756.88922-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=NbnrFmD4 c=1 sm=1 tr=0 ts=69aa8927 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=DEZpVyLLCdwXg5o-P5sA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 14hZo5cBuOnrrLc2LQumBOsvlcQCxbC9 X-Proofpoint-ORIG-GUID: 14hZo5cBuOnrrLc2LQumBOsvlcQCxbC9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX7LhXf2ZtL+f8 463POhL/o664ov47//eViN1rGHKfuD2QJFJPq8npJoyzlWiurZHwBcvcu4arqRzuaCwLEnOkIr7 ipXejJyB6GIGfTrYEGUffa3n2H8BFoldpUEiA0Wq0qf1PO37bvJRwLXBRvMrMEEFMj+1AD4qTVV OqWifZjXuLIylj37i624jRWYHAtYmEEHWvTkObzZJhGFrwmN9HfPMptQv5V8+gZeGb/MwCSuPmR IoO5uaApab3Z2sxnCoABpQy7VdoSltsvOkId098VLU/U0//yrS/ZqcvL4SntbZnX/xeWHQsnrwH m2hLMXpnQuVe1alr7MzT0zBU+M86h0q3Dv0J+Zw5Cgprl2/GmXdm+G77gWq5n8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1030 malwarescore=0 mlxlogscore=660 mlxscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABpKEyt0Sm3g7hB6PHYpawexTezi789NCU45nqM2TZ3D4GAg2thIKr14dEOdQmCBIqu0NEzD2odknLE5NIuUotDx7VoL/2QQxVRNj4X8bM/4TaRfbO9PIigI4VCBwnrXFc0jIyss/8rf4MlZrfNrZUFsYH8ggYGHIqqKXmFSk+CbXGV2rg34AA4oCufyHX8RX1vDhIhlKOdo3SWwmTKZGRP7ZDahJmvH+ta3/MRaI6Rhs4ty0rJ/3rd8S++Rh4hCmohi6dFQjY8cAhNE/j2lBoNGd/W1zSMmwNerOkA1FOjes0lGRdqjVt7/OqMFMWgykT6CSzXl0Ko1oK5TiN50mKRcnBxY5zVAx6AjH4TUI14dptLSbvbZ5QAUN5JVkVm5iQXgjnn+Lh2idC9kbk7PZZs1M+K9mGRFYRavPC2PKWvsUiQqgXecBNw4KjCUBLHEY2MrpCyusxGdSko1H3FMsXm7F2SC3N+Hh3750R9fBo2NHW0DI/T0rV7t6RueeD5O8UVv0+3j1KD3E3/39tKTo/++61B2/nJCxC762snKxFDRZGXmsWefV+4brYfeBVAljIOerzRXBAwdKB2qMGhkr1nt5/Okd5EFS6p/7BgmXgi0FqINcDEM35k/NG7clFkl75bYafp4PWlQ0XXwcSFsfUsWX+pCn85paTgNlacCy11PrbMDQ/p7lIy1KwIzOzM1RwlbsRHzItzNqxzUPXQfZQx19gclmC+G1XUgbOQubTHD4D2UJB12uWeSIc55k= 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=57.103.68.7; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784077218158500 When running with nested virt on, a minimum PMU is exposed by Hypervisor.fr= amework if a valid PMUVer register value is set. That PMU isn't exposed otherwise. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index da6b548880..212efab731 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1127,6 +1127,10 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) =20 clamp_id_aa64mmfr0_parange_to_ipa_size(&host_isar); =20 + if (hvf_nested_virt_enabled()) { + FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + } + ahcf->isar =3D host_isar; =20 /* --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:26 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783988; cv=none; d=zohomail.com; s=zohoarc; b=TweX8B27cOn7MaJxc5VdSGORaBlQ6ESBcHl/afjSg1H2TGCwZSzsBkRO5banfYMZAfPRIi1fpjqKWRWbPho99K4WXbwt5U+XuIyrwntBlVHiQur2v8N+VLyQW07pYaxZIp+VbPmdWkJ9DdAAYMuVbORvyl7rm58p2pRojmzLAic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783988; h=Content-Type: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=T09YaB2jPYeKCsoJalctReTDeuCKV9icg1YoMmiUMB4=; b=DOvZZnDvywghHy+6vPRk2S5gus3tkPsPWl0L2GvqyjJNI8/3b2uw/xpsqd/F7F1leKBgZc8/408LdsxzyVDlm6Hs8V3uLCuPzniuvBBDBPbR+ZZ78bfkVKquBUUVjRx04etbc3T5ajTHMbT62jQwmQrHEOSVy9p+IFln3mTn9C4= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17727839878401008.0039598080137; Thu, 5 Mar 2026 23:59:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5O-0007is-4V; Fri, 06 Mar 2026 02:59:03 -0500 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 1vyQ4x-0007Z4-Uy for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:35 -0500 Received: from p-west2-cluster1-host8-snip4-10.eps.apple.com ([57.103.68.103] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4w-0006Ct-FC for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:35 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id B87C618001A8; Fri, 6 Mar 2026 07:58:32 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 76745180019D; Fri, 6 Mar 2026 07:58:30 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783913; x=1775375913; bh=T09YaB2jPYeKCsoJalctReTDeuCKV9icg1YoMmiUMB4=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Gc8DfRPUG5HSfCsYrvHvbu2CyucgwNfGdFxiDh4D9dWKfUCM7RZ60VMXx8oJF6YQnC7nQ+FqFAkBXrZe0ibHGlGFYF1UIyEG99Z34lr3DkVy3v+xiCN/cKZn26dEhqKNAodRB8zOv4cCgQcvnjWa4nEwPI9vfrZY5cEdaAM2cR442HCD7MoiEofRejirMys4tGgVispJXA2uBauX4pG6WHVrRrurGe/Lm3Ya9SyqxO5kdpyb8azmHeUUeEpt4EK9wJ41F8nWK2FCnKEJ0EkptKi4pZJFolSV25xk2y/6lIJR9ImRtF390h5xmFJPZP3/8O1ntBlvs8uGEMQYKXD3tg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 12/17] target/arm: hvf: add asserts for code paths not leveraged when using the vGIC Date: Fri, 6 Mar 2026 08:57:51 +0100 Message-ID: <20260306075756.88922-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX0Jm/VvE4kEic NzuH0ga61xsZ+w+f19dpBLZYPToYUiWxc276W+BaXoMCpG3PSPDloiJUYumOLHUNTaM9k5P2U3T xzbOFrKYx/l1VvVLDPlQJyTXBCnp9OY/LOi9X/sr115k7FW7J4q447ulTUVt55NjHXzgJeGO+Zh Jx5oisNWybqZAaYuGzQv+RJ5TTFVfDo8/RWS0v7PdjS0ZevLKNzKo8qk3TJlYBaN/5s7qg6PNAO rZiFHfTZNS/nlpZE7D+h0Bsnzd/4q4XltWGbsQmSXLqtQMdqQ3HKvlu8goLH3b35TiEN+5Dmbzo HXs4l5rKuwhtVyRrQOtZKw6UwujP+stSWnYniYCxa9swRHf18JEd5Ef+NqaYUA= X-Proofpoint-ORIG-GUID: UAWc0SqfZ2LGkMZd9GkLrhRB2Atoq32X X-Authority-Info-Out: v=2.4 cv=QKtlhwLL c=1 sm=1 tr=0 ts=69aa8928 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=vbFX7M0ab_H1AmF9bzsA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: UAWc0SqfZ2LGkMZd9GkLrhRB2Atoq32X X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 mlxlogscore=563 spamscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 malwarescore=0 mlxscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABbsj9Fi+4zuZg/r9jlEV0CxyUxcj5lCuJdF6ug+8OgYQQAUKu76UTP48cGIu/gO8PgXF5qv6TvY/O9r7bmY9BuLHZPSoM95P/WfxYHu2M7tAeJdLiBmQdlFiC3uvncEHERcnHr9e4dZXy6wETGxgRAyWyJGttIF2JAciE9nrCrjC+RKt8bImU/yl8UqiEeJxvhpEmOVQe2B7jXyhix3RqmG0P1HlqW4bTcBvb4ID3PQ0w+Uy97StrSosoKWDFElxf+3h1oae3kh/XrzWWhmQiW7IU7RbL6L8eOIky70VCI+zibk09y3t6Qd5QLKfQIQi7aVzm0bHl5fW96SHubtyIotipK/1V7TesNpoagths9oog3Is+njWYRYqzbW2wAlZvWr5B5YOwbdR3KpbPA2LkBGVvpaFn6LIAvWD73RMcNLflWMKPDZRbQok8HgUXSkife4x8IYk0ztPqLDMBBrn9xWwwCtZalX0rpmPFdgnMtKH5gZA8sjjx+LA9N1ku/wDs5+6til4630MwY8UKdCZTRsMpWVc4dag4j/x7DsXOVoLvMHkhLndIRDpW2U7Q4sYUzrXriKS0PaivYc/U9ee94ynOuGuOmP5QcXEJf15w3j62oYDzQGMCMxC0JloqD+I6IHOXpW5JK48QScejA8R6eumAVjna4yvbxcew/VDeADXPT0LoccqoRhDwKtBmJK6XPUydbZGNZo+/VIUUQNr4XQpMFs7d60TySZ2hco8itFCwIXr/OMA= 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=57.103.68.103; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783989333158500 When using the vGIC, timers are directly handled by the platform. No vmexits ought to happen in that case. Abort if reaching those code paths. Signed-off-by: Mohamed Mediouni Reviewed-by: Mads Ynddal Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 212efab731..0c96119ab9 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1647,6 +1647,7 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t re= g, uint64_t *val) case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: case SYSREG_ICC_CTLR_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_read_cp(cpu, "GICv3", reg, val)) { return 0; @@ -1937,6 +1938,7 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t r= eg, uint64_t val) case SYSREG_ICC_SGI0R_EL1: case SYSREG_ICC_SGI1R_EL1: case SYSREG_ICC_SRE_EL1: + assert(!hvf_irqchip_in_kernel()); /* Call the TCG sysreg handler. This is only safe for GICv3 regs. = */ if (hvf_sysreg_write_cp(cpu, "GICv3", reg, val)) { return 0; @@ -2344,6 +2346,7 @@ static int hvf_handle_vmexit(CPUState *cpu, hv_vcpu_e= xit_t *exit) ret =3D hvf_handle_exception(cpu, &exit->exception); break; case HV_EXIT_REASON_VTIMER_ACTIVATED: + assert(!hvf_irqchip_in_kernel()); qemu_set_irq(arm_cpu->gt_timer_outputs[GTIMER_VIRT], 1); cpu->accel->vtimer_masked =3D true; break; --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:27 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772783964; cv=none; d=zohomail.com; s=zohoarc; b=Ob01fi7vr1MIN+IurxBlNGvaE64sZ6YThRifUHjpj2DV5uqaefYRuEBETkXwVM4BDWH1vQMXzC9dGeflqj2m8kaZqO5epC+riZTMsCQBE6I44D+Hpj9PwJ2who9czLCepFpJgIg39h6CQEjuAsqfGoj/yG9UNdbesK8NZzrF/do= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772783964; 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=ItmA7iXTDqqGZHO0naG8y+91jnHyKvFRYWfwX5RGdgY=; b=AMrqyR1eShSqqJmINClnsN23Ae4oB1edFyBOlULxrQZgOLwgfOgLR1d5Js+PGI0U8eswXcp98uS3CiNjp6zOTndWz/JNr/UonHdhqfS9mMa/+q05xv78LDjo8cu/c4LdK0g8atrFBIkeufoJMHClANgQonC5xVFo+9eEvMxaoMo= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772783964150918.367490864518; Thu, 5 Mar 2026 23:59:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5X-00080E-MO; Fri, 06 Mar 2026 02:59:15 -0500 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 1vyQ50-0007a4-P4 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:47 -0500 Received: from p-west2-cluster1-host8-snip4-10.eps.apple.com ([57.103.68.103] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ4y-0006EE-Sg for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:38 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 37A3818001A1; Fri, 6 Mar 2026 07:58:35 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id E0FB8180024F; Fri, 6 Mar 2026 07:58:32 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783916; x=1775375916; bh=ItmA7iXTDqqGZHO0naG8y+91jnHyKvFRYWfwX5RGdgY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=B19qg+EggfaQKQYQ+XoLyBPmiCQgUjffmmwTXbw4Cm7FBIGXDt0t6n6hpQ8AyZt2jPQjaDl9CezjfetYIwhP7zppJ78WkDvn7nbyxYD7iu3AOTfxV/FxzKY0c+OMoLKTq/jrTcjmTjTarNtQnSNOqmGXNe7172FpnQbtZ7Udg2chHpEdGsmNWMhg//YuV4BNSGhoVhPoE4DYB8Fa+nJTs8HPgUKsirpAGeqPd0YFvwH9JiUCahxEJWr3t5rMnJv9e9L0khFrZPb8rqohnHoDU1XMTulcf1NQK2MhbW+Cz/CAoeUgAMcavJ36YXTcUHcNMmvwTrunGKOz184OJJNUMQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 13/17] hvf: sync registers used at EL2 Date: Fri, 6 Mar 2026 08:57:52 +0100 Message-ID: <20260306075756.88922-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: vsk5UYo_itMYC7FgpKtnWuW-yRzLveLT X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX8x75PPVJnr9J 0u8eramPDrGURXD+VH9fSBcw+I/nSuxM7XLC8NtHIjc5QKWBiNGL70A4YUlEZCUNbEpmYvq79PD VxEOPByxZ0p/w7LZtR994L2qwSC3dDu8bCsspQpcB7tgKEYRjzs4zlU3wKU24FyHr9WxyYaWLAp tfyG51mDJp9nDN5eWsGLMenQCzaZMqodeVWC+SVC96aU/bpuB9i3K8E/vOOyUCWFha0Gp5gnnvm BpmYBS7aPSmvS/T1Z3mBV7VqMQzT4ZP4OYwRfrt4/09DHuJvGAT/X9G5aSunAP/rWead5YbiYDj tWr148OaAasbR2EDA5uW5EM2ojP5NpVktfe3BCSaS9kRS6vxNIGc4GwgVhmLzU= X-Authority-Info-Out: v=2.4 cv=RYqdyltv c=1 sm=1 tr=0 ts=69aa892b cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=iuyuHyZKG8LmWTHPEAYA:9 X-Proofpoint-ORIG-GUID: vsk5UYo_itMYC7FgpKtnWuW-yRzLveLT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 malwarescore=0 clxscore=1030 phishscore=0 mlxscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABJGaXjYYyrfVXufMSynOeFHSlWdKAeq4fICnJZkS+kd2poqKphQM2Km+Ua1fnTOehkpfRJC3Ob4HveLR4enAGrP27s6go3Al6N5wV1mCs2TYkVVXQA1pUIt3iMLu10e1lRgO1+lhE/DahqiXArxndXxgh8kaV8HKqprc8fmvOrHmXLoZE6YLEcjLfBf/xrLnxQYnrSr8H4N9XbrVwakwvgp/yMy0NtBylZmxHcrSBpDhJcexXrsCnp5oFSHVqVEWfwtYsx38yhEtLoxpv5qp9A68gv79jlTihJdBrmTfq3WLj6nUG134GtReEjV5Qs4wC7HcplV+JrxrMhJUTwafxhJKfJLDA6uRuMJodEOsWj1FmbgeVdzC56voafF5hP7s/9sw7OAXXZJL7eSFAiLlCsvctAG/znGinom6HX6V5+aQgw5fiHDDFRI6wcfG4rzXJBwAganT+JhqAkKB4tNs2p1JW6xGY7mv5uI6rAHYMLPBwn+jukOf+dyDLlMGLOudC9hadr+k0aSisf3eo83Zj5C6+Leb+Pp4CQPCV8tq5Hj8TN/05HSN/bM8jkEEKqSldrXZrqmQQrqqdcbacKPlVx57Ul0jDdagstMAPPBocy5q01SXhxNMOB6FbLVthV+XOmNTepUeNipLUx/0GHSRm+r3k4X6jyrx4Z3FnkUk96BnG63ZTxzJCbFan9Y/vOVE+7kz/UiHhz2e9z9ixnVUFoH+S/fbyko/E/dksC/v1t5pW 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=57.103.68.103; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772783966089154100 Content-Type: text/plain; charset="utf-8" When starting up the VM at EL2, more sysregs are available. Sync the state = of those. In addition, sync the state of the EL1 physical timer when the vGIC is used= , even if running at EL1. However, no OS running at EL1 is expected to use those r= egisters. Signed-off-by: Mohamed Mediouni --- target/arm/hvf/hvf.c | 55 ++++++++++++++++++++++++++++++++----- target/arm/hvf/sysreg.c.inc | 44 +++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 7 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 0c96119ab9..a07702047e 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -473,31 +473,61 @@ static const struct hvf_reg_match hvf_sme2_preg_match= [] =3D { QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); #define DEF_SYSREG_15_02(...) =20 +#define DEF_SYSREG_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + +#define DEF_SYSREG_VGIC_EL2(HVF_ID, ...) \ + QEMU_BUILD_BUG_ON(HVF_ID !=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARG= S__))); + #include "sysreg.c.inc" =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 -#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, #define DEF_SYSREG_15_02(...) +#define DEF_SYSREG_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .el2 =3D= true}, +#define DEF_SYSREG_VGIC(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, .vgic = =3D true}, +#define DEF_SYSREG_VGIC_EL2(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID, tru= e, true}, + +struct hvf_sreg { + hv_sys_reg_t sreg; + bool vgic; + bool el2; +}; =20 -static const hv_sys_reg_t hvf_sreg_list[] =3D { +static struct hvf_sreg hvf_sreg_list[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 #define DEF_SYSREG(...) -#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) HVF_ID, +#define DEF_SYSREG_15_02(HVF_ID, op0, op1, crn, crm, op2) {HVF_ID}, +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 API_AVAILABLE(macos(15.2)) -static const hv_sys_reg_t hvf_sreg_list_sme2[] =3D { +static struct hvf_sreg hvf_sreg_list_sme2[] =3D { #include "sysreg.c.inc" }; =20 #undef DEF_SYSREG #undef DEF_SYSREG_15_02 +#undef DEF_SYSREG_EL2 +#undef DEF_SYSREG_VGIC +#undef DEF_SYSREG_VGIC_EL2 =20 /* * For FEAT_SME2 migration, we need to store PSTATE.{SM,ZA} bits which are @@ -1288,6 +1318,9 @@ int hvf_arch_init_vcpu(CPUState *cpu) #define DEF_SYSREG_15_02(HVF_ID, ...) \ g_assert(HVF_ID =3D=3D KVMID_TO_HVF(KVMID_AA64_SYS_REG64(__VA_ARGS= __))); #define DEF_SYSREG(...) +#define DEF_SYSREG_EL2(...) +#define DEF_SYSREG_VGIC(...) +#define DEF_SYSREG_VGIC_EL2(...) =20 #include "sysreg.c.inc" =20 @@ -1314,12 +1347,20 @@ int hvf_arch_init_vcpu(CPUState *cpu) memset(arm_cpu->cpreg_values, 0, sregs_match_len * sizeof(uint64_t)); =20 /* Populate cp list for all known sysregs */ - for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list[i]; + for (i =3D 0; i < sregs_match_len; i++) { + hv_sys_reg_t hvf_id =3D hvf_sreg_list[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs, ke= y); =20 + if (hvf_sreg_list[i].vgic && !hvf_irqchip_in_kernel()) { + continue; + } + + if (hvf_sreg_list[i].el2 && !hvf_nested_virt_enabled()) { + continue; + } + if (ri) { assert(!(ri->type & ARM_CP_NO_RAW)); arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; @@ -1327,7 +1368,7 @@ int hvf_arch_init_vcpu(CPUState *cpu) } if (__builtin_available(macOS 15.2, *)) { for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i]; + hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i].sreg; uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); uint32_t key =3D kvm_to_cpreg_id(kvm_id); const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs= , key); diff --git a/target/arm/hvf/sysreg.c.inc b/target/arm/hvf/sysreg.c.inc index 7a2f880f78..c11dbf274e 100644 --- a/target/arm/hvf/sysreg.c.inc +++ b/target/arm/hvf/sysreg.c.inc @@ -153,3 +153,47 @@ DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64ZFR0_EL1, 3, 0, 0, = 4, 4) DEF_SYSREG_15_02(HV_SYS_REG_ID_AA64SMFR0_EL1, 3, 0, 0, 4, 5) DEF_SYSREG_15_02(HV_SYS_REG_SMPRI_EL1, 3, 0, 1, 2, 4) DEF_SYSREG_15_02(HV_SYS_REG_SMCR_EL1, 3, 0, 1, 2, 6) +/* + * Block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CTL_EL0, 3, 3, 14, 2, 1) + * DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_CVAL_EL0, 3, 3, 14, 2, 2) + */ +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC(HV_SYS_REG_CNTP_TVAL_EL0, 3, 3, 14, 2, 0) +#endif + +/* + * Also block these because of the same issue as virtual counters in + * that caused the revert in 28b0ed32b32c7e5094cf2f1ec9c0645c65fad2aa + * + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CVAL_EL2, 3, 4, 14, 2, 2) + * DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_CTL_EL2, 3, 4, 14, 2, 1) + */ +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHCTL_EL2, 3, 4, 14, 1, 0) +#ifdef SYNC_NO_RAW_REGS +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTHP_TVAL_EL2, 3, 4, 14, 2, 0) +#endif +DEF_SYSREG_VGIC_EL2(HV_SYS_REG_CNTVOFF_EL2, 3, 4, 14, 0, 3) + +DEF_SYSREG_EL2(HV_SYS_REG_CPTR_EL2, 3, 4, 1, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_ELR_EL2, 3, 4, 4, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_ESR_EL2, 3, 4, 5, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_FAR_EL2, 3, 4, 6, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HCR_EL2, 3, 4, 1, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_HPFAR_EL2, 3, 4, 6, 0, 4) +DEF_SYSREG_EL2(HV_SYS_REG_MAIR_EL2, 3, 4, 10, 2, 0) +DEF_SYSREG_EL2(HV_SYS_REG_MDCR_EL2, 3, 4, 1, 1, 1) +DEF_SYSREG_EL2(HV_SYS_REG_SCTLR_EL2, 3, 4, 1, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SPSR_EL2, 3, 4, 4, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_SP_EL2, 3, 6, 4, 1, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TCR_EL2, 3, 4, 2, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TPIDR_EL2, 3, 4, 13, 0, 2) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR0_EL2, 3, 4, 2, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_TTBR1_EL2, 3, 4, 2, 0, 1) +DEF_SYSREG_EL2(HV_SYS_REG_VBAR_EL2, 3, 4, 12, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VMPIDR_EL2, 3, 4, 0, 0, 5) +DEF_SYSREG_EL2(HV_SYS_REG_VPIDR_EL2, 3, 4, 0, 0, 0) +DEF_SYSREG_EL2(HV_SYS_REG_VTCR_EL2, 3, 4, 2, 1, 2) +DEF_SYSREG_EL2(HV_SYS_REG_VTTBR_EL2, 3, 4, 2, 1, 0) --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:27 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784003; cv=none; d=zohomail.com; s=zohoarc; b=PHHGXUt08l3/HhGZQAtD4wASAuCWa+24CO20qsFtMiWFD5KGvQ+c7l0osHbckpQpoGXO089koEzTnDy364myBPXMXbm2//+JiNRzo8XG/CrZxtWNYlcB5eweiVNCuKYXwNrpYEX3VyQ+OP57ziwvJPE4EX2pv9BcLS0Vc+OCBD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784003; h=Content-Type: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=t4q77Dqvvy3Y0q2FeiECDJSHa9xcTExBPNU7QAvHHos=; b=nXGgbmZfx4CVd5VMn27+BD2SZ2bGbsNWU+2YehHQCMFqt9LaNeFoxMgrr8x7FhtR6hV6van/txl4JXmtZoGaaeZHOZ+An7UqsSjiNhgRDT8546wZ3oIJPfxDnRM0tduyVuJp05Ysr/EGFlqnH09J9pQCDh9B5hr5nix1qkG/yy0= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784003118803.7060420277729; Fri, 6 Mar 2026 00:00:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5h-0008Ix-DT; Fri, 06 Mar 2026 02:59:21 -0500 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 1vyQ52-0007aJ-E8 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:47 -0500 Received: from p-west2-cluster1-host11-snip4-4.eps.apple.com ([57.103.68.27] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ50-0006G2-UE for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:40 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 88B851800255; Fri, 6 Mar 2026 07:58:37 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 5DC7618001BF; Fri, 6 Mar 2026 07:58:35 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783917; x=1775375917; bh=t4q77Dqvvy3Y0q2FeiECDJSHa9xcTExBPNU7QAvHHos=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=S7raPzsyXppVmi/n3Ig5N4GBAvo2QaYEJSK93qx+lCwLT3tB0IAsdXNEdV8pKpgYbCF9wimrKqDfJ2C3loPSocNZOpUZekN14vxuhPTfOJcUNzDkx28c5S2+pC1Iglz3QEXTEbh6YLl1QLIgIE76wutuLnVA3rTnm3Fq8p61M5rLWCLRzc/iDuZGgJIshav3EDeoVk1pbEhPzXhGrAmPFWBiyd/Z8QIM+siApTzG/iKPlDcCEpH/GXxME77UjspTiUQLfAWw1G2h/4KCN8rA3+4iasdzI+rVSTZSS6oyTWn378zrX8tEu/yWAoUDAemcpr7N/F9JQcNTfV7XvBAhqw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 14/17] target/arm: hvf: pass through CNTHCTL_EL2 and MDCCINT_EL1 Date: Fri, 6 Mar 2026 08:57:53 +0100 Message-ID: <20260306075756.88922-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX60o0Hf6LqQeu PjKC/E6scFTiYiNJSe2wvm6l3+Ej2BzD96pmaydHhe2DHpTvhOM+Sbr8HEc8Q1l4m8EJWEcoBPO mQxszDSm664PB9nUtqzukiXhb8NWD/iZF8EjCKiDvcliHPuCekKE4jcdkLWL4vlyQwdf7VFfWlD 7t1vocSbirWCF24+L07MVCDqZqbfAEJPIhvEs5J8WOsD0vjdwevPByideaX3HpW/UDtm/w/TGLg dQLrXiMmQWrA24iH5TRV/rq37uzTGvs3F12BvTsifeNf0PnCbQExlvucoNKbcSf8VJN3ukfrRcf E9fJXU3Vb7v9dU4qTes+6ZXU4a8p9hGOxsK3FkC1HHt2hRHIAm8h75MDb6bAoc= X-Proofpoint-GUID: wdn3kpamxfVWy1t91UsjdMkG5_O9gkBI X-Authority-Info-Out: v=2.4 cv=bbxmkePB c=1 sm=1 tr=0 ts=69aa892d cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=L1bH-B2CdzmaWMF7168A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: wdn3kpamxfVWy1t91UsjdMkG5_O9gkBI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=657 mlxscore=0 malwarescore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 bulkscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABksULakR+jxMso2syFeIv1rXtWV7bDpnU9DSmg7JytrKsO4GcoVHNB3gF27BV2NJrUBobEp7k0Xad8lbQsMkmgSrIYD9/Hv1SAIDg3ruR2vTEzN081LeCfmfED10nd5yGVpBydjqRVJPzPxDAbElkGpsgg8gm40paH55wh3fjxNMB9WmusxTfXn/VRT24zcsbxe8VHJ+PMHRYt7A0oho+sn6Tb59ZsX/bcCx0E5AZS6BT+DugjczGjIfgOqnjuYwMVZgq0vbar6O7U4oMa4WRgJkxTs2kuvJawqsJDQnPKjGkiJdjBf3h/neoSTXQKcCJQxgtktK/M/EVq7bozdC23vJbBl90/SnbukRZcwJ/xd9WNSLCcziC/o6MweA5OqukehHVNDTT9RTf4XSXeKkOV/4Hdpkxld+nRVeMkF3gLtXq/gv2RTVJkTBJqIjhFi3nAZEdutiMjrjqHXB7TNQjHPYH3hPVFzTP1QNpIJeSxlR/qOhZf5/LlQuCn+R5t0Xgu7paCtoWva6SruZz+CMX3tNnlyoZjbf3V8lLsI2uipi9C1MPhITwQDbsRZNaQ0PLXg6Vfv8ViFvPfVqsekzN5L+YiQS66pXxFwH7L06NIAKIFsgdtsnlNRmR4ILnU7pJwxTtgNl1i/9nbD6l0/hFRhVRxgg0ZpZ+9bvFZJyRNh0ZXrClxuW1LX+rIFLCEaxBZYmsZwtR5gV/5CRzoMIccWFDqpYKB/O9UQqwEnjmgCh8lql7jnwe1efeLgj2 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=57.103.68.27; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784004152154100 HVF traps accesses to CNTHCTL_EL2. For nested guests, HVF traps accesses to= MDCCINT_EL1. Pass through those accesses to the Hypervisor.framework library. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- target/arm/hvf/hvf.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index a07702047e..8d1333cbb4 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -296,6 +296,10 @@ void hvf_arm_init_debug(void) #define SYSREG_DBGWVR15_EL1 SYSREG(2, 0, 0, 15, 6) #define SYSREG_DBGWCR15_EL1 SYSREG(2, 0, 0, 15, 7) =20 +/* EL2 registers */ +#define SYSREG_CNTHCTL_EL2 SYSREG(3, 4, 14, 1, 0) +#define SYSREG_MDCCINT_EL1 SYSREG(2, 0, 0, 2, 0) + #define WFX_IS_WFE (1 << 0) =20 #define TMR_CTL_ENABLE (1 << 0) @@ -1662,6 +1666,14 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t r= eg, uint64_t *val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_get_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_ICC_AP0R0_EL1: case SYSREG_ICC_AP0R1_EL1: case SYSREG_ICC_AP0R2_EL1: @@ -1950,6 +1962,14 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t = reg, uint64_t val) case SYSREG_OSDLR_EL1: /* Dummy register */ return 0; + case SYSREG_CNTHCTL_EL2: + if (__builtin_available(macOS 15.0, *)) { + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_C= NTHCTL_EL2, val)); + } + return 0; + case SYSREG_MDCCINT_EL1: + assert_hvf_ok(hv_vcpu_set_sys_reg(cpu->accel->fd, HV_SYS_REG_MDCCI= NT_EL1, val)); + return 0; case SYSREG_LORC_EL1: /* Dummy register */ return 0; --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:27 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784184; cv=none; d=zohomail.com; s=zohoarc; b=RizZN8lamy/R0pnSM0ng0fqqg0abf0oqqh/MjpQohKb3dRAIJbvAsxkvfna34EYQ5NyAX+5QNG+gbam7o9IWphRBRteNvRBbszKrTJ665EO4gl3UqhvpQ5IiHl2kvmOo+TC3MRIAAwSIki3l+2mqa8JZu/8d1McX32QgfZ5x9rM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784184; 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=vM1Wlorf+XqQlJ5f9IMCqYNj/5ImA32mrulRYej01YM=; b=hv03Vjwrzygfprb+byl6vRJnCcyxd/+Bkb7r9BFY3wLhy8tNMay9hB+gV18XkolipZIdbfpj42UuDLh51CeTbrNYD4VPu6ytvOsVmesCoJPTXSGH1x1HveD6SmwQfQonLXbg6bQqatBabzpGF19T/jdJTzz6aFt51z2eVV1B1LA= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784184375319.7690047713385; Fri, 6 Mar 2026 00:03:04 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5f-0008DF-PH; Fri, 06 Mar 2026 02:59:19 -0500 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 1vyQ5K-0007n9-OH for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:59:02 -0500 Received: from p-west2-cluster1-host5-snip4-10.eps.apple.com ([57.103.68.53] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ59-0006Ga-Br for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:54 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 1800B1800107; Fri, 6 Mar 2026 07:58:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id C785F1800135; Fri, 6 Mar 2026 07:58:37 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783920; x=1775375920; bh=vM1Wlorf+XqQlJ5f9IMCqYNj/5ImA32mrulRYej01YM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=RXLTcFRWuhi7WN8XACHB/3Kthj5bfmbiCGwp1U7bB2DfDyi3ZBNU/aevPFNYBGoLnzUmNL41v9i3UJbM9SR0nYE5tWmD4ly7e06CiWfQbsDPi9PgdtHKZX8d11ih16FHEx6RxH+/3TySKC5m3KNrS4ynvMkAjPlwXUbEvKEPELRTNtzAbSAjCziyMfTOun63dHZ6pg9WPc96WTe8RwrTzaxIkBR8721snZ/V7RDx5REfKlqMEaNkpma6ZqjtO3e0bzAY6MLmrCaQOohLPrLlTVDBL7wybGMQ2WxkGN90WIMiNcNBOCdfoJJ7u+VA38x7Fk32LcN7dZtYhGCCumXHKQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 15/17] hvf: arm: SME2 availability fixes Date: Fri, 6 Mar 2026 08:57:54 +0100 Message-ID: <20260306075756.88922-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX3/qF0wOTG0pM VuTIYXPwqx0UNBYBV5+odsOSUTKdmhyk4FVH5w4hK0HtffpT3ZfA5xpqTdiBYNP6KMvK+cS2uv/ BVdQ7W3BHbdZm7rvSdtbPUCgHjlXxzd/mf/GdUKpQdwQg6NBi/RyEIpsypt4tW5kOZKFLtmUtMm r772d9ka4vB/GuWB0msb605aInFh8JQ07jFMYMCXK9A8QT5N7TgWhg3vbat9zxzQ7jj4hvNENDt w4OXntMh3yvv++9cCdo6NgCRl8vnzZxep+S/roazCQIdUygVujzRosa0hrzdW/nQr+xp4eTYsCu ajRbbHavRiyf20UVo8R5yzY1FxT/WJCIHuxpX6WdftrYCS989ffCoq/higkS/0= X-Proofpoint-ORIG-GUID: CvAzs_5vgQ-nAjcshXWO8Pb6hD21kJmH X-Authority-Info-Out: v=2.4 cv=GaAaXAXL c=1 sm=1 tr=0 ts=69aa8930 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Iy1shTv_HyS0e-kpLPMA:9 X-Proofpoint-GUID: CvAzs_5vgQ-nAjcshXWO8Pb6hD21kJmH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 phishscore=0 spamscore=0 malwarescore=0 clxscore=1030 lowpriorityscore=0 bulkscore=0 mlxscore=0 adultscore=0 mlxlogscore=835 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABNvYFdnmbtyXTPkDQ2+FD/r+HZtdplWUi9tsNS/zbIbSybZpxtOOBkGzybOOHlvNgkh9bmCo+FuT0KEYy1y5i37hdNmOmLAn8YLI1Gi2f+nmA9TASpdv2aCtvWmRvjYuZqPCnjsZCjz5vfzuYQb+NkcVZSuPhKwi2DbYPut9dz81qcqtpiGK113UK0E1XVvWziO00UOVK6Oinvtu3lkWIKzq7/Hm0kaM3hq5gAwNNfEicGZcCfYE63ey/xUSawuSdo1oI3p1Nq/8nxwbjO7z/simjDUvJgcLKFBGsMzrhUxGzKUTDJ1bVbSw9ytdBvRBkC3P7mN/tF39usZ8iQsdttbv/0lQJpqSZKXlk8D/oc9qknwpIf9l63ahFY4LlAE0rvtv9Qu30wna1suSc3eSYT/CxvEopgZS0cB1B/RiuF9IP529fZA3AEAzJ59+FkVWz4i/H6eB5snnm1XHrwIt/Mdl1Br4AJTUGVhfiCvVmNIUoqC2iWMLmMaoUo8AFS72hf62u//Ufxcaj8pi9xRGiNImKKXMnn6emGOxsHjIleqsCbKfIm/dKT9EbnaWhFfcj/LOeuY4WItwzEbLlTO+8fmfuSbWNV/RAyUZ9O2+ZdNi1EsopnZ7CZb2LfWjU/Xlk66v9K2qi8VZKSrzft6SsfWvLVilyBRZEyZ+tB/6SHYLRNWJsgsGEBovzrPyVrh8KyImpI9TVPyYrvzSfQcvTGGrtn5JLWsmVd7/BSw== 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=57.103.68.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784186738154100 Content-Type: text/plain; charset="utf-8" Not sync the SME sysregs if SME2 is not available. Disable SME when nested virt is on. Signed-off-by: Mohamed Mediouni --- target/arm/hvf/hvf.c | 29 +++++++++++++++++++---------- target/arm/hvf_arm.h | 5 +++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 8d1333cbb4..cb05db2358 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1163,6 +1163,9 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUF= eatures *ahcf) =20 if (hvf_nested_virt_enabled()) { FIELD_DP64_IDREG(&host_isar, ID_AA64DFR0, PMUVER, 0x1); + /* SME is not implemented with nested virt on the Apple side */ + SET_IDREG(&host_isar, ID_AA64PFR1, + GET_IDREG(&host_isar, ID_AA64PFR1) & ~R_ID_AA64PFR1_SME_MASK= ); } =20 ahcf->isar =3D host_isar; @@ -1370,16 +1373,22 @@ int hvf_arch_init_vcpu(CPUState *cpu) arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; } } - if (__builtin_available(macOS 15.2, *)) { - for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { - hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i].sreg; - uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); - uint32_t key =3D kvm_to_cpreg_id(kvm_id); - const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs= , key); - - if (ri) { - assert(!(ri->type & ARM_CP_NO_RAW)); - arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; + if (hvf_arm_sme2_supported()) { + /* + * Clang doesn't allow us to combine the two checks together. + * -Wunsupported-availability-guard + */ + if (__builtin_available(macOS 15.2, *)) { + for (i =3D 0; i < ARRAY_SIZE(hvf_sreg_list_sme2); i++) { + hv_sys_reg_t hvf_id =3D hvf_sreg_list_sme2[i].sreg; + uint64_t kvm_id =3D HVF_TO_KVMID(hvf_id); + uint32_t key =3D kvm_to_cpreg_id(kvm_id); + const ARMCPRegInfo *ri =3D get_arm_cp_reginfo(arm_cpu->cp_= regs, key); + + if (ri) { + assert(!(ri->type & ARM_CP_NO_RAW)); + arm_cpu->cpreg_indexes[sregs_cnt++] =3D kvm_id; + } } } /* diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index 6b1c3b9792..9cb58ad9ab 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -11,6 +11,7 @@ #ifndef QEMU_HVF_ARM_H #define QEMU_HVF_ARM_H =20 +#include "system/hvf.h" #include "target/arm/cpu-qom.h" =20 /** @@ -35,6 +36,10 @@ void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); if (__builtin_available(macOS 15.2, *)) { size_t svl_bytes; hv_return_t result =3D hv_sme_config_get_max_svl_bytes(&svl_by= tes); + /* Nested virt not supported together with SME right now. */ + if (hvf_nested_virt_enabled()) { + return false; + } if (result =3D=3D HV_UNSUPPORTED) { return false; } --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:27 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784177; cv=none; d=zohomail.com; s=zohoarc; b=mxM5yBAkylBSLwC958w96d2G7q1hPAk9ujeA7UIbK3OnGwsgCNJIWAfx/HmhQ+CHyKw9fRn+WOmD0LfSFZbBA4gTWAYQXP90xC//aXP7pQjTziB+hTduY6fmeAINux5Jkg5dCiiWq/eKEDFyuTpmY2vRH7ZDBrVELTFl4RthgjU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784177; 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=LEFgZ1OOYuBdw8dPiYVuEpb1uHIu9H7rtzkrkhw9XrA=; b=AonoDUTYpXHocH9JgU+QNbu3oNmwXL4MCnWcTLkcXocMWEuL3Z5WEOitPcFeeXphrw5bypLg55pRbXhnFmhuQbK7J6YG5Mgzd6SG+eXUMDLGoxU4Ns/ix18rd3jrvi6aYjd7ii+vLZmd2BLBZHvs9elX0V1UlBvpSOKHoOEgbxQ= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784177609533.5124395554078; Fri, 6 Mar 2026 00:02:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5e-00084B-Vb; Fri, 06 Mar 2026 02:59:19 -0500 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 1vyQ5N-0007nP-0b for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:59:02 -0500 Received: from p-west2-cluster1-host9-snip4-10.eps.apple.com ([57.103.68.113] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ5F-0006Go-E3 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:58:58 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 8A4C018001A7; Fri, 6 Mar 2026 07:58:42 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id 3FB071800243; Fri, 6 Mar 2026 07:58:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783923; x=1775375923; bh=LEFgZ1OOYuBdw8dPiYVuEpb1uHIu9H7rtzkrkhw9XrA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=F3lRgdGi+/dJhuCxltT0+5WuHvjzEhBTaWBKr0LDxJMSRd+d1oYkQmZATLL19zxcri3NVTr+TmM66l+WLF6wVpGtDhC/3GJRlRx4lk5dQUOwCa5yITC1+WcKPtn97f2vHUIA/f9YAhbNy8EKQz2PDWw6foRiAwbB76xWjIpVHRpr1L5R7rTG2jAkKB4kHLhjyFLB9K2owtA2bAvn7qaznXYQuvBfFabhgSwntbL2flyMpcAKz/3zx55Kl7crJQXTuNR+n4buTpw/OiUC0hVIDCcT69w27O/Mg0fESVthfd+TszTu/kdKrrZ98ce8IAK18SjKjrpKsOCxYpoW8w0KGQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 16/17] hvf: arm: fix SME capabilities reporting Date: Fri, 6 Mar 2026 08:57:55 +0100 Message-ID: <20260306075756.88922-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: sNyj4jGDCVbhAJoJIy1qTkKN-34bagaK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfX2aEezUDL2Wrg vNZDI2Th19wJiqvObhODPe80erblJ8VLi8s8mTykyRT1adnqUhfGwn3zIOkwvIsxe9wj2eBX3hO 7ZBrtx9Z//9WGlIedS9NcMWwLOT+N6I27RXIcvAwKtVgav0v9udBms94X9Qlx576QdshyWWBxUw E+T8ujGLOnNAWgH07mLUs1rxHWYrsO4OMZ++SqS0skAa1qPH6kc4JKS440koKjKTBYHVquPlZ51 6EsIH6Wtc/ZOMOhyGSGqed/X9Qp8pzB/N4rf8JEj+fP9B7ABz6xJdlqf2DrIORqRo+KThL3REcW 4rEVonP87MxKigX09NU0V+wAwxZX3v0kLDOU9pkRC7U4XpXGcPmdqYXEa3fev0= X-Authority-Info-Out: v=2.4 cv=FcI6BZ+6 c=1 sm=1 tr=0 ts=69aa8932 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=-YisE-5-8EYoV4yVs6QA:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-GUID: sNyj4jGDCVbhAJoJIy1qTkKN-34bagaK X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 phishscore=0 bulkscore=0 mlxlogscore=859 lowpriorityscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAAB86vCyzEu6VMVHXEVmIHB8SVrkcR4Nrff1Q2ahHCqsYGUrMbxoxldbCwgSoOIf2T7uJufJqMi5m7z2ohC5do6X5qafpWxq7a1GK//C9P+OWEJoy4XqDkl8pTi7pWyK0kKYEahMDoiQ9/dMOHaqXh8okfdGd0hL2cAoflp3KGrdruGiDKacjuhHvndqOQ05ph0eSFt0y+1bVUrjFbxpw409zMZStGFgqCCnDtxuAOZvCLxJaanHD99wg8QTnFOIxhDiIKSB8OW3fDpq1Pyy7vl2j/khhWFhjZMVTuX9iUCq+AckcWCgWzU/eLRlCZUJDH6ooGeWAG1L4vL5G00cZA8dluBJfQbqGPtT8wm1QpPewD5LhgH+syW45zI1ixA4QlV0GULhpcGEnKf6a3O6e0GTYFF24gi+6/GMA6aeZRsYAvbBIH6umwwE4nv+8cqghNrlVzPtCpXEnKsCcZIdl/v/GSIQt7a4Rcl27M/D7XfqnHMh3t+Ke7VwT4N3HBWbzWGlFUqxUlguQUEhYzWTw/FdyqG7kZqbeleHLtK2V0htdI9/Z9xq8xM4jgbS/yhUQnv+iK7z+BSwf+ly665dbGEQNzeIG66Sqoj0dPMOCel6Bz4we4YT4LjazIoTznOltTrtuP2N024BDS/75BJOe4+/hRKS+6fpBJ5W8P+ugqagkmBtRr9ecMARqZuSoKCYI2SAZkmoWjVBAjFMgo/MYIZ31oKmo60I/hUOgcWflM= 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=57.103.68.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 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_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784180095158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/arm/hvf/hvf.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index cb05db2358..b7c5aea505 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -1126,6 +1126,15 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) { HV_FEATURE_REG_ID_AA64MMFR2_EL1, ID_AA64MMFR2_EL1_IDX }, /* Add ID_AA64MMFR3_EL1 here when HVF supports it */ }; + + API_AVAILABLE(macos(15.2)) static const struct sme_isar_regs { + hv_feature_reg_t reg; + ARMIDRegisterIdx index; + } sme_regs[] =3D { + { HV_FEATURE_REG_ID_AA64SMFR0_EL1, ID_AA64SMFR0_EL1_IDX }, + { HV_FEATURE_REG_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_IDX }, + }; + hv_return_t r =3D HV_SUCCESS; hv_vcpu_config_t config =3D hv_vcpu_config_create(); uint64_t t; @@ -1146,6 +1155,16 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPU= Features *ahcf) r |=3D hv_vcpu_config_get_feature_reg(config, regs[i].reg, &host_isar.idregs[regs[i].inde= x]); } + + if (__builtin_available(macOS 15.2, *)) { + if (hvf_arm_sme2_supported()) { + for (i =3D 0; i < ARRAY_SIZE(sme_regs); i++) { + r |=3D hv_vcpu_config_get_feature_reg(config, sme_regs[i].= reg, + &host_isar.idregs[sme_regs[i].= index]); + } + } + } + os_release(config); =20 /* --=20 2.50.1 (Apple Git-155) From nobody Sat Apr 11 21:31:27 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=reject dis=none) header.from=unpredictable.fr ARC-Seal: i=1; a=rsa-sha256; t=1772784176; cv=none; d=zohomail.com; s=zohoarc; b=WiXlMAmfqaE5SVWirs8DoIG/8NQeI5WY90HvbuZ9BVLb9sa+ej1vD9jzXRyqg8mh5EpUHLF0aOdnc8J6hkPRvyccDBX7EInluRT3CVZPMXvPO2rnvUweeObWF0Bgn1FVCELLR8Xr8iNaXMuEKWYw+0qR6/i6EX0CuJozYdE4jK4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772784176; h=Content-Type: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=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; b=CAAkX3BGLFx7IkoznudzK/WmF50koPLhqgIq+eS6833jJsVql1UWufHER4k2agVH7/+Q/TnYy9kXFNT/7pzGq7s1Wo+blWbQlGYSGtgLjKmfi8dH0eYeJ19NcVba1CKabyfh/nWWSpJ5drOBYm6/Xt7bT0Gks1Gg4IcJ1ZL9S64= 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=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772784176968478.31067637839465; Fri, 6 Mar 2026 00:02:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vyQ5g-0008GD-A0; Fri, 06 Mar 2026 02:59:20 -0500 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 1vyQ5O-0007oY-Ai for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:59:03 -0500 Received: from p-west2-cluster1-host2-snip4-6.eps.apple.com ([57.103.68.19] helo=outbound.mr.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vyQ5K-0006Gv-H2 for qemu-devel@nongnu.org; Fri, 06 Mar 2026 02:59:01 -0500 Received: from outbound.mr.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPS id 08F85180019D; Fri, 6 Mar 2026 07:58:44 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.152.38]) by p00-icloudmta-asmtp-us-west-2a-100-percent-3 (Postfix) with ESMTPSA id AA6FD180010C; Fri, 6 Mar 2026 07:58:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1772783925; x=1775375925; bh=ijV/TFHDkMx/sDtjnbI4Tcf5/3qsWHHZ7tvtB+wJk+k=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=S3DpDN3z96ZN2tj0Z2FLSkOhJzRj4t37bkhSnrfvccVISsRSK8SAI8TiPRHBqH33UDxPAYsG3grvwyP5Qoxzb1QL+Q6tONpWQ6lZTG6BKGKsr67KYlD8Y4XBmWbvCdR+F6jMPrzBkxFjFaXpkNTW6TZgu3J9dnOpVjfRyOn6e3OYevrR+O/9Mg62sdlqxPQn5lvW+jL+8yxEqG2NbNMe/vkuzO+K3SBh69uv36aSPwPIDYeotOYvrWUTLJhFJqyKCBE6ryxZdPVQYflVUKKUX2IG8G3UyyVKLKVdU4pA8PVdxDwipipTmC0ZAGL54huJ5RqsI5OfQRmLl5bQYL3beQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Cameron Esfahani , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini , qemu-arm@nongnu.org, Phil Dennis-Jordan , Peter Maydell , Mads Ynddal , Alexander Graf , Roman Bolshakov , Mohamed Mediouni Subject: [PATCH v13 17/17] hvf: enable nested virtualisation support Date: Fri, 6 Mar 2026 08:57:56 +0100 Message-ID: <20260306075756.88922-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260306075756.88922-1-mohamed@unpredictable.fr> References: <20260306075756.88922-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDA3NSBTYWx0ZWRfXwIuxkq5C0aoU g5l1dJlFvWAyfdz87qnYHkWWyPBiq2T39A0KDK/4BfmEGg0pJuehHgv8xaXxESvuwdU7nn4I08O ME9feFk3/o+yKsUDg3GmJ3eaNOXZIMpvavRylyNaeAsnVJFyxOMtm2QL/Nc4zfER4D/KXdHnYzf yj/fMOiUKmvTaHUEIyTLe5C8tCRYc6KyNoTvcBC9zjfO9QwUGbqFcaqK1kGDJ9Y+jN8Eb+66Y66 J5i+dY6hBuChRzQH2vXtR2u9Ip/KzV6vwCIrLJ5cN2muPh8r6veFr6q+ckOGkxy5Ub5I+r/Nw0W 8Me/7c+NBXQ4N1tAed5fQdXilSlz9lr+tVO8BBhDY+4T5Ow6IP5lv5MYT7bXfc= X-Authority-Info-Out: v=2.4 cv=BKW+bVQG c=1 sm=1 tr=0 ts=69aa8935 cx=c_apl:c_pps:t_out a=9OgfyREA4BUYbbCgc0Y0oA==:117 a=9OgfyREA4BUYbbCgc0Y0oA==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=5Chse3eIq3h0lgOaJ4gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: y3i71M5AG_WV_5a1fu6LuxFO7pwPVvIr X-Proofpoint-GUID: y3i71M5AG_WV_5a1fu6LuxFO7pwPVvIr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_02,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=995 bulkscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 mlxscore=0 phishscore=0 clxscore=1030 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603060075 X-JNJ: AAAAAAABqIK7Ls47NluHvZ2xqFhuml/qIWZqmO5Wv0hB2rEPMjY+cc5whHNyibVDrEpxeD9DkEmtFFS8aL3SWKfpColIyExUCoLs7BmWEyFoZ/6ereQX/FNm+8k6rdDf92Jm/BmKjpDBPdQd4ToCFw3Dhj2dPEATMseHBqXB6gDu2969lh0IXcgHkmm1rtvdRoaf5LGlf6mn6FDcIV4Z+dzkUczTWlUPjSaXLglblAK8DzRi/XZa7IJdKyyMysGKJ+25fAKF8gCAInj5HbOXBIJLKM6FyTSIltW+XGAstLMnmKicDUwgKTTLs1dOmYfogvSEtZGe9TSvINOk0NWoe5/bOjWB/jaSQ7PBj6/4EMw4F55JTZ9g6Dv935sVasuvCiCP8dhcGGqwXgFb0HMGxXErPqjS44Kp8BvcHnPUGpATEeyH54aTeEZIe99OGkblwSOn0mX9G95PgGUc3oPt24oF9px6zCGbdIg02VYd2COeOFeDmmsP2mgDZthKX+/kivi5GMa7muzV9I6UCgxSDltx7C4TsEzojiyAE8hSIvClHI7gTGKghA0LwexyFk7SccYisiJ59/m2CV7BnSJdIJPpckXaZ3Or5hi0lUqPXcsTt6skmQc19Hd5sJinrQAgb/F/PabHOF9fQCowUvOC32d0Wczc3wlAEVdHXS69yUTvDmc3nw7Y3MIXItt0XC0etl2aWIiW9hq9rm3Z5yArkiunBGVsx0ulNsM9hLwjJEHeP5vKIA51nPkZTe8= 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=57.103.68.19; envelope-from=mohamed@unpredictable.fr; helo=outbound.mr.icloud.com X-Spam_score_int: -5 X-Spam_score: -0.6 X-Spam_bar: / X-Spam_report: (-0.6 / 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_VALIDITY_RPBL_BLOCKED=0.892, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.622, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @unpredictable.fr) X-ZM-MESSAGEID: 1772784179065154100 Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/arm/virt.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 90769936d0..bced9f67f4 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2393,13 +2393,20 @@ static void machvirt_init(MachineState *machine) exit(1); } =20 - if (vms->virt && !kvm_enabled() && !tcg_enabled() && !qtest_enabled())= { + if (vms->virt && !kvm_enabled() && !tcg_enabled() + && !hvf_enabled() && !qtest_enabled()) { error_report("mach-virt: %s does not support providing " "Virtualization extensions to the guest CPU", current_accel_name()); exit(1); } =20 + if (vms->virt && hvf_enabled() && !hvf_irqchip_in_kernel()) { + error_report("mach-virt: For HVF and Virtualization extensions " + "only kernel-irqchip=3Don is currently supported"); + exit(1); + } + if (vms->mte && hvf_enabled()) { error_report("mach-virt: %s does not support providing " "MTE to the guest CPU", --=20 2.50.1 (Apple Git-155)