From nobody Mon Feb 9 00:56: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=1768398187; cv=none; d=zohomail.com; s=zohoarc; b=ckF+hHmKm89yltCTu68QVMuzVNA3INA+aeKabY2GOMfos3souGeCs/Jg6l1R6ERlw+kTjw36S/YGFsgGMtiiy8jx49XP2QPUddDmE6F3nEQusZTa1AZrBbqjRaIWBzzuTxT3JIFTcQ90ql1Q1g8jpBJ/UsqT2G1QUE4OxROv144= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398187; 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=+fMggmtg/uZNHz3nywgemPAlDNuqwqAYkYrWDswgN9E=; b=JJuSFapuvTQ1uX5dUsFKA+vutTHrUDp+WZBnh2mWRhh4da5l+Mx0SH4kCgtnnPqacvKpTgtOWJD8k1iP76rh08ga7Z3z86Q15pWrO9eEIJzFO/74k0ZN2dbIooflNiiHSLp8655h0kOq3bKlkwckgs1czphIkH6NfUV0WJFMsGY= 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 1768398187623988.2815323033478; Wed, 14 Jan 2026 05:43:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18R-0007kF-0C; Wed, 14 Jan 2026 08:42:07 -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 1vg18J-0007jZ-Hu for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:01 -0500 Received: from p-east2-cluster5-host2-snip4-5.eps.apple.com ([57.103.79.18] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18G-0005px-3A for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:41:59 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id CADEA180033E; Wed, 14 Jan 2026 13:41:53 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 73F66180015F; Wed, 14 Jan 2026 13:41:50 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=+fMggmtg/uZNHz3nywgemPAlDNuqwqAYkYrWDswgN9E=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=EsRYpYGP/t0m/rLnATTZbW9wKpoybIRotW00WyIUK+l6hFwGAhbqhKC1Avi8YvxDgqPx03nS7IEk+vb5AHFvzwjlUUa2qN3WV6eo950yEuY9f+q28+iQZ3n6vIPtTTlIOL7r22NbDPE17QJbPIq+mLT5GlKWFSZYnDVxBaHpehhzRh4xtfSrv1ebEgZszDqDHd6d0TtglBHYtP+ALQRQPzH9AFVXS8qYRXL0mY8N6kspmi3qSwZXvaYxjAlBoNppQ5baI70IvAdGS9/2S3XIiSKRt62NhdW5SGMie6NIOraRKWo7mmOj8nzhzWCCCQJXIyho7X9deLGNiupP9dT61A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Sebastian Ott , Pierrick Bouvier Subject: [PATCH v14 01/26] target/arm/kvm: add constants for new PSCI versions Date: Wed, 14 Jan 2026 14:41:18 +0100 Message-ID: <20260114134143.26198-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=GM8F0+NK c=1 sm=1 tr=0 ts=69679d22 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=KKAkSRfTAAAA:8 a=DAm2dGrMCKCYv6Tpj9cA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX4v/uzu4JCdx5 Na/mTMDdBFLcoUg9FWejEYQcKZ7dVt95QCx+a5dv2239I3YZnzXgkd3+g2j0DhHZqzuG0i+gN/D v9tLVwqK1pBdnwl04m7h2TPPjdCISbjGz9Z4aCJ0bLN30iH6589l/MAVMnlGGrLwPI9LVxmWi+R xRhhexCjnWc4Vdm1UbQ/75QPCIIDUYE3Z6oK8x1j6D1l29aVx7n1RObuJmLBrpJQip2A/DeI6PI 5FQUqMXp73tRtBuEgtwZK+ojIt0ecZvd5MrYFMaz9m6FU4VBlqIrXvtZpn8cnPKhfuAokeCZoSG WPWwRnfAnXJJDn/A9IK X-Proofpoint-GUID: 31TOOjUwacCEpyc4E23NqzcZokk7VUBy X-Proofpoint-ORIG-GUID: 31TOOjUwacCEpyc4E23NqzcZokk7VUBy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 clxscore=1030 mlxscore=0 suspectscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABm9zPgXNFfcJkDuUSvnWaOpK0tAUQy5mUsCvrRugSIdK0jliGJTy8FuJ9Ifbb2L4sLBxBi38qpAe8P9bBDToMnlf53Mwu09LRxZMRe1+hKtfBtXabYF8zMh7G7ple8MQiZQRnYcljjJUpAW+POm2VfQ9nGlNKO/ccK4+BL1g55Qx/VA9ZQ42tmPXtvfJq2FoqcFp+FZzmR1Hgrly8reX2Y0ndaGYosBWH8HhI7NwcU7w1wb3aOYmTQe5JAqKShHbTYtz58frGGSaS3+FB9VvN7ATHEA5fq5swKEak7AotJAP6BHq2irZHjOjF819fsIOhRtFWuJq4r5PduTq4LvcHfAva+sQuuG98mc7GZWq+6YGlFRIkFI1kXpNnAH6Uf7AyHPSorK2n/TI1ITSyngmz6G6VFl596eQi2WVFT3slqyZgQdSvbVFMjESRaO+saetjqFW9T/AwWG/6/YiqRxpqWMJVFFm7V3s/zSFqse1xU+zAN3Pc1remlYXyIHAgQbs+Z1V1EcA0c5A+h69hZxv+mc1eT3N/CyxBtFpByPKwuffBE23h2YGGjGK71PwGkf67of/NE3RX97MhRzDkEvOBF77DaQ6tvjnUfAwxP5MYD64xV3KGTxUZ9BYPQDuxJTiuD0DRmF6oBecb5z9oEx03dA3usnt+yGTb90yz+A2NozlexkI07GXK4LqTdklwLYbaM7wUdmLi6UqCkZ6MM3b8Qw2Ox/5lgKy3wf49F8OXJEGWv/JPwRQPdnirLS86PB3MZ6JCYI93ihnWhHARZBYQXdQAEuNd/HUy7Zmwcf2f6jFVAW6QwIEJGye2PmSAXXQJM0za90wIE3soHz61ZwjIGBSpgnGSdxHCIBJyiMxpO3hwWgkN7u3f8LcAMiKsVLZO+ZA7/Nuj4gLvdb1R+eOtC6Tr8nEX68Ixmc8= 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 (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.79.18; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398189859158500 Content-Type: text/plain; charset="utf-8" From: Sebastian Ott Add constants for PSCI version 1_2 and 1_3. Signed-off-by: Sebastian Ott Reviewed-by: Pierrick Bouvier --- target/arm/kvm-consts.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/arm/kvm-consts.h b/target/arm/kvm-consts.h index 54ae5da7ce..9fba3e886d 100644 --- a/target/arm/kvm-consts.h +++ b/target/arm/kvm-consts.h @@ -97,6 +97,8 @@ MISMATCH_CHECK(QEMU_PSCI_1_0_FN_PSCI_FEATURES, PSCI_1_0_F= N_PSCI_FEATURES); #define QEMU_PSCI_VERSION_0_2 0x00002 #define QEMU_PSCI_VERSION_1_0 0x10000 #define QEMU_PSCI_VERSION_1_1 0x10001 +#define QEMU_PSCI_VERSION_1_2 0x10002 +#define QEMU_PSCI_VERSION_1_3 0x10003 =20 MISMATCH_CHECK(QEMU_PSCI_0_2_RET_TOS_MIGRATION_NOT_REQUIRED, PSCI_0_2_TOS_= MP); /* We don't bother to check every possible version value */ --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398285; cv=none; d=zohomail.com; s=zohoarc; b=Yfzu3aP81zEhWbwkbVbR3OaWA5J0N4WrwQfvB5m62YUeC8/FPPLSGVC7NobRXx8emOUTz/iamil0Qs7K/PwCsJwZwqeAHw6Og4/bcZOzn1PqUOdyUrymmbygETCZu+0Y+A3luAVcE2fdVN84Yp/U3/XJbLYjJTLzeebNpPZeheg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398285; 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=ksqwamjc+5RKV9piY5vkALtcG0RUP+bOT4m8O729l+Y=; b=AzS9qgUpkW/RGG7WfZoaU6fDP3GiWa5/5akIgTmeX9v40I4qFqgRgit0x3JLuNNwlJkbZ73+vKMnJM4OS+Mu5ia4BPBiS/1p7Rck9DgYoQnPfh8kidRZ+uioyL4nRqs5bq8M+8DAZaxTOu5D+81qvWJi8z22D9x/i2CFho4He84= 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 1768398285057700.3973730510534; Wed, 14 Jan 2026 05:44:45 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18T-0007lb-45; Wed, 14 Jan 2026 08:42:09 -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 1vg18N-0007kN-W7 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:06 -0500 Received: from p-east2-cluster5-host2-snip4-10.eps.apple.com ([57.103.79.23] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18M-00065p-FR for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:03 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id D317E1800176; Wed, 14 Jan 2026 13:41:57 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id DE6EB1800482; Wed, 14 Jan 2026 13:41:53 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ksqwamjc+5RKV9piY5vkALtcG0RUP+bOT4m8O729l+Y=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=cRg8K7dkwkk/OYWV7omYuM+ur+mvkscjYVc0rB71ffACkcnwM7cVvYga5oBssuRZsZIq11YPI1awdMz/1q3WNrWQ7+6CVTih3ch+d4uM7UtGpktHWyu4r6jBAKfBspFDm22t4d2ooO46B+E2kBHlu33jff4dTCwxxu07mryOOtlLBWigpQOTLRc2ibAavtAyF4z2mt4M4pO3h2bgvM/Sv2502yWF68J1nlW/xrW4q+Q6FLWZbFFGAlVP7vIjZueeMo6ssJLHyDl/Uyp8335AAkANCheV7PkMBbWuiI8urzd6cINm9BJjaY8s3BfnbrJEtkjzAGP1Q673wfeHvZ1cIw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 02/26] accel/system: Introduce hwaccel_enabled() helper Date: Wed, 14 Jan 2026 14:41:19 +0100 Message-ID: <20260114134143.26198-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=HdAZjyE8 c=1 sm=1 tr=0 ts=69679d27 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=zYwLhoXY7WJC0OmO1EgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: rwZv0HuuZQKdxPWHYRnHK2OoliuL43vu X-Proofpoint-GUID: rwZv0HuuZQKdxPWHYRnHK2OoliuL43vu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX6yjLWRYZITPx 7rGZYJHfBPzjISxWtxf59Av7YfyQOCkijOica1RxrWsDPk4PVdlRBBcOKH+9cHRKJv7taIlKvfH a6BOr2BB0qSjxPOpR6DKxVzVVb95awo7b7ExeHRvA9Xye+T6KImZ64zkUmKOwRv4aqZJzoGnlJt k9kXgbRYrZo0iZUAVCCtXfnNeXJzTpBTti+HeFmK3m+Jb9VpF1aIrlVUGlbGFpve2traHynhg0c B0Ln6dTslkaZFJWgCTcy1pSo86D0N9Ud5d4atHeJeDI1pmwkmfH7AL8mjPFdZkz/3SNZK+mCcCk HkGjmfQ3culyIQ5LgtT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 adultscore=0 clxscore=1030 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAB9fabTtff1J1ZZVPeua9OjrzUJs+7fRALZzEV1jNTvVedJuSymxJV5Kc23Z7ysdWjhrvf3ffa/0d2pT82dunhwuhkFDZ9Rb2VaS12q1ePOIIfNzRzV7twl9TDZO7YdMNiMwJES7ZDVaR1fVEZlDFiHKeo7mkoJ6yoZYmB64tzCmubZC/+sFi83/Weyia0QdfRQKDiio2M8lQ22Gjsvcp8im5RwzSY9DEwvB4GVAtqxFFUDwmNtGYBfu30rYemmkHEGz3OtBqtzuDGkN7ZwI4XktHyijQqj9CRyU07bvcRDJMOjm8GyIrBZeHBtjSic0KrSOGpCIs6kI3+jYsFdVNA4TnzjWRS/8bRsLR0kjzxa66WIdOHu8YJt3LojixV12UXdWAhIl8KSpO/iDSWEExt4JGS3KYj505i8JUKvjsf5QRT/77fERIoesBJ3EaOpCzNrSNjUJfNL48qLxQ8l7Okg6EamtuDzTZXfNm5lWVEsjHNBKBtvdLNrTisiyvgguhU7xHlZdfk64kPpECbOXOuWPBoODzvSCAGE9CGo9/v6EzPb8Ant82KJBjel2N4OXrli6CURwCPmRISluxmjpqgWfIrte8gMxK760+g6BV4f+KFozgmZi4X/kP9B45cevJiUhmfBkqVkAstOmDUffA1IEWuHmavdXxgc/PpR8D2ASU4xaEqI8HywBlwap/y/nHBvFBYKCPKquHe6nxjuc0KfC4NCvwFdogfTvRuU9ZqkgfAQKi9T4IIqkCzf3T/fdaAACXqbitCrmSfsmFExoBhB0ucyPh+JMUwuqpqwO1tldT5MUNnd2Ac0fMt7aU20LprFQK7PZu/JRMZ2rbXeqnWTUMhQ6xn6SrbcGh8mVbrwqJhfbFZzaUfy1Y3kRazfhMQqkS5ewKG4c/s9XYyRH5rNrHG94XcWbk+nFLvJP0Dzz0DZ/Q= 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 (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.79.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398286386158500 From: Philippe Mathieu-Daud=C3=A9 hwaccel_enabled() return whether any hardware accelerator is enabled. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- include/system/hw_accel.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/system/hw_accel.h b/include/system/hw_accel.h index 55497edc29..628a50e066 100644 --- a/include/system/hw_accel.h +++ b/include/system/hw_accel.h @@ -40,4 +40,17 @@ void cpu_synchronize_pre_loadvm(CPUState *cpu); void cpu_synchronize_post_reset(CPUState *cpu); void cpu_synchronize_post_init(CPUState *cpu); =20 +/** + * hwaccel_enabled: + * + * Returns: %true if a hardware accelerator is enabled, %false otherwise. + */ +static inline bool hwaccel_enabled(void) +{ + return hvf_enabled() + || kvm_enabled() + || nvmm_enabled() + || whpx_enabled(); +} + #endif /* QEMU_HW_ACCEL_H */ --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398189; cv=none; d=zohomail.com; s=zohoarc; b=IJxwYrOUB+oNSuS8pSwuwE+MQ9oHZTbOwhkXuEd5JABmFP4Usm4PpUyTLPzCTaNIuagqHXgnJDlD0ah/RPCfTnV4EVH9UwTlVRMIltC+r4aZLtiu28DZnmoKMZLt/9GkjK7/WxmCbczDLcdd7pSG4IzS79DSr/D9rbjAXv/pkPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398189; 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=lE935EhSo6eiiRGBTf1TCzdO8HBh375WWDyS664DB/c=; b=hFR2aYGEDk5sbFTBWBwy/a7nWaw/0WgthfapSzYYEPE5v01t0c3vwAnUJYOLhmT9s8EScDuo0u3BKpT2z3bd4mUoK2Cv3Ia5MbTCinrYY9rMxuaJABd8gLVMDB51OKt1Ke54a58Fk05eEG593UrV7JV+X1+J5mPKezD2tTJUxE8= 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 1768398189236396.34597422088257; Wed, 14 Jan 2026 05:43:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18W-0007n7-Ad; Wed, 14 Jan 2026 08:42:12 -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 1vg18V-0007mW-EL for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:11 -0500 Received: from p-east2-cluster5-host11-snip4-3.eps.apple.com ([57.103.79.66] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18S-0006Ku-OF for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:09 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 51CA5180049E; Wed, 14 Jan 2026 13:42:02 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 875C11800312; Wed, 14 Jan 2026 13:41:57 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=lE935EhSo6eiiRGBTf1TCzdO8HBh375WWDyS664DB/c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=W5torUDY46IOjmAr7mculsQhHDbi6IqdmvY4lZL8PNB+YwdAKGCG/17of/E5afsV72qx5dwrLIrf6hfGevBL2zelsqXQ32b2jpIN7Dkyma3GobzO/hgjQKOFktj12sUk4v2XQXQLy5YiCqToqyQe1UBwQ0TmDj4xePRVqBEOrdor5eY1sK56Uu/4oxSITmL4w48iVKYXn4fxB9F/HFv9r7GyF3xPGxwNrKYqZJuHh1RGARV9KFbT93sqWxWIcvi3ploTFMOnNp4VgkR6w9lg3rz4p9HSSu6vVxXPLZXq05PVaQCb+DG4uT4icIv5t670QKIhyPP7Q2oMaDoYvJ6X0Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 03/26] qtest: hw/arm: virt: skip ACPI test for ITS off Date: Wed, 14 Jan 2026 14:41:20 +0100 Message-ID: <20260114134143.26198-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: F1Cce3sCjzsSeOvyAIqqmnkJhAK5Nx7Z X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX0NqzGkKis7gY k9vS3uJAPm/UAHES01W46X2BfZimcO1kW/42aflb8EAUke/2cedxtdSRwbRBCuUmQgqcVAuXilK yTv4vjO+S+pSjCQcSbMo6V9j/I1R0DyRGJ6V8Kifj8x0yHPYuYkWN+EPe15HXGC8Pbr3T48+Gwe B5C6cocLlzVnzfw8dsVR07dN8dBc7ZvbYX+chMCRlyZ2CMXR6RPsgGw824McKNVjSILoNvX9a8p RHIwc9rG71qvdZq145EtO93J+wPtA4+ZUHHjzZwb+zRX6+MbRtuFuQrU3HXuIJihbDaKkeJFd4A jT2Huyy/h+rkl7NqfIN X-Proofpoint-GUID: F1Cce3sCjzsSeOvyAIqqmnkJhAK5Nx7Z X-Authority-Info: v=2.4 cv=Hf8ZjyE8 c=1 sm=1 tr=0 ts=69679d2d cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=1t8nasy7xzbR8br5Zw8A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 bulkscore=0 malwarescore=0 clxscore=1030 spamscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABac2XAVVVyw2brq2g6FPe2u8wasuzAXrJ9w+R94+gNK9LTr4bpm2L2e7bGIJdWqTZlG4DfoNMR7gWAhYEgTt0/sfiI99L44BhtgMLByKZclPPvlR0Ch56OZXlI4y7xRCg4I1KtwhvObhvgb3VbQx9LvN/l0aTAcws2oEsUOeozmy3+/pRQ/r6CGBsXq7bKc4PL54HUVxQ9/qCIW9/WuBxPXdQtTslZ9riY8zKq7UstrhlVDe7RMn3PdCmHfN8T6W/e31llUlTft3T+hF1NLoW2AjE99I1BGPVIHQzvoe97wDaWJGAHQlv6T4hUvTgg1q4Bkm5vNGXh2mwU5dHdSrRWEUIqHJQattMAEoHphNqlceBXgfVOJsndAOPeQijdpksBEHS2dFcuu0r8s084GVztZXEfCf/bjfhnUg/wT0w66BhkLiMBqumOgZ3RtKgLYcBB45Uioi5m0jTL+YqbphahVQnwR4UjKT3CWlohlPFB+wutzHIjhFSluobKR/7orFNldDe1t6ptokAg9Hxw8dxIb4r+M6CLraPrgogaYq/ZLgCVFYycPhV3EZ7jLgXCLznWsCxEUheP3hw8AGDkEeC8WTx9lKja9B2M6S+8VYGGuX5F9E7tFNjkNNE8calQ6X8Tz2XE5tqyYWZhpDkXymOIjAPULwTtex8Ow+80eyrxEbjOk9vTuuC/gN0jfEjaQxCnrrUy/uijVtWS7CXIWhLZ4ZvvCBB+gdP1sMydH1trzNFXLl6ojk1uFkoseW8TE1g3Se89kUmDiLaF9l74yXi/qdZp2u2emFXu1G55fPVjMfA8FekanhojMtB+0QMzuOcgzl3qsg6RhTUF9bmNCfnzy/TqSyrrffHK8aPbmErX0kZOpl2jiFxc1/Jk7jdxPUB9844EmrdBmfBCCj3INZpz+hGbv8vJDkSZw== 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 (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.79.66; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398189850158501 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- tests/qtest/bios-tables-test-allowed-diff.h | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios= -tables-test-allowed-diff.h index dfb8523c8b..bfc4d60124 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,2 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/aarch64/virt/APIC.its_off", --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398182; cv=none; d=zohomail.com; s=zohoarc; b=JumeA5tN7d2W2roGjpvR4IGBadZgvmczirDPo3OADkkpEbQA9MKlFhGV2tstBzuhCyKSuAulH4XHy/UNJcNNoqfwZcsQpXra2CbpalFUOYVWuPmm7BXODV0Cac0IaZhopDPjQWx5Fu+VKq70VoQ4wsHzd2QFzv5ZVHWJe+hyC3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398182; 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=pnYhzV+5jiiMNx1pcU6+RM5m8iDu5NPUOmI5LVpVt6Q=; b=J2tiThceXkQ/cnHV94JvNRjMgK2nYw8IdgGnTnxBhcz0/1zHCNXI3IT/b0uECp4iuwipsk71nrhwGBovJrHyrTqmwEta+20Ul2Agizrt5Ia1Bj91B8vqhP9JgCy9UUHcYbv/quHOgFm8R43/gGipF1mMO6lRsqUbK3VcLxZoXRU= 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 1768398182173709.6462693589151; Wed, 14 Jan 2026 05:43:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18a-0007ov-Rx; Wed, 14 Jan 2026 08:42: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 1vg18Y-0007nr-Aw for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:14 -0500 Received: from p-east2-cluster3-host3-snip4-1.eps.apple.com ([57.103.77.152] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18W-0006TD-Js for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:14 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 2C2D7180031B; Wed, 14 Jan 2026 13:42:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 1743A1800499; Wed, 14 Jan 2026 13:42:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=pnYhzV+5jiiMNx1pcU6+RM5m8iDu5NPUOmI5LVpVt6Q=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BLkcQe8gcW9aYEo24oXlkAkklo86lTTBU8D+C2Qx3j+80tKe9m8Oad5vmwibbbS1Ewh6KJTN+6eCN1P7VIp+13ID05wxETOIkUMQCKMcvfmRAKJKs+6tSmC1e/01fO7fIW27zMIt4yQn+khi0gjSjq886EY1P/x7TkXkkLNykjXr2DWcT16DSMrmNoxvLh/3/2C94gN/Hh7l7nGvpe0HkMmbTy+bTPEI0cf32sVCi/lAvDIQraxvP3Db7uHMZTYcnL+RWCezJehe7YTC2gLzL9YRIybX9GAsnxMMAJWms/qNUTeWQni9SIhdL9nb1PbLua8Sctnn3a2IdQ+moiBNCg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 04/26] hw/arm: virt: add GICv2m for the case when ITS is not available Date: Wed, 14 Jan 2026 14:41:21 +0100 Message-ID: <20260114134143.26198-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=UsVu9uwB c=1 sm=1 tr=0 ts=69679d31 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=8tVNtdTugjW4QW2w:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GHBMd-oUYIP45a8agUkA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: lXdXJrTA2PuaAsf8L9GSfbS0r0tTQIv2 X-Proofpoint-ORIG-GUID: lXdXJrTA2PuaAsf8L9GSfbS0r0tTQIv2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfXxqeBsayU/LN0 4qN1mGzONenNBJ50c6bkvRsUVl1XeGGQEXCNPw/TZ28cCdUUcgrWvGu8buSUwqCLRzy7Qtt7yxc vAonVAqXMDO30/Y663AM316L1ShYtE1DOv+CptEW3EuzBFEMcQOKCctYbV3NczDIqoLIDtzV4k1 z2AsGTMjZK2vBfW2sBoBcwhX+nkpokncRfMMezTzf4kG8VZMTBvEY7m+3Edpqpbgk7PZv0Iw/Zq 3yuSl+N/OWn3df5GYGCj15tYOIhRbzXh8ahDsuhwsHw8loksLumGfbnT1CZU6A/AmDNTPvj1Jsg jDvQppPCP2q2T8T4Igq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=999 adultscore=0 bulkscore=0 phishscore=0 malwarescore=0 suspectscore=0 spamscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABuH+WtjXUkZm0oi9Hlc5BDNyb0sZ33djuJiQVDTjVwOsrwPkSrHDDtGD5ZjEB9sWnKFSzluTGMnrsHpUh8KAO89f6Ov9WLpwXovKSdZP5dWL+XL82T0xd8IEenjF3qf9lPcCqP20orfialxzLecCYD1a2txShAqUUrSlj33udD1YbaWa1Q7uLx+ixAd/q98c14tagY21zBXr+8CLWDtG/mOPAv+9q0kREMKUBtnEWHuGJZN/oC5gmO3+K97V2eQmhnHGMJHQJsWcH6eJ1WQ5dzZmSrHqrH0dbFiz3eExBaikMrvNSRO26YyLLNFd7O58prxeDq8UBLoWwf0MxcJnG5FpXvZSkR5Nfjja+NluealxswPB8Om9RiEMWJKB0Y2VIy/lw8zstXwYYB8itNfGc1TELcM0mnfRTxa2DyCcT+E37L0F7qIjPrDCrphssAnXV4ATb4M2EBYiIlzqJZJvCvq38hN3d8VPZs0CtJcN0mmOproxJsUiBjpL6h4Mg4Or1G1NxkB+a8+cMfFueXPJeQYzu3EMBTUtjXeRGnY5tqleRZuxIXJRKvYkELr4tNpRm3vAX5pu15wp7ByWC53EFukXyXrgx1JN0u4uakHRFZEuL3mNGo8iNmflpYtVddwaSpxlVCvwHbqcKkcYxhf/mTogtWrkSyXXAtC+oLyeH4ssnKpEMNyvZsksBkzvuGH9BYwQpt3tOvWNQxGVgavkv86K+TAaupH1vyG3ce80SJwUrt1W/hXfQkCwnJ+gJudUO4BgnMrR60AzQhR4be9ZeLiGCRoN/L+HLXevlZNtEgZg31AqpJl0662/FQiWHOuGdgR5GO0fjezxDHuE+hLnWdpdf0/K94rFuFcHV4sBadwM9X0xY1y3F6MpAuBQLNpm9ED71x+0JvNj6q3UPvUVUVBIX/UHB9q0u/VnBw6ofsOg= 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 (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.77.152; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398183940158500 Content-Type: text/plain; charset="utf-8" On Hypervisor.framework for macOS and WHPX for Windows, the provided enviro= nment is a GICv3 without ITS. As such, support a GICv3 w/ GICv2m for that scenario. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 5 ++++- hw/arm/virt.c | 8 ++++++++ include/hw/arm/virt.h | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 03b4342574..40ea6b6dd5 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -960,7 +960,10 @@ build_madt(GArray *table_data, BIOSLinker *linker, Vir= tMachineState *vms) build_append_int_noprefix(table_data, memmap[VIRT_GIC_ITS].bas= e, 8); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ } - } else { + } + + if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) + && !vms->no_gicv3_with_gicv2m) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 /* 5.2.12.16 GIC MSI Frame Structure */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9d0568a7d5..4fad34e108 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -959,6 +959,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) =20 if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) { create_its(vms); + } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { + create_v2m(vms); } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { create_v2m(vms); } @@ -2444,6 +2446,8 @@ static void machvirt_init(MachineState *machine) vms->ns_el2_virt_timer_irq =3D ns_el2_virt_timer_present() && !vmc->no_ns_el2_virt_timer_irq; =20 + vms->no_gicv3_with_gicv2m =3D vmc->no_gicv3_with_gicv2m; + fdt_add_timer_nodes(vms); fdt_add_cpu_nodes(vms); =20 @@ -3488,6 +3492,7 @@ static void virt_instance_init(Object *obj) vms->its =3D true; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; + vms->no_gicv3_with_gicv2m =3D false; =20 /* Default disallows iommu instantiation */ vms->iommu =3D VIRT_IOMMU_NONE; @@ -3540,7 +3545,10 @@ DEFINE_VIRT_MACHINE_AS_LATEST(11, 0) =20 static void virt_machine_10_2_options(MachineClass *mc) { + VirtMachineClass *vmc =3D VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); + virt_machine_11_0_options(mc); + vmc->no_gicv3_with_gicv2m =3D true; compat_props_add(mc->compat_props, hw_compat_10_2, hw_compat_10_2_len); } DEFINE_VIRT_MACHINE(10, 2) diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 8694aaa4e2..c5bc47ee88 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -130,6 +130,7 @@ struct VirtMachineClass { bool no_cpu_topology; bool no_tcg_lpa2; bool no_ns_el2_virt_timer_irq; + bool no_gicv3_with_gicv2m; bool no_nested_smmu; }; =20 @@ -178,6 +179,7 @@ struct VirtMachineState { char *oem_id; char *oem_table_id; bool ns_el2_virt_timer_irq; + bool no_gicv3_with_gicv2m; CXLState cxl_devices_state; bool legacy_smmuv3_present; }; --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398203; cv=none; d=zohomail.com; s=zohoarc; b=EmwGbKNSHRtFtAjWOag9q0KroncFD8Z19uA5MmQGrip7Pk5RSksB1s99Biw+Su+qlkp0PTOS/dFY411P+p5yuqRqBoOCbBY4GQzN7IxGPIZMETsYYSu49TLpeInuuLjCqEWoPi0xv5SsIiX4GPzjS7zL8cDmVDHWDCc8tN8HKSs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398203; 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=hV2Yybxjg6na+16RP+CDNexXZ22gE/2/GrNlo4/7dxE=; b=X9OJShrQvesNixNQVp8EkFbDknYJcupBg1E4p1TQMPux6LHuqFtlSAvHHeem/RhQN04gvoxyJkk3hnlcdA8wnAFDOOTVisNmLFL+WBhzOcbYo3SNjN3uUCMreTMw32GxSItT284l81xI3kolnbhzDPkO5QD7CNPz3YOrx0N9PWs= 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 1768398203214382.2950376766148; Wed, 14 Jan 2026 05:43:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18f-0007qZ-TD; Wed, 14 Jan 2026 08:42: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 1vg18d-0007pa-U1 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:20 -0500 Received: from p-east2-cluster3-host10-snip4-1.eps.apple.com ([57.103.77.142] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18a-0006bL-NW for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:19 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 36C001800312; Wed, 14 Jan 2026 13:42:09 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 67A081800169; Wed, 14 Jan 2026 13:42:05 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hV2Yybxjg6na+16RP+CDNexXZ22gE/2/GrNlo4/7dxE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Fy2uwUA5vmQV9wffxSONOPesWYHRZV6XI9e6k4oWdfjWGeLLEHgTblwBKLq+h+BACp4rwFOc6f3pmF4g8L6zNIa468TL+TJqavEjmNVr9KAHUbyxFdq1mCaIDOGQ7Y96UZDki8TRWtiNfKvjLDLMETjmF+QElSUSuuB1xVoGGWpNX6KCeog7fKtjLWZ3aI7JMrW2dNSm740e2aeCvF+jmDn08KColDqAHwRDN0Fk3PQ8mfB3sweqr3n89Wd/wFC+59TMhhD7VYAbFKOdFth7u7nO/DTxTgDcS70KrUQkoq5Gy1RJTuxR6ynQwunB+lb73CBPgeYbpwRh0qPRSuN3pQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 05/26] tests: data: update AArch64 ACPI tables Date: Wed, 14 Jan 2026 14:41:22 +0100 Message-ID: <20260114134143.26198-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: gIvDML9fcq_jLTZ3Tq25WBsegMtPOKM0 X-Authority-Info: v=2.4 cv=QolTHFyd c=1 sm=1 tr=0 ts=69679d36 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=CvHhVyPyXxbOnLnphYAA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX87zjh1qsv+PL T7zzQaEBWagzcshTdbeg/vsCYEt9B+Ws5TQvnWc7r7PHv3U4KQ+pfjj40GUjDwQ9WjkWaHqbMBi 1JLWEuRcB0Y7o672yMMeiiXVi3iXOG3rXJBPSCPvE4s95dFyHvOQreXhgMD3SpCSC85Qf9e+xG8 bncLJnr8bFJk7Q9L2J2nr6ipcSI7u7kROZBm4Kbmgh5YjcV3CWHOVaX4ULLUEEfW1ggwMlLGif+ m+1K8LGWXb71W083aJSxJ1Hue4paTyStOJ0T4D65gXo5znd8rJOsdjKefI8roM6/y9r9XwHM0Mb l6FRHMF6K0SBx0DCl8w X-Proofpoint-ORIG-GUID: gIvDML9fcq_jLTZ3Tq25WBsegMtPOKM0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 clxscore=1030 phishscore=0 bulkscore=0 adultscore=0 suspectscore=0 malwarescore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABMGMm+54UfUzhfDn2ygS4PuLZol0HxOh4Lgmk5BUM6TyHJSflvtYtuul+uYo/9KytVeZFShCptu5wFzSGZNZNEASMzu49BHxVn9h9UKYMsPzZeCA5hVGC6eZVV9uN+RA+eh2T7B+C2FWzWNKOosilExqUP34xXp1sBXdBTE0DEhWcWfH78eVJQNRPxTaj+W9cQyGll79OC0hkWJljqUy5Tk8085yrb4RDE319fv1JXX/rjfQBPH9XPS7Ffx03rZ1Qi7Wle3LdfiEsyY17vbpxoiAHmlTOm/I0sR8viWvUl6Rj/x4O1677dYAWrTQQA2BA9emW4teV+8BYpMfFqyO9Mu591UcE6mdKPC/MBjO4JtBMMFFQPJfDSdxyQ5+kqJA5xJQ5cV4E+gjsZYT1vo8AiOeG3/64tYehREZRT4WxV7xfqoAlXWjGtNY6naZRGoErCGH0me9wm91Cz8URZf6mZKx+E6i3PFa9mK0/Ah/1gnmqWsdV5M9Kp+Q4FdGQjC1JSeVpkhtymiMq8S/Zkmyk69k291bJv7FR3Jqv1W4ioZNNiIeHJFAwTEmTXw+TjcCcYXPl0MJw60/G4bd8stiqqTvpjoYAPE/hdAj5C4B8Aw2W4/NeM4fGb1wY+7eihUMiDKq6om8msCdYHS7kDoozgZEQqESdPjNOBHJanXspbxMvgjAC80EXFIAMBjOk8RyHZwYsvTV/dprpv+CFehXGNL/gVUibbBxH4BPWUeSBOJecRFvuiLEoyG9JDXZAFtG60vZ25WKfCq6ARP6+lYAaXhlJw4zragtqpiWb98YMTl7zURsUxv1b8Huo4tvqCD/xVSqzcFP9qNGTz/SPybWwFOcr79mQ3ysADhoxbgb0X2Uh8zRdqgHnPksaLD3vRbyXtXmw0ljULWlPnF+M/A6LhRmtI0GbWKor/yxqfNRztx01 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 (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.77.142; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398203798158500 Content-Type: text/plain; charset="utf-8" After the previous commit introducing GICv3 + GICv2m configurations, update the AArch64 ACPI table for the its=3Doff case. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- tests/data/acpi/aarch64/virt/APIC.its_off | Bin 164 -> 188 bytes tests/qtest/bios-tables-test-allowed-diff.h | 1 - 2 files changed, 1 deletion(-) diff --git a/tests/data/acpi/aarch64/virt/APIC.its_off b/tests/data/acpi/aa= rch64/virt/APIC.its_off index 6130cb7d07103b326feb4dcd7034f85808bebadf..16a01a17c0af605daf64f3cd2de= 3572be9e60cab 100644 GIT binary patch delta 43 qcmZ3&xQCI;F~HM#4+8@Oi@`*$SrWVwKqeS4aeydBAa-B~U;qHCpaq8j delta 18 ZcmdnPxP+0*F~HM#2?GNI3&%vRSpY3v1aANU diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios= -tables-test-allowed-diff.h index bfc4d60124..dfb8523c8b 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,2 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/aarch64/virt/APIC.its_off", --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398295; cv=none; d=zohomail.com; s=zohoarc; b=JK3evRAFc3KUSVOHkrAV8jVf3UxQ9/s7S88ZVKH1i6N/ZqBkDXFkmPyp96UNgE+ZqkAQb7viZelMg8kky1vIXsHKRxpw1NGXQ5tA58zPLsjSCoCBS3uJGUcxYCI8yZs4SLrj5jLyVeF/hIijJL5u9spilRvPlmwzTWEqEuZJo/s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398295; 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=CDXmA90VChDNF+mgLamehM2Ivt5rkq6oevwq5r0nHLE=; b=WyHzgMCKmLodlrGEvs0IxAjq+taXzCM6qNfetVhAQ00pAhMRF89dLEFCqBGKMdaS/ZYuJoaBW73pd1u/IegrP97wJgCDB+ISr8wK/LFZSaHJV8Z6tdPTULmRTaPjDoI9lk9bHu6thWH2FPars8g2tlRWjNyaJSu/560QWkfdWEo= 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 1768398295212283.10346136067733; Wed, 14 Jan 2026 05:44:55 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18e-0007pp-Bq; Wed, 14 Jan 2026 08:42: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 1vg18c-0007pA-DP for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:18 -0500 Received: from p-east2-cluster3-host3-snip4-1.eps.apple.com ([57.103.77.152] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18a-0006ZP-BJ for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:18 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 30B8418004A2; Wed, 14 Jan 2026 13:42:13 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 744B518004A6; Wed, 14 Jan 2026 13:42:09 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=CDXmA90VChDNF+mgLamehM2Ivt5rkq6oevwq5r0nHLE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=RKjGopJAm9+W4uOKJfZ6RGQHlRgziZxwpEuQ6iIJrU53kH8i+Q/lE7QAOF2ftWnnQqIPkyfwyR4nJaGOl71cmsUyeEoippDl4YjCQJXLVh307Wb4tHVReuTQ9Dnc4G/rarY2qttP2LkiaFGEIm1Vrv5sX/SAZg5v8EyDh5NHZ6f6tdqFMEjlvqFh/3xQn5xQ7MdFl8dt3M+SL8+QH2O8UXEFoqT9l/IYkvArYEnrZlHgDTEzY4Ab6jc8Woxwuptjg3OfHi6OBqD98OnD0wOdlUwDUqImlchAXZumM/SoFjK1kG3IWhCojieWYXrBwn/3Me+fjoMFQR5cOTCJTsgHfQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani Subject: [PATCH v14 06/26] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Date: Wed, 14 Jan 2026 14:41:23 +0100 Message-ID: <20260114134143.26198-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: -DDL5d9uNq3w8Kgy60D9Sjer7f-UJ0f- X-Authority-Info: v=2.4 cv=GdIaXAXL c=1 sm=1 tr=0 ts=69679d37 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=065Y4zqepXN3nrMe:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=eCCvHKTOcc9AFgEG6kwA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX20sRgrt9Pfdk u4MEzThTMCkJvmOMU5yjzDvGU5a8Zco33A0kdnqXuqN+ntEzzvz6d8PjaVaAL3mXRAKKSru+V3Z Xi7kci2MOzHjFNvU5iGIADttt7xjBGi0QUzuqZJ3gIQ0p6tIwipJraO3v8vr4UohCLDeR8+bdqd DymNLAKaBWIVUzglAfSvpNmHoEAisyYitaC1oSGPBbjqVQmb1xU9UcfQ2Dra8zEg0p4Vbq6fZbJ c3mUqVRXZ28QOIe1RS52PBwSboJIRIqs6FJcTXaKQb2+8OIhU+WI5TeXBgmLpkcEzQYtVSN5pkP O2A8QFVNsOh4ikwDFs6 X-Proofpoint-ORIG-GUID: -DDL5d9uNq3w8Kgy60D9Sjer7f-UJ0f- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 clxscore=1030 mlxlogscore=999 bulkscore=0 malwarescore=0 mlxscore=0 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABU2b57dIHgSbx08SHtJ+xEDfMESc8uWbc9LJdQr2RzmDbckg/yO1zlQL2bl31VZltQ0hCMjP47VDtOzAo3Pp/x9a6sG1YOCCTtH32Q96KLRU7mYufOdl/a7Lf1N5wJRVoWVZZKdRlDSOByRTk9kVceL001IREScs/sF2IWO6zg/FJueJ0wVfySKyujkxJ7/s85oEMTjH6WQU/CLJbD67kEY6v9v0j+U0L8lNq7Zli+pcGNqIW6Zsj8rP03gnkf1yRmbP7iIhLS4VbDyCzEBle0jXy9pblF5w+Oci06jdSwObSqvzYbXZMmT74WCMbGeuioiKtvVaA2i0CavuXNUtERAg/aeP2oovF6rzjWZ7smgKV70o4OrQxASto3ufxg3L1ozI4DNH9LP00iPvFTKTsbKdPS5GU+ViGXaJEAqr1v5+p/sIvO8i374m23ynPMgs1gnL96U7v3u+wFN4ELL1TxfROMJ0ck4W5zi7ZKmA7Iuk3rTvVKqQdGSF9FV3Eu6KUOuXPIO/t5mPgXF9vHtt3ONpwHwT+4bjCS+OMNGuvSc0bWMtLl+xwVTd4L5sd4slkY0vPmttInmGh9HcPrOelWzF28y2zb9I9SDpepWTpE3ncfl8gME6Wvlgw7USeQnzIkhweaarY7fz58C7+ATqJpzxTCg2pTBXtjI73qPskzIlK9YToh0zANqbfNJShVKujYbNxNb3/CZKmTIBGinjnJtD8M8c6lzJnVMeA2QgIj4EcO0VLxENpJYJ7GlLmqABeFmGv6SKyTWxFjPLWVvOoZLFyBflzFx8WkpMmn6i4pfN1/ySOokVlzL0r9iLe6R2xEYICH7oAsqDYPP5YLpaCmzu0X5DQq7YNNsqlR0Vxa8+n6UCx9/YLorwG94B3dvKCREnkZ5NfB/svD9wwKNUmw7FB 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 (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.77.152; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398296362158500 Content-Type: text/plain; charset="utf-8" Switch its to a tristate. Windows Hypervisor Platform's vGIC doesn't support ITS. Deal with this by reporting to the user and exiting. Regular configuration: GICv3 + ITS New default configuration with WHPX: GICv3 with GICv2m And its=3Doff explicitly for the newest machine version: GICv3 + GICv2m Signed-off-by: Mohamed Mediouni --- hw/arm/virt-acpi-build.c | 14 ++++++------ hw/arm/virt.c | 46 +++++++++++++++++++++++++++++++--------- include/hw/arm/virt.h | 4 +++- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 40ea6b6dd5..86024a1a73 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -473,7 +473,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) nb_nodes =3D num_smmus + 1; /* RC and SMMUv3 */ rc_mapping_count =3D rc_smmu_idmaps_len; =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * Knowing the ID ranges from the RC to the SMMU, it's possibl= e to * determine the ID ranges from RC that go directly to ITS. @@ -484,7 +484,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) rc_mapping_count +=3D rc_its_idmaps->len; } } else { - if (vms->its) { + if (virt_is_its_enabled(vms)) { nb_nodes =3D 2; /* RC and ITS */ rc_mapping_count =3D 1; /* Direct map to ITS */ } else { @@ -499,7 +499,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) build_append_int_noprefix(table_data, IORT_NODE_OFFSET, 4); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* Table 12 ITS Group Format */ build_append_int_noprefix(table_data, 0 /* ITS Group */, 1); /* Ty= pe */ node_size =3D 20 /* fixed header size */ + 4 /* 1 GIC ITS Identif= ier */; @@ -518,7 +518,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) int smmu_mapping_count, offset_to_id_array; int irq =3D sdev->irq; =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { smmu_mapping_count =3D 1; /* ITS Group node */ offset_to_id_array =3D SMMU_V3_ENTRY_SIZE; /* Just after the h= eader */ } else { @@ -611,7 +611,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * Map bypassed (don't go through the SMMU) RIDs (input) to * ITS Group node directly: RC -> ITS. @@ -946,7 +946,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) memmap[VIRT_HIGH_GIC_REDIST2].si= ze); } =20 - if (vms->its) { + if (virt_is_its_enabled(vms)) { /* * ACPI spec, Revision 6.0 Errata A * (original 6.0 definition has invalid Length) @@ -962,7 +962,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) + if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(= vms)) && !vms->no_gicv3_with_gicv2m) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 4fad34e108..553c7f62cc 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -737,7 +737,7 @@ static void create_its(VirtMachineState *vms) { DeviceState *dev; =20 - assert(vms->its); + assert(virt_is_its_enabled(vms)); if (!kvm_irqchip_in_kernel() && !vms->tcg_its) { /* * Do nothing if ITS is neither supported by the host nor emulated= by @@ -746,6 +746,15 @@ static void create_its(VirtMachineState *vms) return; } =20 + if (whpx_enabled()) { + /* + * Signal to the user when ITS is neither supported by the host + * nor emulated by the machine. + */ + error_report("ITS not supported on WHPX."); + exit(1); + } + dev =3D qdev_new(its_class_name()); =20 object_property_set_link(OBJECT(dev), "parent-gicv3", OBJECT(vms->gic), @@ -957,7 +966,7 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) =20 fdt_add_gic_node(vms); =20 - if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) { + if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(vm= s)) { create_its(vms); } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { create_v2m(vms); @@ -2699,18 +2708,34 @@ static void virt_set_highmem_mmio_size(Object *obj,= Visitor *v, extended_memmap[VIRT_HIGH_PCIE_MMIO].size =3D size; } =20 -static bool virt_get_its(Object *obj, Error **errp) +bool virt_is_its_enabled(VirtMachineState *vms) +{ + if (vms->its =3D=3D ON_OFF_AUTO_OFF) { + return false; + } + if (vms->its =3D=3D ON_OFF_AUTO_AUTO) { + if (whpx_enabled()) { + return false; + } + } + return true; +} + +static void virt_get_its(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); + OnOffAuto its =3D vms->its; =20 - return vms->its; + visit_type_OnOffAuto(v, name, &its, errp); } =20 -static void virt_set_its(Object *obj, bool value, Error **errp) +static void virt_set_its(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - vms->its =3D value; + visit_type_OnOffAuto(v, name, &vms->its, errp); } =20 static bool virt_get_dtb_randomness(Object *obj, Error **errp) @@ -3427,8 +3452,9 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) "guest CPU which implements the = ARM " "Memory Tagging Extension"); =20 - object_class_property_add_bool(oc, "its", virt_get_its, - virt_set_its); + object_class_property_add(oc, "its", "OnOffAuto", + virt_get_its, virt_set_its, + NULL, NULL); object_class_property_set_description(oc, "its", "Set on/off to enable/disable " "ITS instantiation"); @@ -3488,8 +3514,8 @@ static void virt_instance_init(Object *obj) vms->highmem_mmio =3D true; vms->highmem_redists =3D true; =20 - /* Default allows ITS instantiation */ - vms->its =3D true; + /* Default allows ITS instantiation if available */ + vms->its =3D ON_OFF_AUTO_AUTO; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; vms->no_gicv3_with_gicv2m =3D false; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index c5bc47ee88..394b70c62e 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -147,7 +147,7 @@ struct VirtMachineState { bool highmem_ecam; bool highmem_mmio; bool highmem_redists; - bool its; + OnOffAuto its; bool tcg_its; bool virt; bool ras; @@ -216,4 +216,6 @@ static inline int virt_gicv3_redist_region_count(VirtMa= chineState *vms) vms->highmem_redists) ? 2 : 1; } =20 +bool virt_is_its_enabled(VirtMachineState *vms); + #endif /* QEMU_ARM_VIRT_H */ --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398171; cv=none; d=zohomail.com; s=zohoarc; b=lgg1oImyS55tyTTxE3KZKbE+hXKYXKsKuX5liAONYci923i5rEjw9xTcVmABkDteIXgJfm2Oq3Zag1t4bWCQfjnLd500sdEdCoH68KltoUMsWPqpBj3xYUOu4ltEoH56IeD3pfGm62G14GZGtC5ilu4pGu8QNabfxNxLvVZNfgg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398171; 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=TMdu6vjPJzDykpNRvPgMSFKOFoQTM9f9J1ejCcVIHN0=; b=FdkC9tjGTtIo0W4jDt7UcRcdGEFNvq+NjjPET8/CocehT2rFLKKY4sfC8NQAEDgu8IjxckA1LkvchgMzya/Dxj98Vn/3nyJ4AGWU0d+dkSjQa4ViruQK67RZUf8fdJTS/+/2zWAXQeeRyfe9A4heoaCF6tYiVWsvpn2ryAt3a3o= 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 1768398170642181.23945629943807; Wed, 14 Jan 2026 05:42:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18j-0007t8-MX; Wed, 14 Jan 2026 08:42:25 -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 1vg18h-0007s5-VF for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:23 -0500 Received: from p-east2-cluster3-host7-snip4-4.eps.apple.com ([57.103.77.235] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18f-0006gj-3Q for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:23 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 6208C1800143; Wed, 14 Jan 2026 13:42:16 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id D9A3F180048A; Wed, 14 Jan 2026 13:42:12 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=TMdu6vjPJzDykpNRvPgMSFKOFoQTM9f9J1ejCcVIHN0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=J+1lF0Pw1rhymzcMTfOaogXVFIzLtVBSUG3HnRA1NdTnj/RPIb4ewzVlWgva0a54FyZiOTjcAAPwji4Wl6JRWuEZkKgUAlNjqFRalsErM+gWh8BctdQFIe0u0plgx0EFyr1qEMP5liK5iCcgD+ecXnOA9A5Qo62MgXzEye4njZ6diqNcPU8FAhVeQCRF0WrpaBhT/ga5iKieRtwpWEXJR4/tZX9pbQgJxg1h9G2n4RNvljjwsSoLI9LNpXcBvzjcak3B2ebmS5zfaB/WhaIQanELqoPBzFSv/bSpzqSEVUqchWmyd4ykvFqLFNzdd/6+mP2Lh5D8pA5+r/9IVXcbYg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani Subject: [PATCH v14 07/26] hw: arm: virt: rework MSI-X configuration Date: Wed, 14 Jan 2026 14:41:24 +0100 Message-ID: <20260114134143.26198-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: qiGHyfTg6ZBAr4P991_kQUrwRn3mXd90 X-Authority-Info: v=2.4 cv=Ev/fbCcA c=1 sm=1 tr=0 ts=69679d3a cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=BHL3GN1Ck1RhGNPO6CcA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX0beqPcu7RSqn Osx716w7WI2pKXgbDeSVbDOQRxhc0K2+AGW6jOcL47YFd99tGv1CKRYo75J/+YmJIV5hwa/floB 9Coibq/Q029wIy12kcm7P/TnDTEStmziIvVqGokwK7GguGN0pRj/ra/ypOfrDtaj1V1XjUwM3bb zMFln/7B5N51oOsIfLKFlpXhMqKqsvgPIiScydr3ZmGSnJjKjQpYejmA8BEIM1pcyJ5sqqVTHwf 9OmpjdF74oGPrQbOD3keNDUkafJllF08ejW+xjncs79ZwDWNZHpKAaB5lYDzN/FCiN3GTsXEDvT 31mWM/bzvFVFWSrhjSP X-Proofpoint-GUID: qiGHyfTg6ZBAr4P991_kQUrwRn3mXd90 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 clxscore=1030 bulkscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABeJwHKH8Z2IR79z5lsV+14fFT+r8Gfqp53lUsJyZ7603C5Zr+4jdDcS98nMsRI0VdobnelC5+5p0xVurF6oBLmjM3HtOABtu0CA1/caEHnSCQ088EFck9w27P7kwXZLPz1Iyw7/eAyPgX0MZAgZSte51uLTQsQ2SbfRznACaiHTp3bXVTY+8pfsRpN4xCHSLWjrM7VdOZYsWdxOiprfZwha7O82htHywaYMVDuFHjS7P7pF5tVFdBkvK+pfljD15Dc7qtgvszR/rz7dd+VTsY5spOzBnTL2UPkLve80fBXcnkBq37W8t1eiTmdigw6KnEsfD59+AtI14N6yOIGyAU3GNww2Kg0BcHDnbzcS6L1i1nZt23eZPFalIcRO5kwThvsytjSKzixFK4EudI7BSv8CryXcBA3vDa6GXdVNYJ7sMuFe6iZiAV3xDd9BMlMmAn+9poBCLqztQopF9HCUZUNfwhesbw6/C0h63cZLDm+FlNH478S60zYVIxLYyN/AkyzA4bvJzy4OfS1ld9B6R4fjiYv4+5S0ERSaGycgQcSQ7fEk3mS8dLWdhz0jh9LdA2kkpMMai9qXLOciwGGZz5jTchdiwDyF76u7Ti2l1vt1JUxpgu5oPJmXrQOqBdV/8bgA4Hp4ubNJScl4u/NR4cNKwnUgUKkbgJQKexJXBnigj0FTtiVoFrKHgtEuZgAdo/99CHvzutsOR77wWgKz6gtKIaPmbNK5sISbHHFlmor8JgiE1KBNXwqxaE53vxF+zBxLtZ8A9EvxM6lBUFLBesSyjg+Q0eVEO8KsocgtVtwcXS4z9f6cRe6WnJU2lra3mSDSNWIdiftsCrhJ2LJr2QMwYguC7fFq7+RghtIZ2RRnT9Yd4eeTCOLk9NLeqD1EYtNQ== 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 (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.77.235; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398174438158500 Content-Type: text/plain; charset="utf-8" Introduce a -M msi=3D argument to be able to control MSI-X support independ= ently from ITS, as part of supporting GICv3 + GICv2m platforms. Remove vms->its as it's no longer needed after that change. Signed-off-by: Mohamed Mediouni --- hw/arm/virt-acpi-build.c | 24 ++++++--- hw/arm/virt.c | 108 +++++++++++++++++++++++++++++++-------- include/hw/arm/virt.h | 4 +- 3 files changed, 108 insertions(+), 28 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 86024a1a73..187dd4e272 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -440,6 +440,17 @@ static void create_rc_its_idmaps(GArray *its_idmaps, G= Array *smmuv3_devs) } } =20 +/* + * In the prior Qemu ACPI table handling, GICv2 configurations + * had vms->its=3D1... That's broken. + * + * Match that assumption to match the existing ACPI tables that + * have been shipping for quite a while. + */ +static int is_gicv2_acpi_workaround_needed(VirtMachineState *vms) { + return vms->gic_version =3D=3D 2; +} + /* * Input Output Remapping Table (IORT) * Conforms to "IO Remapping Table System Software on ARM Platforms", @@ -473,7 +484,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) nb_nodes =3D num_smmus + 1; /* RC and SMMUv3 */ rc_mapping_count =3D rc_smmu_idmaps_len; =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { /* * Knowing the ID ranges from the RC to the SMMU, it's possibl= e to * determine the ID ranges from RC that go directly to ITS. @@ -484,7 +495,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) rc_mapping_count +=3D rc_its_idmaps->len; } } else { - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { nb_nodes =3D 2; /* RC and ITS */ rc_mapping_count =3D 1; /* Direct map to ITS */ } else { @@ -499,7 +510,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) build_append_int_noprefix(table_data, IORT_NODE_OFFSET, 4); build_append_int_noprefix(table_data, 0, 4); /* Reserved */ =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vms)) { /* Table 12 ITS Group Format */ build_append_int_noprefix(table_data, 0 /* ITS Group */, 1); /* Ty= pe */ node_size =3D 20 /* fixed header size */ + 4 /* 1 GIC ITS Identif= ier */; @@ -518,7 +529,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) int smmu_mapping_count, offset_to_id_array; int irq =3D sdev->irq; =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { smmu_mapping_count =3D 1; /* ITS Group node */ offset_to_id_array =3D SMMU_V3_ENTRY_SIZE; /* Just after the h= eader */ } else { @@ -611,7 +622,7 @@ build_iort(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || is_gicv2_acpi_workaround_needed(vm= s)) { /* * Map bypassed (don't go through the SMMU) RIDs (input) to * ITS Group node directly: RC -> ITS. @@ -962,8 +973,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(= vms)) - && !vms->no_gicv3_with_gicv2m) { + if (virt_is_gicv2m_enabled(vms)) { const uint16_t spi_base =3D vms->irqmap[VIRT_GIC_V2M] + ARM_SPI_BA= SE; =20 /* 5.2.12.16 GIC MSI Frame Structure */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 553c7f62cc..0e84ccd82c 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -966,12 +966,12 @@ static void create_gic(VirtMachineState *vms, MemoryR= egion *mem) =20 fdt_add_gic_node(vms); =20 - if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && virt_is_its_enabled(vm= s)) { + if (virt_is_its_enabled(vms)) { create_its(vms); - } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { - create_v2m(vms); - } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { + } else if (virt_is_gicv2m_enabled(vms)) { create_v2m(vms); + } else { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; } } =20 @@ -2710,32 +2710,93 @@ static void virt_set_highmem_mmio_size(Object *obj,= Visitor *v, =20 bool virt_is_its_enabled(VirtMachineState *vms) { - if (vms->its =3D=3D ON_OFF_AUTO_OFF) { + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: return false; - } - if (vms->its =3D=3D ON_OFF_AUTO_AUTO) { - if (whpx_enabled()) { + case VIRT_MSI_CTRL_ITS: + return true; + case VIRT_MSI_CTRL_GICV2M: + return false; + case VIRT_MSI_CTRL_AUTO: + if (whpx_enabled() && whpx_irqchip_in_kernel()) { + return false; + } + if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { return false; } + return true; } - return true; } =20 -static void virt_get_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +bool virt_is_gicv2m_enabled(VirtMachineState *vms) +{ + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: + return false; + default: + return !virt_is_its_enabled(vms); + } +} + +static char *virt_get_msi(Object *obj, Error **errp) +{ + VirtMachineState *vms =3D VIRT_MACHINE(obj); + const char *val; + + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: + val =3D "off"; + break; + case VIRT_MSI_CTRL_ITS: + val =3D "its"; + break; + case VIRT_MSI_CTRL_GICV2M: + val =3D "gicv2m"; + break; + case VIRT_MSI_CTRL_AUTO: + val =3D "auto"; + break; + } + return g_strdup(val); +} + +static void virt_set_msi(Object *obj, const char *value, Error **errp) { + ERRP_GUARD(); VirtMachineState *vms =3D VIRT_MACHINE(obj); - OnOffAuto its =3D vms->its; =20 - visit_type_OnOffAuto(v, name, &its, errp); + if (!strcmp(value, "auto")) { + vms->msi_controller =3D VIRT_MSI_CTRL_AUTO; /* Will be overriden l= ater */ + } else if (!strcmp(value, "its")) { + vms->msi_controller =3D VIRT_MSI_CTRL_ITS; + } else if (!strcmp(value, "gicv2m")) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (!strcmp(value, "none")) { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; + } else { + error_setg(errp, "Invalid msi value"); + error_append_hint(errp, "Valid values are auto, gicv2m, its, off\n= "); + } } =20 -static void virt_set_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +static bool virt_get_its(Object *obj, Error **errp) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - visit_type_OnOffAuto(v, name, &vms->its, errp); + return virt_is_its_enabled(vms); +} + +static void virt_set_its(Object *obj, bool value, Error **errp) +{ + VirtMachineState *vms =3D VIRT_MACHINE(obj); + + if (value) { + vms->msi_controller =3D VIRT_MSI_CTRL_ITS; + } else if (vms->no_gicv3_with_gicv2m) { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; + } else { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } } =20 static bool virt_get_dtb_randomness(Object *obj, Error **errp) @@ -3062,6 +3123,8 @@ static void virt_machine_device_pre_plug_cb(HotplugHa= ndler *hotplug_dev, db_start =3D base_memmap[VIRT_GIC_V2M].base; db_end =3D db_start + base_memmap[VIRT_GIC_V2M].size - 1; break; + case VIRT_MSI_CTRL_AUTO: + g_assert_not_reached(); } resv_prop_str =3D g_strdup_printf("0x%"PRIx64":0x%"PRIx64":%u", db_start, db_end, @@ -3452,13 +3515,18 @@ static void virt_machine_class_init(ObjectClass *oc= , const void *data) "guest CPU which implements the = ARM " "Memory Tagging Extension"); =20 - object_class_property_add(oc, "its", "OnOffAuto", - virt_get_its, virt_set_its, - NULL, NULL); + object_class_property_add_bool(oc, "its", virt_get_its, + virt_set_its); object_class_property_set_description(oc, "its", "Set on/off to enable/disable " "ITS instantiation"); =20 + object_class_property_add_str(oc, "msi", virt_get_msi, + virt_set_msi); + object_class_property_set_description(oc, "msi", + "Set MSI settings. " + "Valid values are auto/gicv2m/it= s/off"); + object_class_property_add_bool(oc, "dtb-randomness", virt_get_dtb_randomness, virt_set_dtb_randomness); @@ -3515,7 +3583,7 @@ static void virt_instance_init(Object *obj) vms->highmem_redists =3D true; =20 /* Default allows ITS instantiation if available */ - vms->its =3D ON_OFF_AUTO_AUTO; + vms->msi_controller =3D VIRT_MSI_CTRL_AUTO; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; vms->no_gicv3_with_gicv2m =3D false; diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 394b70c62e..ff43bcb739 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -101,6 +101,8 @@ typedef enum VirtIOMMUType { =20 typedef enum VirtMSIControllerType { VIRT_MSI_CTRL_NONE, + /* This value is overriden at runtime.*/ + VIRT_MSI_CTRL_AUTO, VIRT_MSI_CTRL_GICV2M, VIRT_MSI_CTRL_ITS, } VirtMSIControllerType; @@ -147,7 +149,6 @@ struct VirtMachineState { bool highmem_ecam; bool highmem_mmio; bool highmem_redists; - OnOffAuto its; bool tcg_its; bool virt; bool ras; @@ -217,5 +218,6 @@ static inline int virt_gicv3_redist_region_count(VirtMa= chineState *vms) } =20 bool virt_is_its_enabled(VirtMachineState *vms); +bool virt_is_gicv2m_enabled(VirtMachineState *vms); =20 #endif /* QEMU_ARM_VIRT_H */ --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398311; cv=none; d=zohomail.com; s=zohoarc; b=SwKJ8SfBjIyWjafSnVKZr3ffCmhMWxFBYV3IKiDtqQ7pbpeRRtaDaZH3Zfphcq0xo5phUAYoOyV0aKV0t17/On0KIprdV/rLZrsNa1HsHa+UZgO/lf6rQU6Txb+GYj0iFyA4plSojJcKRaks/U0fOezT0Tp4wRDP3YSbVM6FNZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398311; 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=WIhlnxgxBCyc+dWCY0SbNhn5OBvUHdUcvG79a1EP0Gg=; b=eBaagRW2+mT+tHuDRPVH/DVEm+6cyyU66aKNekSHJuBWv41bL/04eE+T0pNjzQTYe3/GvPWghEWP5YqYEEJXP/NjKq5TK9TsvD0jgb2KtQ+yBWccAB3Y7387i3li2Daap8Q4MhkCAXcgqeVY19a98yDYRkl/fpim4TVOOWI5URo= 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 1768398311220552.3554961604065; Wed, 14 Jan 2026 05:45:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18h-0007s2-Ua; Wed, 14 Jan 2026 08:42: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 1vg18g-0007qv-77 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:22 -0500 Received: from p-east2-cluster3-host11-snip4-4.eps.apple.com ([57.103.77.175] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18e-0006gA-Ly for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:21 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 3BD081800095; Wed, 14 Jan 2026 13:42:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 17EED1800160; Wed, 14 Jan 2026 13:42:15 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=WIhlnxgxBCyc+dWCY0SbNhn5OBvUHdUcvG79a1EP0Gg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Xiojs3k8JQMHlCLCDA6pxUzdJ1ZluU63oKaoIfsAEo4DIUUo9wNqWv9nlsfffXNPlXOEfUAB3OGEf3seEMRtfrjW2YI8j86Xo+17DvKgLpPn74G5GgNr5CW6rVV9w+OIOjV6/FnCb9JvioGSUHzzXduAfVJsvXfe7MU6FQtqG/e1wARlwHxGO0AHgDrqpmak1pl2g8fGFDKDREoopbDPv3+YXYqi+aCFTsY8q/pX/u3zN7sChHYywNs6ACDI/ylfkhg+C1NYa25E+wBD8x0BJ5TOM5wiP0Pu8RuEwb9ZtzGfC5Aex2AsOFTAu8ABLMlj3zriqgB1ndcUO6jVs9MwTw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 08/26] docs: arm: update virt machine model description Date: Wed, 14 Jan 2026 14:41:25 +0100 Message-ID: <20260114134143.26198-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=HdAZjyE8 c=1 sm=1 tr=0 ts=69679d3b cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=UWX6RoDBcPCHCN3xbnsA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: wRI2fb7AVvun-G6ayGQWsTaOApP5Sd1Q X-Proofpoint-GUID: wRI2fb7AVvun-G6ayGQWsTaOApP5Sd1Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX1EIp58u+zmPf Ct5dhJDegK0QieLq3pNoSOIVbgoDykROXUmFqfMsos1DcEuF9tPMaup4Ioe3bdq7maxDq9QkKeQ GF/Ys93DqKGdTR4thU1+Al4UikoW2WPtebRBD3lqxdbB9i/cgsZf5Gaf4ecF/m+Epx7YLoi2pdL w1ZBC9Fl1gveSqxFfbWsaj5PiYnEvaGVQ9tTu8YEOPcmC0HSi3cA61qJ7bB6cPS1+lxElIFrLMS iMH99ys2pf/HYkHFVhWsnCP4nZV/CjCNgd0dz70BsBQQo2BjtPV7vB84jlzheNun1Q1ggr60nuW uUWJxskr21G8ujn8khb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 adultscore=0 clxscore=1030 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABuRW2xaS+RPXiDaqx9IdH6dbqOCN7FbK1oYlHhVLbnwlkrOD89KNu0IZTA0rJX+tz4UPUuwWoSRX56+y3caEpjqT7fuHFB8rfczopJj2fMasMhrwDuG/Q5sydOqeRV9qhzqcWBafq0RmdQBwAM7Pa0WdoQeNSgJPc+PdbFPZ4ma4S7XZsbNXm9ThV/oVSo61HYlW+dJ4lbcmpLC4jtUt8BNi5eN7OKHpqlVm14OSCVy0B8rYuscbVXRsUtA7/jazDb9bRUcXKw4N5VRMvRdoQzgqTGFvZVcig4ByaqIQLK8sUf+joWv51xGWMisJxMqPAWpgd3hwx5L2KU3nRpOvNyG+ZUtMzgoIGhign11U+hKHuUaW3SNqf7NTwahNxYJWA6iDhXXwSU1O/WPNCPJhuMDG5Nx9TJjLlUM3G6PDwuGsIecbvQ5hofco5lHPojGyG9M8H7M4sTqrcnjkFLKkCJv0rdc3527C1+7E7uG/srhyIZMbXkBNBSkubOjxiUQdXo1Dw4/8fKqa4V+OWk1T4Z/Z1xSArNB4RkpIlasdMDD7lk5XadZmZOobVvuRyz0fCZKEANMW4sSSJ0uJwLJXBWF8+NC9iXyw+Zp0vx9TnJJkCfzg2Ijz6k3ootAQVeUEgaFm1m47amcoHJ+n53Md73yABxTgw4hhbYfQQ1BvbMwSGFMfbfrnST9OM9ynjayFvxC9zu2W8kRp3dMl47JHX6p8EjPQZ3yB6YSvzjxDUbZsXBUVl+i/pLGDY+3ff4X+qtLgKhQydpQ7f3OfGBd4940ZURVfOfkssWm6dFkbmIX1eIQDY9b6r+yLMcyYqULIfkyjHT2pcSIvy5UWMP5ddnUNT6zBpTIS8oRKtelMicLvesOxRVqiJ2Gj5gRPKvz2ooNE12WaFIar3mTIVLtP/esTIFBdettsNrrov8dF4Pw== 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 (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.77.175; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398312406158500 Content-Type: text/plain; charset="utf-8" Update the documentation to match current QEMU. Remove the mention of pre-2.7 machine models as those aren't provided anymore. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- docs/system/arm/virt.rst | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst index e5570773ba..b6e88c4f13 100644 --- a/docs/system/arm/virt.rst +++ b/docs/system/arm/virt.rst @@ -41,9 +41,10 @@ The virt board supports: - User-creatable SMMUv3 devices (see below for example) - hotpluggable DIMMs - hotpluggable NVDIMMs -- An MSI controller (GICv2M or ITS). GICv2M is selected by default along - with GICv2. ITS is selected by default with GICv3 (>=3D virt-2.7). Note - that ITS is not modeled in TCG mode. +- An MSI controller (GICv2m or ITS). + - When using a GICv3, ITS is selected by default when available on the p= latform. + - If using a GICv2 or when ITS is not available or disabled, a GICv2m is= provided by default instead. + - Before virt-11.0, when using a GICv3 without the ITS, a GICv2m is not = provided. - 32 virtio-mmio transport devices - running guests using the KVM accelerator on aarch64 hardware - large amounts of RAM (at least 255GB, and more if using highmem) @@ -167,9 +168,11 @@ gic-version with TCG this is currently ``3`` if ``virtualization`` is ``off`` and ``4`` if ``virtualization`` is ``on``, but this may change in future) =20 +msi + Set ``auto``/``gicv2m``/``its``/``none`` to control MSI controller confi= guration. The default is ``auto``. + its - Set ``on``/``off`` to enable/disable ITS instantiation. The default is `= `on`` - for machine types later than ``virt-2.7``. + Set ``on``/``off``/``auto`` to control ITS instantiation. The default is= ``auto``. =20 iommu Set the IOMMU type to create for the guest. Valid values are: --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398223; cv=none; d=zohomail.com; s=zohoarc; b=futPCctPjV0VAkCtdVpT5aqprhi268rrzDLU1pEhCt6zmvw6gJMdJmLqu7hLx49NpAI/CtrnAwhUY8nvcWYEgJ2bXG5rHE6k1yA5fOq0esFx9GSdMWKzq+Eb+bpfzlVZNtkwpZWYgcKDon9qrOwQSm3EPIAIorgkO1VNuO0iAmE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398223; 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=ZDL+1ZrQdQMU6W30aFxKeJ0WSSWhexTpAIoa7LZHNfo=; b=ipQJOjuccTP/iPZXL9KwDHcLLWPQ0UOPW92Juvr7KdVHaNdVVudAzWjwYbrPc9JiORmHXklZ7dzmAliZ95xfZOb9Hsx+xA5XeolBYl/DDO8x9xa0hawdsLTCxlYQOK50tJTyCHR0yO9YBKQ2Vj31DvgjBZjoHTCwzLxy7vC95uU= 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 1768398222748222.82282790701765; Wed, 14 Jan 2026 05:43:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg18p-0007vW-NM; Wed, 14 Jan 2026 08:42: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 1vg18o-0007vF-Nx for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:30 -0500 Received: from p-east2-cluster3-host11-snip4-7.eps.apple.com ([57.103.77.178] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18m-00070c-Vj for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:30 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 2410D18004A6; Wed, 14 Jan 2026 13:42:23 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 660D8180016F; Wed, 14 Jan 2026 13:42:19 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ZDL+1ZrQdQMU6W30aFxKeJ0WSSWhexTpAIoa7LZHNfo=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=KekDW+OqSWpMevUdB30Ijqq5P0OMexeJ6rXhxUDqNOQoXkzlwfSILCCZFb6HyJWQEAS8ewpwcWujZJDn74yxSLS/gql3NB3cUS+y21Mo0/dM1DuyXz4l3K0rXS053S/M7Pnfd7ppjoENQhtiwJGRRR0K3Dcy327UB03q98DV22R5C3du3gnzl68WOKzGgo7i7DPwz8cx8FSOPfmCPj6jfm6BfsgcjtBiKeC8ITeHEuQ1NLEVsXbDXpOkS0A44l4tFFSQhdFERs4qVtcIyFLOEwdMqyC8nF0fv6KR1wDXjAz5y6DZpgioLsZKzDb/IxHkfT1A0VTKOHH2MgM2Rid3yw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 09/26] whpx: Move around files before introducing AArch64 support Date: Wed, 14 Jan 2026 14:41:26 +0100 Message-ID: <20260114134143.26198-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: t7ygWtOmzYgYIZSa0l8pNrbXNmd4F9Sx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfXz++NXQkco7dz ooZhgVS37o1YRPPq0pAUwYq/VnhTr2chhQX0dSIOCxjUpTOyTQ5caMNeI5Z4hXwmJ5ON1tvc73v +/QfmFIyHD3Y74bYgkVeUUzDMJMheZ5zApGLcTAD4sDfUFjwLZ7wFPgM2Ao9kGk55CLhS2sKXCF unU6MfRkfLRKm8XH/8TNx+uFFy3UdDSs0ZtUg+tErQyQWR/RHBOXZbhL4IzOZWZSqL7yZjWvNCY W5cnO8B8cZhv0LVcyxhe0MF8LmBCiAbZ5GB1kFMNAaZbwyAioA4/QsOpbP3/kXanK5odzB2dGNb xIPS2yCoLtBuxk3fT+g X-Authority-Info: v=2.4 cv=GZYaXAXL c=1 sm=1 tr=0 ts=69679d42 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=5-iGLm-LtT_B5TT3xKgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: t7ygWtOmzYgYIZSa0l8pNrbXNmd4F9Sx X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 clxscore=1030 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABew9jx91tEwmec3l1TbfRPBMiwULRA1f+cuSJraiC8c7pMeJP0uOrjtr+GGmiAKmEBlFhoriAeeMcEqoxBXl0ioGVKGDUcJ7Wbgn0apQRM6owbYg3t3lJCMr66MhkLgdkeI8R0zYxOCJ6jKNzbOaPtXNAO6va0800XLqWM/+6BCV+I/jotOFO/QrNzydO7k5SYxeEriEaT63xFXSbzIpy56QusGkXTKuS+ChqtzrOM0SlasrMOmdHoYxwY1+sb20h1Z1a3X1c4TY7srtTMvKzY0xzljyBeMthaHIOFCAXOAfy7by2MyE9NU2amT1dIs5YoH7jXp+PdHNHaA91yiYfIwwj+40biOs2QQY0wUUDy5MEJnMSdV/RbwQXKlItY2hyHQ0pUJeex1WmaSuXolAbuoUB2HL3jAJSbPAgSbtGDGZoZgtx49wDhC9lsd0Ns5YjI3Oa8BkWJOIo0mbUhGZctIjxq689rmCEC+TACb5PRIeFHXFPr9KuHYfNcn5g7DtqnXaqhVqiPXOa1I+aa8IWELz9bWK5C/dw8uRGER41iiNB4PGyzCzBgvoAUcRyoiXKw+T4WCHAytUF7IOHwyr5nNtPKcQo4pLHfOGCEKWGuPacMtUlr+a4R8iOyJTd1RjB+MVMjvF6F8Yr4/jfAJMc9mWvGTSe2X2g4G90Ud/sGzXVEu8O4FADXZNGT5QTS12rI5jaOV2bv4KbOWmuzWOWFs+pSFz3KJPYA9IzS8IpIYUEs2acQkpwojaanAYGQ027RUmbLR8qD8tfIb7mWzYuKbl9ZH9/OfxzjGiBfHzWhclzVCYoRb3n9iMva5OVjh0Mis7I3VmcVRJZ3ZXpSA30tCgi6/2z6tBeHfGbZymr7UGPeoPsMA4Z+JtBSVf86fZQoyzppEh/X8kmVrpSB4ELxwb6Y0xFnQqAQjeknYr8QVBuQkQQsw== 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 (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.77.178; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398224652158500 Switch to a design where we can share whpx code between x86 and AArch64 whe= n it makes sense to do so. Signed-off-by: Mohamed Mediouni Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 ++ accel/meson.build | 1 + accel/whpx/meson.build | 6 ++++++ {target/i386 =3D> accel}/whpx/whpx-accel-ops.c | 4 ++-- {target/i386/whpx =3D> include/system}/whpx-accel-ops.h | 4 ++-- {target/i386/whpx =3D> include/system}/whpx-internal.h | 6 ++++-- target/i386/whpx/meson.build | 1 - target/i386/whpx/whpx-all.c | 4 ++-- target/i386/whpx/whpx-apic.c | 2 +- 9 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 accel/whpx/meson.build rename {target/i386 =3D> accel}/whpx/whpx-accel-ops.c (97%) rename {target/i386/whpx =3D> include/system}/whpx-accel-ops.h (92%) rename {target/i386/whpx =3D> include/system}/whpx-internal.h (97%) diff --git a/MAINTAINERS b/MAINTAINERS index 4ddbfba9f0..561f18c8d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -563,9 +563,11 @@ WHPX CPUs M: Pedro Barbuda M: Mohamed Mediouni S: Supported +F: accel/whpx/ F: target/i386/whpx/ F: accel/stubs/whpx-stub.c F: include/system/whpx.h +F: include/system/whpx-accel-ops.h =20 MSHV M: Magnus Kulke diff --git a/accel/meson.build b/accel/meson.build index 983dfd0bd5..289b7420ff 100644 --- a/accel/meson.build +++ b/accel/meson.build @@ -6,6 +6,7 @@ user_ss.add(files('accel-user.c')) subdir('tcg') if have_system subdir('hvf') + subdir('whpx') subdir('qtest') subdir('kvm') subdir('xen') diff --git a/accel/whpx/meson.build b/accel/whpx/meson.build new file mode 100644 index 0000000000..7b3d6f1c1c --- /dev/null +++ b/accel/whpx/meson.build @@ -0,0 +1,6 @@ +whpx_ss =3D ss.source_set() +whpx_ss.add(files( + 'whpx-accel-ops.c', +)) + +specific_ss.add_all(when: 'CONFIG_WHPX', if_true: whpx_ss) diff --git a/target/i386/whpx/whpx-accel-ops.c b/accel/whpx/whpx-accel-ops.c similarity index 97% rename from target/i386/whpx/whpx-accel-ops.c rename to accel/whpx/whpx-accel-ops.c index f75886128d..c84a25c273 100644 --- a/target/i386/whpx/whpx-accel-ops.c +++ b/accel/whpx/whpx-accel-ops.c @@ -16,8 +16,8 @@ #include "qemu/guest-random.h" =20 #include "system/whpx.h" -#include "whpx-internal.h" -#include "whpx-accel-ops.h" +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" =20 static void *whpx_cpu_thread_fn(void *arg) { diff --git a/target/i386/whpx/whpx-accel-ops.h b/include/system/whpx-accel-= ops.h similarity index 92% rename from target/i386/whpx/whpx-accel-ops.h rename to include/system/whpx-accel-ops.h index 54cfc25a14..ed9d4c49f4 100644 --- a/target/i386/whpx/whpx-accel-ops.h +++ b/include/system/whpx-accel-ops.h @@ -7,8 +7,8 @@ * See the COPYING file in the top-level directory. */ =20 -#ifndef TARGET_I386_WHPX_ACCEL_OPS_H -#define TARGET_I386_WHPX_ACCEL_OPS_H +#ifndef SYSTEM_WHPX_ACCEL_OPS_H +#define SYSTEM_WHPX_ACCEL_OPS_H =20 #include "system/cpus.h" =20 diff --git a/target/i386/whpx/whpx-internal.h b/include/system/whpx-interna= l.h similarity index 97% rename from target/i386/whpx/whpx-internal.h rename to include/system/whpx-internal.h index 2dcad1f565..041fa958b4 100644 --- a/target/i386/whpx/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -1,11 +1,13 @@ -#ifndef TARGET_I386_WHPX_INTERNAL_H -#define TARGET_I386_WHPX_INTERNAL_H +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_INTERNAL_H +#define SYSTEM_WHPX_INTERNAL_H =20 #include #include #include =20 #include "hw/i386/apic.h" +#include "exec/vaddr.h" =20 typedef enum WhpxBreakpointState { WHPX_BP_CLEARED =3D 0, diff --git a/target/i386/whpx/meson.build b/target/i386/whpx/meson.build index 9c54aaad39..c3aaaff9fd 100644 --- a/target/i386/whpx/meson.build +++ b/target/i386/whpx/meson.build @@ -1,5 +1,4 @@ i386_system_ss.add(when: 'CONFIG_WHPX', if_true: files( 'whpx-all.c', 'whpx-apic.c', - 'whpx-accel-ops.c', )) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index db184e1b0d..cef31fc1a8 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -31,8 +31,8 @@ #include "accel/accel-cpu-target.h" #include =20 -#include "whpx-internal.h" -#include "whpx-accel-ops.h" +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" =20 #include #include diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c index afcb25843b..b934fdcbe1 100644 --- a/target/i386/whpx/whpx-apic.c +++ b/target/i386/whpx/whpx-apic.c @@ -18,7 +18,7 @@ #include "hw/pci/msi.h" #include "system/hw_accel.h" #include "system/whpx.h" -#include "whpx-internal.h" +#include "system/whpx-internal.h" =20 struct whpx_lapic_state { struct { --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398296; cv=none; d=zohomail.com; s=zohoarc; b=VgK8KjoDYnFOJsYMJmjsuGKB/hOvmcMH8prSeLUMGyr7uUBRZbR1+Zhe4Y1nIk74ONEvy4xGLXsQCgO4y0G9H1TWalyqSxSglk/lBKZuMBH5xVcUBQzR0jbOvgUtkWXoBm2U63fuEL2lLbjeRvurXfePNrdgQSQCi1I9gAHOAiI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398296; 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=sQ3V08xbcalhtr2aUzzc620bG2/z/ncYXthbkxktV8U=; b=PEXqwHC06LXYbSG+K0UKbstpCfPPBTP0f2XI8MOMMF2B71zWwxmLIHL0v95TRQ0IohSlHgDMZerll2rWZ1qkMAtxXtkSktt/fcnzjIuhlczrmpOMjkiGRKAqL2a+Ur3dcxrnREmamerluMD01DNQxDjbv3JJVg/j32GgUwVxjK8= 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 1768398296022241.10894293267006; Wed, 14 Jan 2026 05:44:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg190-00081A-BV; Wed, 14 Jan 2026 08:42:42 -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 1vg18w-0007zq-2l for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:38 -0500 Received: from p-east2-cluster3-host8-snip4-9.eps.apple.com ([57.103.77.250] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18s-00078Z-DO for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:37 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id E7ADA18004A9; Wed, 14 Jan 2026 13:42:28 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 03B1018004AC; Wed, 14 Jan 2026 13:42:23 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=sQ3V08xbcalhtr2aUzzc620bG2/z/ncYXthbkxktV8U=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=InyKQKOB48gLeF+QJBfPO/4STwv5MdWaLy7Gg0Y9HHQjwIv38lOPNBd2zpJ91ke1q3GLuBWWXewwhHV5maPI17NmGdSqljUpq/sm5A5npT1FF4Vhc+f6aE32aFCM8bKSL1OdzdUs9zzy0wwWaL8IX+l+gjZC+tWt3vkC6ntskeHsanqQ4K0R2Viwu5gXTZ7kcd4hQMxVzp96OdkVITmEFhoXRSXwDBiZKYqvqD9mhGNKgTHPf9cERi/5fz8yIeg/5DfAVYgpOiUgmbaXhlyt44dPAkV7jta/GTOOgMrC/UiVd4CWLFcW2cuCopniWsDvoA5QNCUr2sAH84G+BIyWbQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 10/26] whpx: reshuffle common code Date: Wed, 14 Jan 2026 14:41:27 +0100 Message-ID: <20260114134143.26198-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX70/wCdFp6rDT LcWr3OW35sjOLRFNNF9vQii5B/qfWYj84wEaE3Ev6q5r0mw95VBn6IxU+Z04k6g/CeTSuQGSus7 zE1JLi5EkBaTlPiF9AbvPt3uhsvzGTu87onZwz/ye8HRC3kdAJCZdT7rw6h9AjSBT/mMYq9KjFf 2XeT8Fk8V4t6b5kp2kyQEO2+OiHOQbDvLbrXeXiKWrS7Bu4W8pzxc8syolJp+EyIn9ZK1OswT+e iUqBXlshFG+LVsUPDdbUc80HX5/8SvsKLaH544z3D2JaiEc1p9B/Q3hWPA4j3j+hd7Sk/JZB45f +QuoTI9/d0FusZRVf6o X-Authority-Info: v=2.4 cv=PLACOPqC c=1 sm=1 tr=0 ts=69679d46 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=XtnWhMvHLvoGx0dyWtYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 1ncZAsySzY9jabn7rdlKZPYGOeRaFH_t X-Proofpoint-ORIG-GUID: 1ncZAsySzY9jabn7rdlKZPYGOeRaFH_t X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxscore=0 clxscore=1030 adultscore=0 spamscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAB6oN3ov9wUQ59WWD2mYwwaMVurB8e8J4VJkGF0CDdX0yQRFeEz8RaHxRoWCsy2B8+EWI68iTjlo3RBuDNdWTh4uJ3lCodVQ+o59UB/wTUOVS5kw+AVz0yqIxS5VYOLQWXSUMRaqZuhsdJDvA2VGgDwC/RGgWW3YeJhNUcErkRZZFBvl4IgLgqDX7o6ftyQnBdFk33KENlVZjO7idHXcdAONNSH5mch7YhPZMbIMacXGJ+/bU7g/OVAJDqlRjtTsp5mvn91OBTFhxVwcmQeh0Ga0pcXHwQRvZNmso4LGdJyGSNc8Qw7o2Pxv/qfZVGE9VkEdG4FuYFBOz8t7HQ8e1Cwt9V/Fb/smrw7KPV9CprvxQGrp6ogo7OjThsf9oIxGo9Zq+7MmuhfnIRo1tAlUAQ3hIxGCgKkXyrRifMre5g+eitj2oW1XH5BgmQfOM8Rqdwn4oMtupKiHLe2D1tMhAgJ0CSMeQGbY5OrCxijGwmjDwmSQBl+3duLdWTKw0oU+1FNpGxNQT28E7xGsO5oXCGLhVZhpautRyJJMI3qQlxItIqet1AH6500R3vTh5BQQ8Fhk2PuB9z8zj3OODSq+IbYjuBMOvqp6um4rI9lFHxzkP/A4d5UbFmQ6CTsfjWLx5WsvXujTPAFHtd3rykuKmVqHt9CoDWy4yUbYA1uvKBMDBSzhJg1ZG/beqVjG7/XLQ5lg4A03rLSIlWrnkU+6T/uwVPRacTBpmEpwNUnOs+ejP3mjN0YxUmzKLRwRE8NzShYE9GfH40Icqv+KCu5ZaZ3NlF+SsKFlALJXSZ3R2pmN0QUkfXfIpdVQiX+y8XCuDlJHaEFUcLm+22Q7X4PS75cs7GnkMbJSXtEcOLAqzOJpcgvPDf/7vshHqlU13Y4Bs= 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 (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.77.250; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398298464158500 Content-Type: text/plain; charset="utf-8" Some code can be shared between x86_64 and arm64 WHPX. Do so as much as rea= sonable. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 + accel/whpx/meson.build | 1 + accel/whpx/whpx-common.c | 558 +++++++++++++++++++++++++++++++++++ include/system/whpx-all.h | 20 ++ include/system/whpx-common.h | 21 ++ target/i386/whpx/whpx-all.c | 551 +--------------------------------- 6 files changed, 612 insertions(+), 541 deletions(-) create mode 100644 accel/whpx/whpx-common.c create mode 100644 include/system/whpx-all.h create mode 100644 include/system/whpx-common.h diff --git a/MAINTAINERS b/MAINTAINERS index 561f18c8d2..e66c764167 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -568,6 +568,8 @@ F: target/i386/whpx/ F: accel/stubs/whpx-stub.c F: include/system/whpx.h F: include/system/whpx-accel-ops.h +F: include/system/whpx-common.h +F: include/system/whpx-internal.h =20 MSHV M: Magnus Kulke diff --git a/accel/whpx/meson.build b/accel/whpx/meson.build index 7b3d6f1c1c..fad28dddcb 100644 --- a/accel/whpx/meson.build +++ b/accel/whpx/meson.build @@ -1,6 +1,7 @@ whpx_ss =3D ss.source_set() whpx_ss.add(files( 'whpx-accel-ops.c', + 'whpx-common.c' )) =20 specific_ss.add_all(when: 'CONFIG_WHPX', if_true: whpx_ss) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c new file mode 100644 index 0000000000..0a6068fdde --- /dev/null +++ b/accel/whpx/whpx-common.c @@ -0,0 +1,558 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Windows Hypervisor Platform accelerator (WHPX) + * + * Copyright Microsoft Corp. 2017 + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "system/address-spaces.h" +#include "system/ioport.h" +#include "gdbstub/helpers.h" +#include "qemu/accel.h" +#include "accel/accel-ops.h" +#include "system/whpx.h" +#include "system/cpus.h" +#include "system/runstate.h" +#include "qemu/main-loop.h" +#include "hw/core/boards.h" +#include "hw/intc/ioapic.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-types-common.h" +#include "qapi/qapi-visit-common.h" +#include "migration/blocker.h" +#include "accel/accel-cpu-target.h" +#include + +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" +#include "system/whpx-common.h" +#include "system/whpx-all.h" + +#include +#include + +bool whpx_allowed; +static bool whp_dispatch_initialized; +static HMODULE hWinHvPlatform; +static HMODULE hWinHvEmulation; + +struct whpx_state whpx_global; +struct WHPDispatch whp_dispatch; + +/* Tries to find a breakpoint at the specified address. */ +struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address) +{ + struct whpx_state *whpx =3D &whpx_global; + int i; + + if (whpx->breakpoints.breakpoints) { + for (i =3D 0; i < whpx->breakpoints.breakpoints->used; i++) { + if (address =3D=3D whpx->breakpoints.breakpoints->data[i].addr= ess) { + return &whpx->breakpoints.breakpoints->data[i]; + } + } + } + + return NULL; +} + +/* + * This function is called when the a VCPU is about to start and no other + * VCPUs have been started so far. Since the VCPU start order could be + * arbitrary, it doesn't have to be VCPU#0. + * + * It is used to commit the breakpoints into memory, and configure WHPX + * to intercept debug exceptions. + * + * Note that whpx_set_exception_exit_bitmap() cannot be called if one or + * more VCPUs are already running, so this is the best place to do it. + */ +int whpx_first_vcpu_starting(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + + g_assert(bql_locked()); + + if (!QTAILQ_EMPTY(&cpu->breakpoints) || + (whpx->breakpoints.breakpoints && + whpx->breakpoints.breakpoints->used)) { + CPUBreakpoint *bp; + int i =3D 0; + bool update_pending =3D false; + + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { + if (i >=3D whpx->breakpoints.original_address_count || + bp->pc !=3D whpx->breakpoints.original_addresses[i]) { + update_pending =3D true; + } + + i++; + } + + if (i !=3D whpx->breakpoints.original_address_count) { + update_pending =3D true; + } + + if (update_pending) { + /* + * The CPU breakpoints have changed since the last call to + * whpx_translate_cpu_breakpoints(). WHPX breakpoints must + * now be recomputed. + */ + whpx_translate_cpu_breakpoints(&whpx->breakpoints, cpu, i); + } + /* Actually insert the breakpoints into the memory. */ + whpx_apply_breakpoints(whpx->breakpoints.breakpoints, cpu, true); + } + HRESULT hr; + uint64_t exception_mask; + if (whpx->step_pending || + (whpx->breakpoints.breakpoints && + whpx->breakpoints.breakpoints->used)) { + /* + * We are either attempting to single-step one or more CPUs, or + * have one or more breakpoints enabled. Both require intercepting + * the WHvX64ExceptionTypeBreakpointTrap exception. + */ + exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; + } else { + /* Let the guest handle all exceptions. */ + exception_mask =3D 0; + } + hr =3D whpx_set_exception_exit_bitmap(exception_mask); + if (!SUCCEEDED(hr)) { + error_report("WHPX: Failed to update exception exit mask," + "hr=3D%08lx.", hr); + return 1; + } + return 0; +} + +/* + * This function is called when the last VCPU has finished running. + * It is used to remove any previously set breakpoints from memory. + */ +int whpx_last_vcpu_stopping(CPUState *cpu) +{ + whpx_apply_breakpoints(whpx_global.breakpoints.breakpoints, cpu, false= ); + return 0; +} + +static void do_whpx_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data a= rg) +{ + if (!cpu->vcpu_dirty) { + whpx_get_registers(cpu); + cpu->vcpu_dirty =3D true; + } +} + +static void do_whpx_cpu_synchronize_post_reset(CPUState *cpu, + run_on_cpu_data arg) +{ + whpx_set_registers(cpu, WHPX_SET_RESET_STATE); + cpu->vcpu_dirty =3D false; +} + +static void do_whpx_cpu_synchronize_post_init(CPUState *cpu, + run_on_cpu_data arg) +{ + whpx_set_registers(cpu, WHPX_SET_FULL_STATE); + cpu->vcpu_dirty =3D false; +} + +static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu, + run_on_cpu_data arg) +{ + cpu->vcpu_dirty =3D true; +} + +/* + * CPU support. + */ + +void whpx_cpu_synchronize_state(CPUState *cpu) +{ + if (!cpu->vcpu_dirty) { + run_on_cpu(cpu, do_whpx_cpu_synchronize_state, RUN_ON_CPU_NULL); + } +} + +void whpx_cpu_synchronize_post_reset(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_post_reset, RUN_ON_CPU_NULL); +} + +void whpx_cpu_synchronize_post_init(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_post_init, RUN_ON_CPU_NULL); +} + +void whpx_cpu_synchronize_pre_loadvm(CPUState *cpu) +{ + run_on_cpu(cpu, do_whpx_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL); +} + +static void whpx_pre_resume_vm(AccelState *as, bool step_pending) +{ + whpx_global.step_pending =3D step_pending; +} + +/* + * Vcpu support. + */ + +int whpx_vcpu_exec(CPUState *cpu) +{ + int ret; + int fatal; + + for (;;) { + if (cpu->exception_index >=3D EXCP_INTERRUPT) { + ret =3D cpu->exception_index; + cpu->exception_index =3D -1; + break; + } + + fatal =3D whpx_vcpu_run(cpu); + + if (fatal) { + error_report("WHPX: Failed to exec a virtual processor"); + abort(); + } + } + + return ret; +} + +void whpx_destroy_vcpu(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + + whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); + AccelCPUState *vcpu =3D cpu->accel; + whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); + g_free(cpu->accel); +} + + +void whpx_vcpu_kick(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + whp_dispatch.WHvCancelRunVirtualProcessor( + whpx->partition, cpu->cpu_index, 0); +} + +/* + * Memory support. + */ + +static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, + void *host_va, int add, int rom, + const char *name) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + /* + if (add) { + printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", + (void*)start_pa, (void*)size, host_va, + (rom ? "ROM" : "RAM"), name); + } else { + printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", + (void*)start_pa, (void*)size, host_va, name); + } + */ + + if (add) { + hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, + host_va, + start_pa, + size, + (WHvMapGpaRangeFlagRead | + WHvMapGpaRangeFlagExecute | + (rom ? 0 : WHvMapGpaRangeFlagWri= te))); + } else { + hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, + start_pa, + size); + } + + if (FAILED(hr)) { + error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," + " Host:%p, hr=3D%08lx", + (add ? "MAP" : "UNMAP"), name, + (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); + } +} + +static void whpx_process_section(MemoryRegionSection *section, int add) +{ + MemoryRegion *mr =3D section->mr; + hwaddr start_pa =3D section->offset_within_address_space; + ram_addr_t size =3D int128_get64(section->size); + unsigned int delta; + uint64_t host_va; + + if (!memory_region_is_ram(mr)) { + return; + } + + delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); + delta &=3D ~qemu_real_host_page_mask(); + if (delta > size) { + return; + } + start_pa +=3D delta; + size -=3D delta; + size &=3D qemu_real_host_page_mask(); + if (!size || (start_pa & ~qemu_real_host_page_mask())) { + return; + } + + host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) + + section->offset_within_region + delta; + + whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, + memory_region_is_rom(mr), mr->name); +} + +static void whpx_region_add(MemoryListener *listener, + MemoryRegionSection *section) +{ + memory_region_ref(section->mr); + whpx_process_section(section, 1); +} + +static void whpx_region_del(MemoryListener *listener, + MemoryRegionSection *section) +{ + whpx_process_section(section, 0); + memory_region_unref(section->mr); +} + +static void whpx_transaction_begin(MemoryListener *listener) +{ +} + +static void whpx_transaction_commit(MemoryListener *listener) +{ +} + +static void whpx_log_sync(MemoryListener *listener, + MemoryRegionSection *section) +{ + MemoryRegion *mr =3D section->mr; + + if (!memory_region_is_ram(mr)) { + return; + } + + memory_region_set_dirty(mr, 0, int128_get64(section->size)); +} + +static MemoryListener whpx_memory_listener =3D { + .name =3D "whpx", + .begin =3D whpx_transaction_begin, + .commit =3D whpx_transaction_commit, + .region_add =3D whpx_region_add, + .region_del =3D whpx_region_del, + .log_sync =3D whpx_log_sync, + .priority =3D MEMORY_LISTENER_PRIORITY_ACCEL, +}; + +void whpx_memory_init(void) +{ + memory_listener_register(&whpx_memory_listener, &address_space_memory); +} + +/* + * Load the functions from the given library, using the given handle. If a + * handle is provided, it is used, otherwise the library is opened. The + * handle will be updated on return with the opened one. + */ +static bool load_whp_dispatch_fns(HMODULE *handle, + WHPFunctionList function_list) +{ + HMODULE hLib =3D *handle; + + #define WINHV_PLATFORM_DLL "WinHvPlatform.dll" + #define WINHV_EMULATION_DLL "WinHvEmulation.dll" + #define WHP_LOAD_FIELD_OPTIONAL(return_type, function_name, signature)= \ + whp_dispatch.function_name =3D \ + (function_name ## _t)GetProcAddress(hLib, #function_name); \ + + #define WHP_LOAD_FIELD(return_type, function_name, signature) \ + whp_dispatch.function_name =3D \ + (function_name ## _t)GetProcAddress(hLib, #function_name); \ + if (!whp_dispatch.function_name) { \ + error_report("Could not load function %s", #function_name); \ + goto error; \ + } \ + + #define WHP_LOAD_LIB(lib_name, handle_lib) \ + if (!handle_lib) { \ + handle_lib =3D LoadLibrary(lib_name); \ + if (!handle_lib) { \ + error_report("Could not load library %s.", lib_name); \ + goto error; \ + } \ + } \ + + switch (function_list) { + case WINHV_PLATFORM_FNS_DEFAULT: + WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) + LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) + break; + case WINHV_EMULATION_FNS_DEFAULT: + WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) + LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) + break; + case WINHV_PLATFORM_FNS_SUPPLEMENTAL: + WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) + LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_LOAD_FIELD_OPTIONAL) + break; + } + + *handle =3D hLib; + return true; + +error: + if (hLib) { + FreeLibrary(hLib); + } + + return false; +} + +static void whpx_set_kernel_irqchip(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffSplit mode; + + if (!visit_type_OnOffSplit(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_SPLIT_ON: + whpx->kernel_irqchip_allowed =3D true; + whpx->kernel_irqchip_required =3D true; + break; + + case ON_OFF_SPLIT_OFF: + whpx->kernel_irqchip_allowed =3D false; + whpx->kernel_irqchip_required =3D false; + break; + + case ON_OFF_SPLIT_SPLIT: + error_setg(errp, "WHPX: split irqchip currently not supported"); + error_append_hint(errp, + "Try without kernel-irqchip or with kernel-irqchip=3Don|off"); + break; + + default: + /* + * The value was checked in visit_type_OnOffSplit() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + +static void whpx_cpu_accel_class_init(ObjectClass *oc, const void *data) +{ + AccelCPUClass *acc =3D ACCEL_CPU_CLASS(oc); + + acc->cpu_instance_init =3D whpx_cpu_instance_init; +} + +static const TypeInfo whpx_cpu_accel_type =3D { + .name =3D ACCEL_CPU_NAME("whpx"), + + .parent =3D TYPE_ACCEL_CPU, + .class_init =3D whpx_cpu_accel_class_init, + .abstract =3D true, +}; + +/* + * Partition support + */ + +bool whpx_apic_in_platform(void) +{ + return whpx_global.apic_in_platform; +} + +static void whpx_accel_class_init(ObjectClass *oc, const void *data) +{ + AccelClass *ac =3D ACCEL_CLASS(oc); + ac->name =3D "WHPX"; + ac->init_machine =3D whpx_accel_init; + ac->pre_resume_vm =3D whpx_pre_resume_vm; + ac->allowed =3D &whpx_allowed; + + object_class_property_add(oc, "kernel-irqchip", "on|off|split", + NULL, whpx_set_kernel_irqchip, + NULL, NULL); + object_class_property_set_description(oc, "kernel-irqchip", + "Configure WHPX in-kernel irqchip"); +} + +static void whpx_accel_instance_init(Object *obj) +{ + struct whpx_state *whpx =3D &whpx_global; + + memset(whpx, 0, sizeof(struct whpx_state)); + /* Turn on kernel-irqchip, by default */ + whpx->kernel_irqchip_allowed =3D true; +} + +static const TypeInfo whpx_accel_type =3D { + .name =3D ACCEL_CLASS_NAME("whpx"), + .parent =3D TYPE_ACCEL, + .instance_init =3D whpx_accel_instance_init, + .class_init =3D whpx_accel_class_init, +}; + +static void whpx_type_init(void) +{ + type_register_static(&whpx_accel_type); + type_register_static(&whpx_cpu_accel_type); +} + +bool init_whp_dispatch(void) +{ + if (whp_dispatch_initialized) { + return true; + } + + if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { + goto error; + } + + if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { + goto error; + } + + assert(load_whp_dispatch_fns(&hWinHvPlatform, + WINHV_PLATFORM_FNS_SUPPLEMENTAL)); + whp_dispatch_initialized =3D true; + + return true; +error: + if (hWinHvPlatform) { + FreeLibrary(hWinHvPlatform); + } + if (hWinHvEmulation) { + FreeLibrary(hWinHvEmulation); + } + return false; +} + +type_init(whpx_type_init); diff --git a/include/system/whpx-all.h b/include/system/whpx-all.h new file mode 100644 index 0000000000..f13cdf7f66 --- /dev/null +++ b/include/system/whpx-all.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_ALL_H +#define SYSTEM_WHPX_ALL_H + +/* Called by whpx-common */ +int whpx_vcpu_run(CPUState *cpu); +void whpx_get_registers(CPUState *cpu); +void whpx_set_registers(CPUState *cpu, int level); +int whpx_accel_init(AccelState *as, MachineState *ms); +void whpx_cpu_instance_init(CPUState *cs); +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions); +void whpx_apply_breakpoints( +struct whpx_breakpoint_collection *breakpoints, + CPUState *cpu, + bool resuming); +void whpx_translate_cpu_breakpoints( + struct whpx_breakpoints *breakpoints, + CPUState *cpu, + int cpu_breakpoint_count); +#endif diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h new file mode 100644 index 0000000000..e549c7539c --- /dev/null +++ b/include/system/whpx-common.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SYSTEM_WHPX_COMMON_H +#define SYSTEM_WHPX_COMMON_H + +struct AccelCPUState { + WHV_EMULATOR_HANDLE emulator; + bool window_registered; + bool interruptable; + bool ready_for_pic_interrupt; + uint64_t tpr; + uint64_t apic_base; + bool interruption_pending; + /* Must be the last field as it may have a tail */ + WHV_RUN_VP_EXIT_CONTEXT exit_ctx; +}; + +int whpx_first_vcpu_starting(CPUState *cpu); +int whpx_last_vcpu_stopping(CPUState *cpu); +void whpx_memory_init(void); +struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address); +#endif diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index cef31fc1a8..052cda42bf 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -33,6 +33,8 @@ =20 #include "system/whpx-internal.h" #include "system/whpx-accel-ops.h" +#include "system/whpx-all.h" +#include "system/whpx-common.h" =20 #include #include @@ -232,28 +234,9 @@ typedef enum WhpxStepMode { WHPX_STEP_EXCLUSIVE, } WhpxStepMode; =20 -struct AccelCPUState { - WHV_EMULATOR_HANDLE emulator; - bool window_registered; - bool interruptable; - bool ready_for_pic_interrupt; - uint64_t tpr; - uint64_t apic_base; - bool interruption_pending; - - /* Must be the last field as it may have a tail */ - WHV_RUN_VP_EXIT_CONTEXT exit_ctx; -}; - -bool whpx_allowed; -static bool whp_dispatch_initialized; -static HMODULE hWinHvPlatform, hWinHvEmulation; static uint32_t max_vcpu_index; static WHV_PROCESSOR_XSAVE_FEATURES whpx_xsave_cap; =20 -struct whpx_state whpx_global; -struct WHPDispatch whp_dispatch; - static bool whpx_has_xsave(void) { return whpx_xsave_cap.XsaveSupport; @@ -379,7 +362,7 @@ static uint64_t whpx_cr8_to_apic_tpr(uint64_t cr8) return cr8 << 4; } =20 -static void whpx_set_registers(CPUState *cpu, int level) +void whpx_set_registers(CPUState *cpu, int level) { struct whpx_state *whpx =3D &whpx_global; AccelCPUState *vcpu =3D cpu->accel; @@ -594,7 +577,7 @@ static void whpx_get_xcrs(CPUState *cpu) cpu_env(cpu)->xcr0 =3D xcr0.Reg64; } =20 -static void whpx_get_registers(CPUState *cpu) +void whpx_get_registers(CPUState *cpu) { struct whpx_state *whpx =3D &whpx_global; AccelCPUState *vcpu =3D cpu->accel; @@ -934,7 +917,7 @@ static int whpx_handle_portio(CPUState *cpu, * The 'exceptions' argument accepts a bitmask, e.g: * (1 << WHvX64ExceptionTypeDebugTrapOrFault) | (...) */ -static HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) { struct whpx_state *whpx =3D &whpx_global; WHV_PARTITION_PROPERTY prop =3D { 0, }; @@ -1084,23 +1067,6 @@ static HRESULT whpx_vcpu_configure_single_stepping(C= PUState *cpu, return S_OK; } =20 -/* Tries to find a breakpoint at the specified address. */ -static struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t add= ress) -{ - struct whpx_state *whpx =3D &whpx_global; - int i; - - if (whpx->breakpoints.breakpoints) { - for (i =3D 0; i < whpx->breakpoints.breakpoints->used; i++) { - if (address =3D=3D whpx->breakpoints.breakpoints->data[i].addr= ess) { - return &whpx->breakpoints.breakpoints->data[i]; - } - } - } - - return NULL; -} - /* * Linux uses int3 (0xCC) during startup (see int3_selftest()) and for * debugging user-mode applications. Since the WHPX API does not offer @@ -1136,7 +1102,7 @@ static const uint8_t whpx_breakpoint_instruction =3D = 0xF1; * memory, but doesn't actually do it. The memory accessing is done in * whpx_apply_breakpoints(). */ -static void whpx_translate_cpu_breakpoints( +void whpx_translate_cpu_breakpoints( struct whpx_breakpoints *breakpoints, CPUState *cpu, int cpu_breakpoint_count) @@ -1230,7 +1196,7 @@ static void whpx_translate_cpu_breakpoints( * Passing resuming=3Dtrue will try to set all previously unset breakpoin= ts. * Passing resuming=3Dfalse will remove all inserted ones. */ -static void whpx_apply_breakpoints( +void whpx_apply_breakpoints( struct whpx_breakpoint_collection *breakpoints, CPUState *cpu, bool resuming) @@ -1306,93 +1272,6 @@ static void whpx_apply_breakpoints( } } =20 -/* - * This function is called when the a VCPU is about to start and no other - * VCPUs have been started so far. Since the VCPU start order could be - * arbitrary, it doesn't have to be VCPU#0. - * - * It is used to commit the breakpoints into memory, and configure WHPX - * to intercept debug exceptions. - * - * Note that whpx_set_exception_exit_bitmap() cannot be called if one or - * more VCPUs are already running, so this is the best place to do it. - */ -static int whpx_first_vcpu_starting(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - HRESULT hr; - - g_assert(bql_locked()); - - if (!QTAILQ_EMPTY(&cpu->breakpoints) || - (whpx->breakpoints.breakpoints && - whpx->breakpoints.breakpoints->used)) { - CPUBreakpoint *bp; - int i =3D 0; - bool update_pending =3D false; - - QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { - if (i >=3D whpx->breakpoints.original_address_count || - bp->pc !=3D whpx->breakpoints.original_addresses[i]) { - update_pending =3D true; - } - - i++; - } - - if (i !=3D whpx->breakpoints.original_address_count) { - update_pending =3D true; - } - - if (update_pending) { - /* - * The CPU breakpoints have changed since the last call to - * whpx_translate_cpu_breakpoints(). WHPX breakpoints must - * now be recomputed. - */ - whpx_translate_cpu_breakpoints(&whpx->breakpoints, cpu, i); - } - - /* Actually insert the breakpoints into the memory. */ - whpx_apply_breakpoints(whpx->breakpoints.breakpoints, cpu, true); - } - - uint64_t exception_mask; - if (whpx->step_pending || - (whpx->breakpoints.breakpoints && - whpx->breakpoints.breakpoints->used)) { - /* - * We are either attempting to single-step one or more CPUs, or - * have one or more breakpoints enabled. Both require intercepting - * the WHvX64ExceptionTypeBreakpointTrap exception. - */ - - exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; - } else { - /* Let the guest handle all exceptions. */ - exception_mask =3D 0; - } - - hr =3D whpx_set_exception_exit_bitmap(exception_mask); - if (!SUCCEEDED(hr)) { - error_report("WHPX: Failed to update exception exit mask," - "hr=3D%08lx.", hr); - return 1; - } - - return 0; -} - -/* - * This function is called when the last VCPU has finished running. - * It is used to remove any previously set breakpoints from memory. - */ -static int whpx_last_vcpu_stopping(CPUState *cpu) -{ - whpx_apply_breakpoints(whpx_global.breakpoints.breakpoints, cpu, false= ); - return 0; -} - /* Returns the address of the next instruction that is about to be execute= d. */ static vaddr whpx_vcpu_get_pc(CPUState *cpu, bool exit_context_valid) { @@ -1634,7 +1513,7 @@ static void whpx_vcpu_process_async_events(CPUState *= cpu) } } =20 -static int whpx_vcpu_run(CPUState *cpu) +int whpx_vcpu_run(CPUState *cpu) { HRESULT hr; struct whpx_state *whpx =3D &whpx_global; @@ -2057,65 +1936,6 @@ static int whpx_vcpu_run(CPUState *cpu) return ret < 0; } =20 -static void do_whpx_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data a= rg) -{ - if (!cpu->vcpu_dirty) { - whpx_get_registers(cpu); - cpu->vcpu_dirty =3D true; - } -} - -static void do_whpx_cpu_synchronize_post_reset(CPUState *cpu, - run_on_cpu_data arg) -{ - whpx_set_registers(cpu, WHPX_SET_RESET_STATE); - cpu->vcpu_dirty =3D false; -} - -static void do_whpx_cpu_synchronize_post_init(CPUState *cpu, - run_on_cpu_data arg) -{ - whpx_set_registers(cpu, WHPX_SET_FULL_STATE); - cpu->vcpu_dirty =3D false; -} - -static void do_whpx_cpu_synchronize_pre_loadvm(CPUState *cpu, - run_on_cpu_data arg) -{ - cpu->vcpu_dirty =3D true; -} - -/* - * CPU support. - */ - -void whpx_cpu_synchronize_state(CPUState *cpu) -{ - if (!cpu->vcpu_dirty) { - run_on_cpu(cpu, do_whpx_cpu_synchronize_state, RUN_ON_CPU_NULL); - } -} - -void whpx_cpu_synchronize_post_reset(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_post_reset, RUN_ON_CPU_NULL); -} - -void whpx_cpu_synchronize_post_init(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_post_init, RUN_ON_CPU_NULL); -} - -void whpx_cpu_synchronize_pre_loadvm(CPUState *cpu) -{ - run_on_cpu(cpu, do_whpx_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL); -} - -static void whpx_pre_resume_vm(AccelState *as, bool step_pending) -{ - whpx_global.step_pending =3D step_pending; -} - /* * Vcpu support. */ @@ -2244,295 +2064,18 @@ error: return ret; } =20 -int whpx_vcpu_exec(CPUState *cpu) -{ - int ret; - int fatal; - - for (;;) { - if (cpu->exception_index >=3D EXCP_INTERRUPT) { - ret =3D cpu->exception_index; - cpu->exception_index =3D -1; - break; - } - - fatal =3D whpx_vcpu_run(cpu); - - if (fatal) { - error_report("WHPX: Failed to exec a virtual processor"); - abort(); - } - } - - return ret; -} - -void whpx_destroy_vcpu(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - AccelCPUState *vcpu =3D cpu->accel; - - whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); - whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); - g_free(cpu->accel); -} - -void whpx_vcpu_kick(CPUState *cpu) -{ - struct whpx_state *whpx =3D &whpx_global; - whp_dispatch.WHvCancelRunVirtualProcessor( - whpx->partition, cpu->cpu_index, 0); -} - -/* - * Memory support. - */ - -static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, - void *host_va, int add, int rom, - const char *name) -{ - struct whpx_state *whpx =3D &whpx_global; - HRESULT hr; - - /* - if (add) { - printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", - (void*)start_pa, (void*)size, host_va, - (rom ? "ROM" : "RAM"), name); - } else { - printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", - (void*)start_pa, (void*)size, host_va, name); - } - */ - - if (add) { - hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, - host_va, - start_pa, - size, - (WHvMapGpaRangeFlagRead | - WHvMapGpaRangeFlagExecute | - (rom ? 0 : WHvMapGpaRangeFlagWri= te))); - } else { - hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, - start_pa, - size); - } - - if (FAILED(hr)) { - error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," - " Host:%p, hr=3D%08lx", - (add ? "MAP" : "UNMAP"), name, - (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); - } -} - -static void whpx_process_section(MemoryRegionSection *section, int add) -{ - MemoryRegion *mr =3D section->mr; - hwaddr start_pa =3D section->offset_within_address_space; - ram_addr_t size =3D int128_get64(section->size); - unsigned int delta; - uint64_t host_va; - - if (!memory_region_is_ram(mr)) { - return; - } - - delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); - delta &=3D ~qemu_real_host_page_mask(); - if (delta > size) { - return; - } - start_pa +=3D delta; - size -=3D delta; - size &=3D qemu_real_host_page_mask(); - if (!size || (start_pa & ~qemu_real_host_page_mask())) { - return; - } - - host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) - + section->offset_within_region + delta; - - whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, - memory_region_is_rom(mr), mr->name); -} - -static void whpx_region_add(MemoryListener *listener, - MemoryRegionSection *section) -{ - memory_region_ref(section->mr); - whpx_process_section(section, 1); -} - -static void whpx_region_del(MemoryListener *listener, - MemoryRegionSection *section) -{ - whpx_process_section(section, 0); - memory_region_unref(section->mr); -} - -static void whpx_transaction_begin(MemoryListener *listener) -{ -} - -static void whpx_transaction_commit(MemoryListener *listener) -{ -} - -static void whpx_log_sync(MemoryListener *listener, - MemoryRegionSection *section) -{ - MemoryRegion *mr =3D section->mr; - - if (!memory_region_is_ram(mr)) { - return; - } - - memory_region_set_dirty(mr, 0, int128_get64(section->size)); -} - -static MemoryListener whpx_memory_listener =3D { - .name =3D "whpx", - .begin =3D whpx_transaction_begin, - .commit =3D whpx_transaction_commit, - .region_add =3D whpx_region_add, - .region_del =3D whpx_region_del, - .log_sync =3D whpx_log_sync, - .priority =3D MEMORY_LISTENER_PRIORITY_ACCEL, -}; - -static void whpx_memory_init(void) -{ - memory_listener_register(&whpx_memory_listener, &address_space_memory); -} - -/* - * Load the functions from the given library, using the given handle. If a - * handle is provided, it is used, otherwise the library is opened. The - * handle will be updated on return with the opened one. - */ -static bool load_whp_dispatch_fns(HMODULE *handle, - WHPFunctionList function_list) -{ - HMODULE hLib =3D *handle; - - #define WINHV_PLATFORM_DLL "WinHvPlatform.dll" - #define WINHV_EMULATION_DLL "WinHvEmulation.dll" - #define WHP_LOAD_FIELD_OPTIONAL(return_type, function_name, signature)= \ - whp_dispatch.function_name =3D \ - (function_name ## _t)GetProcAddress(hLib, #function_name); \ - - #define WHP_LOAD_FIELD(return_type, function_name, signature) \ - whp_dispatch.function_name =3D \ - (function_name ## _t)GetProcAddress(hLib, #function_name); \ - if (!whp_dispatch.function_name) { \ - error_report("Could not load function %s", #function_name); \ - goto error; \ - } \ - - #define WHP_LOAD_LIB(lib_name, handle_lib) \ - if (!handle_lib) { \ - handle_lib =3D LoadLibrary(lib_name); \ - if (!handle_lib) { \ - error_report("Could not load library %s.", lib_name); \ - goto error; \ - } \ - } \ - - switch (function_list) { - case WINHV_PLATFORM_FNS_DEFAULT: - WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) - LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) - break; - - case WINHV_EMULATION_FNS_DEFAULT: - WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) - LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) - break; - - case WINHV_PLATFORM_FNS_SUPPLEMENTAL: - WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) - LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_LOAD_FIELD_OPTIONAL) - break; - } - - *handle =3D hLib; - return true; - -error: - if (hLib) { - FreeLibrary(hLib); - } - - return false; -} - -static void whpx_set_kernel_irqchip(Object *obj, Visitor *v, - const char *name, void *opaque, - Error **errp) -{ - struct whpx_state *whpx =3D &whpx_global; - OnOffSplit mode; - - if (!visit_type_OnOffSplit(v, name, &mode, errp)) { - return; - } - - switch (mode) { - case ON_OFF_SPLIT_ON: - whpx->kernel_irqchip_allowed =3D true; - whpx->kernel_irqchip_required =3D true; - break; - - case ON_OFF_SPLIT_OFF: - whpx->kernel_irqchip_allowed =3D false; - whpx->kernel_irqchip_required =3D false; - break; - - case ON_OFF_SPLIT_SPLIT: - error_setg(errp, "WHPX: split irqchip currently not supported"); - error_append_hint(errp, - "Try without kernel-irqchip or with kernel-irqchip=3Don|off"); - break; - - default: - /* - * The value was checked in visit_type_OnOffSplit() above. If - * we get here, then something is wrong in QEMU. - */ - abort(); - } -} - -static void whpx_cpu_instance_init(CPUState *cs) +void whpx_cpu_instance_init(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); =20 host_cpu_instance_init(cpu); } =20 -static void whpx_cpu_accel_class_init(ObjectClass *oc, const void *data) -{ - AccelCPUClass *acc =3D ACCEL_CPU_CLASS(oc); - - acc->cpu_instance_init =3D whpx_cpu_instance_init; -} - -static const TypeInfo whpx_cpu_accel_type =3D { - .name =3D ACCEL_CPU_NAME("whpx"), - - .parent =3D TYPE_ACCEL_CPU, - .class_init =3D whpx_cpu_accel_class_init, - .abstract =3D true, -}; - /* * Partition support */ =20 -static int whpx_accel_init(AccelState *as, MachineState *ms) +int whpx_accel_init(AccelState *as, MachineState *ms) { struct whpx_state *whpx; int ret; @@ -2715,77 +2258,3 @@ error: =20 return ret; } - -bool whpx_apic_in_platform(void) { - return whpx_global.apic_in_platform; -} - -static void whpx_accel_class_init(ObjectClass *oc, const void *data) -{ - AccelClass *ac =3D ACCEL_CLASS(oc); - ac->name =3D "WHPX"; - ac->init_machine =3D whpx_accel_init; - ac->pre_resume_vm =3D whpx_pre_resume_vm; - ac->allowed =3D &whpx_allowed; - - object_class_property_add(oc, "kernel-irqchip", "on|off|split", - NULL, whpx_set_kernel_irqchip, - NULL, NULL); - object_class_property_set_description(oc, "kernel-irqchip", - "Configure WHPX in-kernel irqchip"); -} - -static void whpx_accel_instance_init(Object *obj) -{ - struct whpx_state *whpx =3D &whpx_global; - - memset(whpx, 0, sizeof(struct whpx_state)); - /* Turn on kernel-irqchip, by default */ - whpx->kernel_irqchip_allowed =3D true; -} - -static const TypeInfo whpx_accel_type =3D { - .name =3D ACCEL_CLASS_NAME("whpx"), - .parent =3D TYPE_ACCEL, - .instance_init =3D whpx_accel_instance_init, - .class_init =3D whpx_accel_class_init, -}; - -static void whpx_type_init(void) -{ - type_register_static(&whpx_accel_type); - type_register_static(&whpx_cpu_accel_type); -} - -bool init_whp_dispatch(void) -{ - if (whp_dispatch_initialized) { - return true; - } - - if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { - goto error; - } - - if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { - goto error; - } - - assert(load_whp_dispatch_fns(&hWinHvPlatform, - WINHV_PLATFORM_FNS_SUPPLEMENTAL)); - whp_dispatch_initialized =3D true; - - return true; -error: - if (hWinHvPlatform) { - FreeLibrary(hWinHvPlatform); - } - - if (hWinHvEmulation) { - FreeLibrary(hWinHvEmulation); - } - - return false; -} - -type_init(whpx_type_init); --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398172; cv=none; d=zohomail.com; s=zohoarc; b=H8ovL/cxsINEKvoTSgW+7YzQ0tusZQ+UV4uynNkSLIlpvGuepeXg69Yy1CoyOubo7djYx+iywYhLDBU15CK52I0HJt6MLdAnItBMkksS1+ekoCWz896plSy009xs18xE5ZY8gOhHpPo9J5sSGlzeX3Y91lzGDvjpoVOKKOY9BaM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398172; 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=4Um6hRxHh4BMXdx4GLCdFkThKG/poHmK1RPmbKL0RKU=; b=e1flZEAgSTsehqyjmic1QwTKLyNVrzFM9YiLl8ghrX3r2rQXODUzbf76Z7t2kQD40mnL1D9uvSCvkrZUcAWDoBAoj98Ngm2eYymRPJH3m4asTiPNHt+54qP6Nafp6n97q8UVyVw4bh2M4rwVOfvwS+PuwJGGF1RVGF+jwdI9GLI= 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 1768398171601979.210641277365; Wed, 14 Jan 2026 05:42:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg192-00081T-9K; Wed, 14 Jan 2026 08:42:44 -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 1vg18x-00080H-Iw for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:40 -0500 Received: from p-east2-cluster3-host6-snip4-10.eps.apple.com ([57.103.77.211] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg18v-0007Jt-N5 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:39 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 09285180017B; Wed, 14 Jan 2026 13:42:32 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 9CC8C1800160; Wed, 14 Jan 2026 13:42:28 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=4Um6hRxHh4BMXdx4GLCdFkThKG/poHmK1RPmbKL0RKU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Fw/cAFjI9PSNeGfaTonXBbvI2rcaH/t3PdLMgWjsBe4qsoUC01hkMTvKjzjUnk1KpWMNYCrzEwhB59x5jlB4Oob+QwLK+Dl20FBIQ1DDGQSfwPa460eR7gJaxMu/DzvSWKIxulypXY5g/I+QMkQPHkvYcc9goXU8U7SWQoGZtch2+TfVqhOGXEz/40dn6YeNXJF6t+giBipkXwGD5GZlxl97goKz0iPhGVKEk0SX7xN8irASI7vUvBk7EyCGcPaa989GdM9xIKqx8yNAXkvksTq7bsqq16m79fZ2eC2gO1zUoIUNyvE/qr3uGo48lWV6eXpq0rnhZkWX5acrJ2svlw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 11/26] whpx: ifdef out winhvemulation on non-x86_64 Date: Wed, 14 Jan 2026 14:41:28 +0100 Message-ID: <20260114134143.26198-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX4rQfQd6fr/Z2 B1PkWlBc9k6+k/gkx9RZQLdGXVU7L6+3FMn+qzoajt3oZiUUT/h8+yIbNCX4XC9UK69wFlMfCe8 ksXcFAaRv6r+BOGLOaNHlLWJIm8EddLJLk08AhvKvfsPrNQv6GqDpEuzn3CfO8LLmGNPAShsrjy SfYIR1q9bAqp5ZzpclDWIArLz0Px3WMydxcncvv/cT3m/37q4xyWrzwyA+QYmAuVB8HpYCdV0nI A7z3XYifuZbMf/IGakf4VZiSWjoKhqta803FsyQXM4xt1PHeDWU1YGtmcQHQTeqKMvLBzRb5mTV tqi3o6rZ3995OUTPInm X-Authority-Info: v=2.4 cv=Ys8ChoYX c=1 sm=1 tr=0 ts=69679d4a cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VExx-Oqz_yhFp4n2Ql0A:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: hwZ9tXDMFJRqIxELI_pULaOgOZ2NZZ0G X-Proofpoint-ORIG-GUID: hwZ9tXDMFJRqIxELI_pULaOgOZ2NZZ0G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 clxscore=1030 malwarescore=0 mlxscore=0 spamscore=0 phishscore=0 mlxlogscore=963 adultscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABOWCIyzu580eol8PGb5Rb+swz+4snP7RsDMkURaKm4pa05vyck/1w0AwyjPqYG5RV+LFDCsm4g+Cdby4vLRLrgWzKSRQgfioRHF7/Xz3hHtU6w8Ix1i9kFF/UEIZ9+YrHXXoqfK1EQu+w+OYZiscB1NlFFtJyw521HdDt3Fg8c5FVWhdymEb3c/tqtfb9t7V3cmTglUqptMPgm8W906L5+MtXv4zYD0TUEifktg+2gcPN12/dL6jaSlG1+30ddES2QU4BphPSmEAHu5lngC90dfUGwQbO/by3689i/9PKV137ndgOE761vsrD0GyVk+9RGQFGIeViPdqMO+ocNO4Zyj9RIa6fsppz1Z/VSFZ6eUnxtb+hyhvam7ObHm5wJZ4iuP6hvboSyYY3Hv6UMLa1C3JHSA0areAWrWMOzEJeSc9cPgdBs/UIrKIF+ssWNqUcYJyu+r9KVm9d+jFf/fgzx9/Ro5njqkSsG/hj/abopMxmHtNo0xx0h5y6/GBC4TtDRuK1jlQIZ/9L6zMdF8/I0ttTeXYvcqOqx98qNolwTz94oJJ/LUpA7FJgzKnifkCrQLzXCs6nMozmo/T1Gb7Uuormi+kEFMspn8tUqhTxZAF5DDxr4jc8Xxm/p7+mlp+UPXuC9nr6XBqY8I9pyjLwisxGVCYr25Abrj0SgdQ1NQGzL3cof2By3QPHt0N1X9kYMiWX9DdmN7nxFU62J4zyz6MSx1JsPriMleWAl0DnJtIEbZ/hZHvmHxYAYHLwNpcLS54CCoQPSepfA++h45gwROKR1YE0RZzjst2SNyqG0NY49PWoCDEboCz+3N5woc1bMUyKOs8jcpFgAq5DTyNPwU/9qdasvl9tRJeaRpxCFrDTfKyFYlt22WhvuDXoJEjX2DbDlrnGPKecIC9q8e0wDdSTN9s= 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 (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.77.211; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398174355158500 Content-Type: text/plain; charset="utf-8" winhvemulation is x86_64 only. In the future, we might want to get rid of winhvemulation usage entirely. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 14 ++++++++++++-- include/system/whpx-common.h | 2 ++ include/system/whpx-internal.h | 7 ++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 0a6068fdde..c58344cb61 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -37,7 +37,9 @@ bool whpx_allowed; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; +#ifdef HOST_X86_64 static HMODULE hWinHvEmulation; +#endif =20 struct whpx_state whpx_global; struct WHPDispatch whp_dispatch; @@ -232,8 +234,10 @@ void whpx_destroy_vcpu(CPUState *cpu) struct whpx_state *whpx =3D &whpx_global; =20 whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); +#ifdef HOST_X86_64 AccelCPUState *vcpu =3D cpu->accel; whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); +#endif g_free(cpu->accel); } =20 @@ -408,8 +412,12 @@ static bool load_whp_dispatch_fns(HMODULE *handle, LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) break; case WINHV_EMULATION_FNS_DEFAULT: +#ifdef HOST_X86_64 WHP_LOAD_LIB(WINHV_EMULATION_DLL, hLib) LIST_WINHVEMULATION_FUNCTIONS(WHP_LOAD_FIELD) +#else + g_assert_not_reached(); +#endif break; case WINHV_PLATFORM_FNS_SUPPLEMENTAL: WHP_LOAD_LIB(WINHV_PLATFORM_DLL, hLib) @@ -535,11 +543,11 @@ bool init_whp_dispatch(void) if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { goto error; } - +#ifdef HOST_X86_64 if (!load_whp_dispatch_fns(&hWinHvEmulation, WINHV_EMULATION_FNS_DEFAU= LT)) { goto error; } - +#endif assert(load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_SUPPLEMENTAL)); whp_dispatch_initialized =3D true; @@ -549,9 +557,11 @@ error: if (hWinHvPlatform) { FreeLibrary(hWinHvPlatform); } +#ifdef HOST_X86_64 if (hWinHvEmulation) { FreeLibrary(hWinHvEmulation); } +#endif return false; } =20 diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index e549c7539c..8f171d1397 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -3,7 +3,9 @@ #define SYSTEM_WHPX_COMMON_H =20 struct AccelCPUState { +#ifdef HOST_X86_64 WHV_EMULATOR_HANDLE emulator; +#endif bool window_registered; bool interruptable; bool ready_for_pic_interrupt; diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 041fa958b4..609d0e1c08 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -4,8 +4,9 @@ =20 #include #include +#ifdef HOST_X86_64 #include - +#endif #include "hw/i386/apic.h" #include "exec/vaddr.h" =20 @@ -101,12 +102,16 @@ void whpx_apic_get(APICCommonState *s); =20 /* Define function typedef */ LIST_WINHVPLATFORM_FUNCTIONS(WHP_DEFINE_TYPE) +#ifdef HOST_X86_64 LIST_WINHVEMULATION_FUNCTIONS(WHP_DEFINE_TYPE) +#endif LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_DEFINE_TYPE) =20 struct WHPDispatch { LIST_WINHVPLATFORM_FUNCTIONS(WHP_DECLARE_MEMBER) +#ifdef HOST_X86_64 LIST_WINHVEMULATION_FUNCTIONS(WHP_DECLARE_MEMBER) +#endif LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL(WHP_DECLARE_MEMBER) }; =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398272; cv=none; d=zohomail.com; s=zohoarc; b=OvN2CyLu3vTN06LYa5YI9i5Mj3hZcW5lvPI+ThCQpQ5eQjgExg+XuDqMq7YaTFJuivAoHzJaaVF1pGOkt8K47JFk8Oi2Zk5l/Iip6dC4tRTE/YfDgjjWq0dJil8D7DQbo0u1YjXNNIkNeH22R+yWP+oM+aVH2uBBC6zUH9vv+jg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398272; 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=usn+5WRKOGJaDLoRmA1S0SGx2PVU5yWwDmjw2JCpvZ4=; b=F0qbUbJOhH47fo3mLVuYXVtggsSvP7NoyHSyklv/ahgRU+0XQ9j5IxiehyFBBxFq1zuv9NN+lj0juC2p1QitlxsNRDankO/v7fwGwN9UmZh6ZQQkh1tIhHVmvgo0haW9xMKwgZcD6Pn0tZW8UQWU/Rs3yJw0XQpfxKBWUS4T3fY= 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 1768398272560814.5039431830572; Wed, 14 Jan 2026 05:44:32 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg194-00083o-Qg; Wed, 14 Jan 2026 08:42:46 -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 1vg192-000822-TB for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:44 -0500 Received: from p-east2-cluster5-host7-snip4-3.eps.apple.com ([57.103.79.26] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg191-0007R9-5Q for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:44 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 100AD1800160; Wed, 14 Jan 2026 13:42:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id B13C01800334; Wed, 14 Jan 2026 13:42:32 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=usn+5WRKOGJaDLoRmA1S0SGx2PVU5yWwDmjw2JCpvZ4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ITjG/MEW/k7t1dmFCTlErglavB0qp83KIgy3dryNpqowS8+ZOAyNSTTG7UbVs3DPiR/45lpnhHfAqFxU8zQFbNcIRKkGXwMwebZNT2zM5K7HoTZmyZcjWc0585ONBcuEi4J1tnzS/YLEy1Oi6b1FPaZ+tpycc2LhcW7l8++7h3/NJj3zNnouvDSCINY+YcikqVhkB6D2H3tiG5LYlAUbyVkor9DOf6Mol/ZyreimQ4MSwelbn7kL9kCzQuuzVzrMp26hR0uRz8zxzUKfq9frEBzzg+wBrRBDNFUwO3lZDg4K44ACeYA4ooEzW/2TO4Mb45QhK9DFc5+oNTNJxaxogQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 12/26] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Date: Wed, 14 Jan 2026 14:41:29 +0100 Message-ID: <20260114134143.26198-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: Su8mb2hJMuwDjy8YI0t06e7fG-KO47oz X-Proofpoint-GUID: Su8mb2hJMuwDjy8YI0t06e7fG-KO47oz X-Authority-Info: v=2.4 cv=UcpciaSN c=1 sm=1 tr=0 ts=69679d50 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2psWIPzlEfUqwKpUe20A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX5tzOwaQBl+LW k6uz7n7ju+BC/XFyHxKyXQA/yLxPBqFpZFgb++9Akn+npk75ErVhTnPRbMzVrhf8mBS2k7eLCYh A4zRg/2paF4Cr7cKgWLe5MH8B/O3GtApEC60nJvST8+DlG87O4n2sFCzvByH2JmK0WbZc33hhx/ MZ0HJEMuC4ksnhFaK7PEdsVEkuwUNMjaMRAQrBvDA3fCqECtIuWOU1CvhSnGtGKLk8Dv4qkMLh/ JDWc8v5y62SNlARUAE/5zZYZVqBNxZ0x+av92ssMxPpkYjwEbixIKD+We1YaUHyKqasbZ1GztH0 BfFunifHlESZ0vZhtAU X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 phishscore=0 bulkscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABQJTFM2EEXgUXzvDUwB34vZtSS776B37Zyw+JE//10mYT6vxyA7f4s3E1rlIZYgEvsQAJt2eg+Ldo6lyiD40/6X570i8xGpphIb18dyQH3djw4Cus+pa/o3/I+UrcrPh1dZhEViWpvZzXK1mRKQXOGDmSM8Y9gIdQylfMM0pbBNkXsx8lRx92rMltjDL53T3yn4PnEztWSMBlyQumcpuEqRV0EuKLnxxYHI4Atd1Bi3SET1bR+lizn0bHPByhQIhlHjpveCEl4YbyvMLBiNoSgsOxvEuBdG11J1i87pTF6XpQqvdjE0ZGkY5qiexa+Yxvvc/7wTT1/qotGO4KPzlldx8IpfWj22HxwBwhszy5h3Li2ZN+bhpOCBNC4Bww90rCMOIG8x4nCgGOJlT5E6xguevEyu7eLUA2+joVQge7Ov64DETZN+CBGEFDZ9YJX/XAZtAnD7K7NXQ2dpHQXkI+E6vpk34DfXrjtqtyS06LDWCRp6MpxM2OxSkNe+qr8EaBCdtGqI0MGaYUO7LEI5kwI5xICIn5HI0+wgWJv4m7k0PioIkvv3LIaiwdoiHTrXrMSuyHZud9yi/7HBacbQDEWM0SFpppBfpIXjDU8qxQyNhtnphakLRsR8L8i5FFP2XiW3wGGdc0MHOfYuthdXnLHKFhnBehCuidFMPAOqRFj3EF0Xzt3ONAZQ/1QkbcW96iZLa8x6JTUOnbjUNQR7l7Ac7RFI91nMhLeelxOr15FPqnRmv/Bx4AUkkcF769NlTrl//3EVZeqqJTst1qXCkhO1LWQFhpYNdMEloOAsFpgR30MHJLQ6A2sOywIkCvC5cTKneaI7b+hthaTLbnrrD2eM9DJHD5rn0H+mLqGugOgZxKGbzX0Zh8GwwJT+5XztihxpB25fdbrbsRjGzgjvzzsoPAp1qFwuRS4LLifGSiTPl+Sg== 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 (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.79.26; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398274365158500 Content-Type: text/plain; charset="utf-8" As of why: WHPX on arm64 doesn't have debug trap support as of today. Keep the exception bitmap interface for now - despite that being entirely u= navailable on arm64 too. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 2 +- include/system/whpx-common.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index c58344cb61..c0610815d9 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -119,7 +119,7 @@ int whpx_first_vcpu_starting(CPUState *cpu) * have one or more breakpoints enabled. Both require intercepting * the WHvX64ExceptionTypeBreakpointTrap exception. */ - exception_mask =3D 1UL << WHvX64ExceptionTypeDebugTrapOrFault; + exception_mask =3D 1UL << WHPX_INTERCEPT_DEBUG_TRAPS; } else { /* Let the guest handle all exceptions. */ exception_mask =3D 0; diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index 8f171d1397..b86fe9db6e 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -20,4 +20,7 @@ int whpx_first_vcpu_starting(CPUState *cpu); int whpx_last_vcpu_stopping(CPUState *cpu); void whpx_memory_init(void); struct whpx_breakpoint *whpx_lookup_breakpoint_by_addr(uint64_t address); + +/* On x64: same as WHvX64ExceptionTypeDebugTrapOrFault */ +#define WHPX_INTERCEPT_DEBUG_TRAPS 1 #endif --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398227; cv=none; d=zohomail.com; s=zohoarc; b=luj2Uh2cgKFEaWu4Mb2xvxKMswzilPeHxigtGFv8cF7mZ16NcvCHq6FrsNP6JZn72RBvlF6ApfEJtYoygM/9+qfq+ZHIkWR+49sn8zvakVu6IlF6udVUC+3iZcWw8/MWT1SgQO/OXwIulmZJBkVhyHISSE1g8M0MBkjw+01PNj0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398227; 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=hnr/l3fVCXOwiitRXS2ohIqOEeTiZCS04hRdJTWOeH0=; b=UqQeYh7zssJZTWgsPcpTTSFL3mSN4K9spDL8fMaCBYAswjSglIZzdVbyjqHUKBX9LY2NUEDt+2YO2TYuqAJIjyyFaxEDuOV8Z7guYpgrkbtCinqDzZYEdBrQdCkP0/o1Xs1KJpiQa69BglChbgUZ3k2Anu32Bj+8iDQwWjfasJQ= 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 1768398226851955.040751402775; Wed, 14 Jan 2026 05:43:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg198-0008CC-Qv; Wed, 14 Jan 2026 08:42:50 -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 1vg196-00088W-SL for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:48 -0500 Received: from p-east2-cluster5-host3-snip4-1.eps.apple.com ([57.103.79.44] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg194-0007eR-Uj for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:48 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 7D8D118004BB; Wed, 14 Jan 2026 13:42:41 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 60CD118004A8; Wed, 14 Jan 2026 13:42:36 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hnr/l3fVCXOwiitRXS2ohIqOEeTiZCS04hRdJTWOeH0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=GK4QbPOEPEGPUCG/5kcH4u1NOQCpcXtWXdizQXPkZUS2Dn4raCg+OF/ryDfjrYXvUSW/7YwhHmIjgVx+dVL1zd2SbIM+oX0FgosYRtsqE7ui95eRxJCE1Nd4tEFXnNLi4oJXsfT3NnosjWnRrcBevFYkrQeoPre+sC67yUADTZTlR3zGADHuRaw34kMpV050oK1VnRvxqAlgEjRycgGVrtI5cJyZGcmi91W+Al3ta5317qEg0UBAcV5rMSZgRmu6GAJxQdFfzwjFYc4UHI7ewC5XsQZMr0jZOzB+I1Srzmzvz/tN4TxIWOmSwW+nx4AF9Il4oDej7hxHS/3KMDvczg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 13/26] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Date: Wed, 14 Jan 2026 14:41:30 +0100 Message-ID: <20260114134143.26198-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX4H6RNMSYG1LR e7Ii0UUBrDRTWpUDs9nHQUw8tsiJ70v8BLhMz1c1VEZePxrst27MMmTLRy5YwoXkC1Vk+IXfkxi E4JiGmdkV+W+RvSyCbHTRiMreALq7nN7L4bvzM+askwvG+7n5JlytA2bXuLUwkCMmC2q709ttHC y2xMj2rjR5MzS0czkFwoRZaa3YoxTcY8dn1G6HFwJ76NPw4VUFcO82Qepi/mjDZiKR4sc+Sq6qe DQV3EEYXnQHnfGFAoa6aa4IUKBx+4Q7mVHy0SYqMj2F3QzKSAAx/SL/d/rq3YOAOjoFtkXxw09B rL2eW6va+iB2Yt0wytl X-Authority-Info: v=2.4 cv=EKwLElZC c=1 sm=1 tr=0 ts=69679d54 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ogbMO5OAvhA2mBZm2BUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: MVHAXOWeyqqHVKX5V-C8o1DzPxQz9xY- X-Proofpoint-GUID: MVHAXOWeyqqHVKX5V-C8o1DzPxQz9xY- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 malwarescore=0 phishscore=0 clxscore=1030 mlxlogscore=999 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABgysQ7rImMUOnHtW02lkiKgEe+3xGyhxOGZ1P/IA3XQ4LtZXP4COBlc/FyH3zKVx3ZD8jzGmaAHJZm6WW7/uUG1nMZh0/fRRF3zKJOnyOKl/gAcPu9PbzYyuhZXvu1vp56c3N+ylm14aQvcVM7WuQYjUADilsaF7Whtz1p3NeGAjZkF49j1ShiDMK43wN+n8AAgsPz2v+KIUeT8jk515vzI+GgMKRcN6e6MCs2bv4NiXpQtmkW5ojJKJASEjlnQo6bMkrS3s9Ir7JhOJAE4X1YyC7LeHvHtjlNDUOE+Bx1hY9O57ZXxf8UvqnBVkGwVB8kLbdsQu9zGBedkcq7bW/zix9gKsGKgjeRq+3c2jrlA0t2pil/Ksrh4FboL5OBl0/O6TS2G4h46NhcsxDxF9j7m8S1+0c3nh+vwWRWXFsHOCTNEBkn3pFkmnrVjyx97/rlHhPXEuwCc4U4BOQgmrvfNMXYNZW942JWAwD0tO6ERjMP5d1mU9S+TcvPjU/Kg1R7xVx71S7TwO4qkWVK26/tka0bgeV08wvvUY9NSzZiTa2Dma+k7csHGsjeEcYVqWPVDxGrr9Bsz2hYdgOh3rfim5Dha3fvi1MRJLeFO9sVJM1Z/kaVasamIQ9I4zuFAT5j7OLbt8TFoIzXQDs6nEpMXkVr6WIEHLnaWhPTgbF5tKFpS2RfkBhkVEGtFS9vECHs8LleniwbVoDIVWovh4yWeSq1Ps1SP6I1XQOCBf5YXd/0g7pksIPhrEvqsdZIkbaGolZQnb1FonDRZ0fuO+kRAF0n4dT2QepJ0bsRGh932CHxZ9g992kheDrI7/qHfbM0G5IMoyg7aP56zHJshI7YD59Wu1POpb2a7aJcuC3RtcNl9RjtmC1HdR4J9cd56ZcFFJu6zYdt6DAI/3eX0akq1iHtmE4ppP7rz+n 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 (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.79.44; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398228081158500 Content-Type: text/plain; charset="utf-8" Change terminology to match the KVM one, as APIC is x86-specific. And move out whpx_irqchip_in_kernel() to make it usable from common code even when not compiling with WHPX support. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/stubs/whpx-stub.c | 1 + accel/whpx/whpx-accel-ops.c | 2 +- accel/whpx/whpx-common.c | 10 +--------- hw/i386/x86-cpu.c | 4 ++-- include/system/whpx-internal.h | 1 - include/system/whpx.h | 5 +++-- target/i386/cpu-apic.c | 2 +- target/i386/whpx/whpx-all.c | 14 +++++++------- 8 files changed, 16 insertions(+), 23 deletions(-) diff --git a/accel/stubs/whpx-stub.c b/accel/stubs/whpx-stub.c index c564c89fd0..4529dc4f78 100644 --- a/accel/stubs/whpx-stub.c +++ b/accel/stubs/whpx-stub.c @@ -10,3 +10,4 @@ #include "system/whpx.h" =20 bool whpx_allowed; +bool whpx_irqchip_in_kernel; diff --git a/accel/whpx/whpx-accel-ops.c b/accel/whpx/whpx-accel-ops.c index c84a25c273..50fadea0fd 100644 --- a/accel/whpx/whpx-accel-ops.c +++ b/accel/whpx/whpx-accel-ops.c @@ -78,7 +78,7 @@ static void whpx_kick_vcpu_thread(CPUState *cpu) =20 static bool whpx_vcpu_thread_is_idle(CPUState *cpu) { - return !whpx_apic_in_platform(); + return !whpx_irqchip_in_kernel(); } =20 static void whpx_accel_ops_class_init(ObjectClass *oc, const void *data) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index c0610815d9..05f9e520b7 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -35,6 +35,7 @@ #include =20 bool whpx_allowed; +bool whpx_irqchip_in_kernel; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; #ifdef HOST_X86_64 @@ -488,15 +489,6 @@ static const TypeInfo whpx_cpu_accel_type =3D { .abstract =3D true, }; =20 -/* - * Partition support - */ - -bool whpx_apic_in_platform(void) -{ - return whpx_global.apic_in_platform; -} - static void whpx_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); diff --git a/hw/i386/x86-cpu.c b/hw/i386/x86-cpu.c index 276f2b0cdf..95e08e3c2a 100644 --- a/hw/i386/x86-cpu.c +++ b/hw/i386/x86-cpu.c @@ -45,7 +45,7 @@ static void pic_irq_request(void *opaque, int irq, int le= vel) =20 trace_x86_pic_interrupt(irq, level); if (cpu_is_apic_enabled(cpu->apic_state) && !kvm_irqchip_in_kernel() && - !whpx_apic_in_platform()) { + !whpx_irqchip_in_kernel()) { CPU_FOREACH(cs) { cpu =3D X86_CPU(cs); if (apic_accept_pic_intr(cpu->apic_state)) { @@ -71,7 +71,7 @@ int cpu_get_pic_interrupt(CPUX86State *env) X86CPU *cpu =3D env_archcpu(env); int intno; =20 - if (!kvm_irqchip_in_kernel() && !whpx_apic_in_platform()) { + if (!kvm_irqchip_in_kernel() && !whpx_irqchip_in_kernel()) { intno =3D apic_get_interrupt(cpu->apic_state); if (intno >=3D 0) { return intno; diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 609d0e1c08..8ded54a39b 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -45,7 +45,6 @@ struct whpx_state { =20 bool kernel_irqchip_allowed; bool kernel_irqchip_required; - bool apic_in_platform; }; =20 extern struct whpx_state whpx_global; diff --git a/include/system/whpx.h b/include/system/whpx.h index 00f6a3e523..4217a27e91 100644 --- a/include/system/whpx.h +++ b/include/system/whpx.h @@ -25,11 +25,12 @@ =20 #ifdef CONFIG_WHPX_IS_POSSIBLE extern bool whpx_allowed; +extern bool whpx_irqchip_in_kernel; #define whpx_enabled() (whpx_allowed) -bool whpx_apic_in_platform(void); +#define whpx_irqchip_in_kernel() (whpx_irqchip_in_kernel) #else /* !CONFIG_WHPX_IS_POSSIBLE */ #define whpx_enabled() 0 -#define whpx_apic_in_platform() (0) +#define whpx_irqchip_in_kernel() (0) #endif /* !CONFIG_WHPX_IS_POSSIBLE */ =20 #endif /* QEMU_WHPX_H */ diff --git a/target/i386/cpu-apic.c b/target/i386/cpu-apic.c index eeee62b52a..50a2b8ae86 100644 --- a/target/i386/cpu-apic.c +++ b/target/i386/cpu-apic.c @@ -32,7 +32,7 @@ APICCommonClass *apic_get_class(Error **errp) apic_type =3D "kvm-apic"; } else if (xen_enabled()) { apic_type =3D "xen-apic"; - } else if (whpx_apic_in_platform()) { + } else if (whpx_irqchip_in_kernel()) { apic_type =3D "whpx-apic"; } =20 diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 052cda42bf..8210250dc3 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -607,7 +607,7 @@ void whpx_get_registers(CPUState *cpu) hr); } =20 - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { /* * Fetch the TPR value from the emulated APIC. It may get overwrit= ten * below with the value from CR8 returned by @@ -749,7 +749,7 @@ void whpx_get_registers(CPUState *cpu) =20 assert(idx =3D=3D RTL_NUMBER_OF(whpx_register_names)); =20 - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { whpx_apic_get(x86_cpu->apic_state); } =20 @@ -1379,7 +1379,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) } =20 /* Get pending hard interruption or replay one that was overwritten */ - if (!whpx_apic_in_platform()) { + if (!whpx_irqchip_in_kernel()) { if (!vcpu->interruption_pending && vcpu->interruptable && (env->eflags & IF_MASK)) { assert(!new_int.InterruptionPending); @@ -1553,7 +1553,7 @@ int whpx_vcpu_run(CPUState *cpu) =20 if (exclusive_step_mode =3D=3D WHPX_STEP_NONE) { whpx_vcpu_process_async_events(cpu); - if (cpu->halted && !whpx_apic_in_platform()) { + if (cpu->halted && !whpx_irqchip_in_kernel()) { cpu->exception_index =3D EXCP_HLT; qatomic_set(&cpu->exit_request, false); return 0; @@ -1642,7 +1642,7 @@ int whpx_vcpu_run(CPUState *cpu) break; =20 case WHvRunVpExitReasonX64ApicEoi: - assert(whpx_apic_in_platform()); + assert(whpx_irqchip_in_kernel()); ioapic_eoi_broadcast(vcpu->exit_ctx.ApicEoi.InterruptVector); break; =20 @@ -2187,7 +2187,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } } else { - whpx->apic_in_platform =3D true; + whpx_irqchip_in_kernel =3D true; } } =20 @@ -2196,7 +2196,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) prop.ExtendedVmExits.X64MsrExit =3D 1; prop.ExtendedVmExits.X64CpuidExit =3D 1; prop.ExtendedVmExits.ExceptionExit =3D 1; - if (whpx_apic_in_platform()) { + if (whpx_irqchip_in_kernel()) { prop.ExtendedVmExits.X64ApicInitSipiExitTrap =3D 1; } =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398228; cv=none; d=zohomail.com; s=zohoarc; b=mnl2+BMOec4OuZsOFEyfNspKJip0srBgoKHdgYeYUjknSXdtA9pPNelGF2R57yUmSBgp9Jpf/R5sVGUakz33ELzjZEy/CjJVlJtQ9j8NLn/LSKqXI9XiChWzyg4ZUb5wp+geRppOXOVm3JDMhD1yjfV0/Fs8G6CLmIOjOerFLyc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398228; 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=AoWxv9TNhzoutu922ssGxV20pQRdMFPOFvsGyLS06Gs=; b=LB5vFo1WQ844xM0w/Lm7IKXJ2usq8LUL6UYIqcvytle2d3Cp7pXCoAhX9YMPhAmBbUyYSmFPec4v/uEAhE/Q7kbmo2LibvTmhDxKB320aRLuNMgWFAPDAkgP+ICYOgvYxqraK4fX5iDQzZjxjjlpLbM62cXu+6gayKYui2yaG1o= 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 1768398228515413.51593516973867; Wed, 14 Jan 2026 05:43:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19N-0000rg-Lc; Wed, 14 Jan 2026 08:43:05 -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 1vg19F-0000Xk-O1 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:58 -0500 Received: from p-east2-cluster5-host12-snip4-10.eps.apple.com ([57.103.79.83] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19A-0007oz-Rj for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:42:55 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 4EC1E18004B9; Wed, 14 Jan 2026 13:42:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 31C4918004AE; Wed, 14 Jan 2026 13:42:41 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=AoWxv9TNhzoutu922ssGxV20pQRdMFPOFvsGyLS06Gs=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=N85g2jRlgHD5AWwh3vrlpCkYZmRM2enchQVASP1xJU0vQPcsRDOdj9Ibt3LDIu62XntaQMYpD7KoH2OONwxTqV01lXUa0prL3YAzAL/+PKopOSH7heHAZL900v/try8y7oLmLnSRpakgcT+6ERnRiqTZexUPIYBHmIVsLvJaI5Upv6vgkiKbSFC68G/0BBSdaTU2ZdDECc+O4wpfoymqKFZhw6D3D2pIPPnbiT9aFLeLpSo3Bldslr/F9PPLTzya0yHjhMp5FKs26XqcLAImve3IWyn7Ia/uA0VhBfly7xiL2tjlHf26JvsrznxXK+kasIhgKliSGBzdT6LHXDxEBA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 14/26] whpx: interrupt controller support Date: Wed, 14 Jan 2026 14:41:31 +0100 Message-ID: <20260114134143.26198-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX960+73oQmuik vlfcggFbGyy+rofg3Dg0yiCxUR4WwOVsnoVDGmUQbz/vNNvS0fJbtZaFDeZN7G39+LHvqjXZ5MK r06EOYv4gWOZ2u9adVuDqiX51mJWFY2HGyRhENbrfZ+CCnBkZQIFBmi4K8J+WMDEvjKOGgF0hYK ng/tlmAhZzVzbpK7QEl5kwmknASNjvUR8psMqRTMing7INkMbDnsm+UCX3za0FaFJlOD+tcdNng UQO+CHQ3e+B+TllotE8VZ4DBEGGzy8hd3hUY4uouhokjv6JCqz4GFl+ED1q8EsrhANXEZ6P5Q93 EYMoCjf3QC5m5oQdGYk X-Proofpoint-GUID: 6hbIul24lQ-UcK7ohxSJDYAifpNLVNIn X-Proofpoint-ORIG-GUID: 6hbIul24lQ-UcK7ohxSJDYAifpNLVNIn X-Authority-Info: v=2.4 cv=N90k1m9B c=1 sm=1 tr=0 ts=69679d5a cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=flZNgbgI_Ya0FyYah8EA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 spamscore=0 suspectscore=0 malwarescore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAB4ggaq257ZTK1qfWLOCcWeizvCWLu0zqQREsqXmI/uCw5j8tFuNosB0RfRmRJYn2qlTl4kiO4thGTXn47Xo66KtENmvMKcI+acxLxUjINdFw/JDL7HAcYbYzQOPpjSwPZjRdsq41aK+1xXNXPR1SD82uomgtIrrK/72T1Rk7HmnrGnqlVpg1vaFFUB9sZTkF9GRc4p3jz/oNtF2mENrzYzMD4q5l+vOx/R6/JFB0U76TBSCgCqTnCj8fEduVjEAA/QGjoSJ788wGyiLgp5C6Xgu7V1myO/U0/mym45hvn/AUzu982tDicfyvAH4flQai6AopWDB1Cnnm6b+NF4afkWrbErlb3XW0VYpisB68p3shMo22fb+RbenWDTdFmzeYgKuR8RCFFmK7pYy4JnsXc5bzESnJJRygoBftKyJynYCFnr4Pagt4WR9SvaRgQvkiEpQPa2+Lp4GtanQiLD4DNFFr/eDYE+5CSFNkaSi+nONsw8+zcl+DnZ6kFzxHGnvBJYfcgnpEercn61Zwb3iOnzasbclZYxH3ZWu+bNQ6wuOKtZBFagG9PnzPStWnD8gAb04hofqF3xQ3K+GgUH4JaXLSvPJ2EiZONPTg9doA2oJ3CsjOrhzFKvGwCN57iBj5ei1gmiKhpS6ksfVJJuCkQPVcE8H8HnwMMX/dF+6/4umoEHtjwiDGHh8pAJVJ5hnzEVkMxWS65Y+wJAb1q9as3B9R6hiAewEOhB8bPomfoYDhyryNzYcJYxhCD8ZpLtGRyQ5h6ZZjNwaPmIMOKMR3SnzS7GLua/dx5Oh8TfEsv1nAn3UM5ubNn4P2mTEHWaflMGKbV5vUB/yMfCYaBlDx1/zwTqrm0mtwhNMlauW4OyV7bpwXKE1saKaQ8RLRduuD5gbmZKqTMyWGbbv55RlKVFeYF7jNVczuuS0pSYEI= 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 (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.79.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398230206158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt.c | 3 + hw/intc/arm_gicv3_common.c | 3 + hw/intc/arm_gicv3_whpx.c | 239 +++++++++++++++++++++++++++++ hw/intc/meson.build | 1 + include/hw/intc/arm_gicv3_common.h | 3 + 5 files changed, 249 insertions(+) create mode 100644 hw/intc/arm_gicv3_whpx.c diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 0e84ccd82c..128a226a27 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -49,6 +49,7 @@ #include "system/tcg.h" #include "system/kvm.h" #include "system/hvf.h" +#include "system/whpx.h" #include "system/qtest.h" #include "system/system.h" #include "hw/core/loader.h" @@ -2117,6 +2118,8 @@ static void finalize_gic_version(VirtMachineState *vm= s) /* KVM w/o kernel irqchip can only deal with GICv2 */ gics_supported |=3D VIRT_GIC_VERSION_2_MASK; 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()) { gics_supported |=3D VIRT_GIC_VERSION_2_MASK; if (module_object_class_by_name("arm-gicv3")) { diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 0a2e5a3e2f..9054143ea7 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -32,6 +32,7 @@ #include "gicv3_internal.h" #include "hw/arm/linux-boot-if.h" #include "system/kvm.h" +#include "system/whpx.h" =20 =20 static void gicv3_gicd_no_migration_shift_bug_post_load(GICv3State *cs) @@ -663,6 +664,8 @@ const char *gicv3_class_name(void) { if (kvm_irqchip_in_kernel()) { return "kvm-arm-gicv3"; + } else if (whpx_enabled()) { + return TYPE_WHPX_GICV3; } else { if (kvm_enabled()) { error_report("Userspace GICv3 is not supported with KVM"); diff --git a/hw/intc/arm_gicv3_whpx.c b/hw/intc/arm_gicv3_whpx.c new file mode 100644 index 0000000000..f34f841a4a --- /dev/null +++ b/hw/intc/arm_gicv3_whpx.c @@ -0,0 +1,239 @@ +/* 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/whpx.h" +#include "system/whpx-internal.h" +#include "gicv3_internal.h" +#include "vgic_common.h" +#include "qom/object.h" +#include "target/arm/cpregs.h" + +#include "hw/arm/bsa.h" +#include +#include +#include + +struct WHPXARMGICv3Class { + ARMGICv3CommonClass parent_class; + DeviceRealize parent_realize; + ResettablePhases parent_phases; +}; + +OBJECT_DECLARE_TYPE(GICv3State, WHPXARMGICv3Class, WHPX_GICV3) + +/* TODO: Implement GIC state save-restore */ +static void whpx_gicv3_check(GICv3State *s) +{ +} + +static void whpx_gicv3_put(GICv3State *s) +{ + whpx_gicv3_check(s); +} + +static void whpx_gicv3_get(GICv3State *s) +{ +} + +static void whpx_gicv3_set_irq(void *opaque, int irq, int level) +{ + struct whpx_state *whpx =3D &whpx_global; + + GICv3State *s =3D opaque; + if (irq > s->num_irq) { + return; + } + + WHV_INTERRUPT_CONTROL interrupt_control =3D { + .InterruptControl.InterruptType =3D WHvArm64InterruptTypeFixed, + .RequestedVector =3D GIC_INTERNAL + irq, + .InterruptControl.Asserted =3D level + }; + + whp_dispatch.WHvRequestInterrupt(whpx->partition, &interrupt_control, + sizeof(interrupt_control)); +} + +static void whpx_gicv3_icc_reset(CPUARMState *env, const ARMCPRegInfo *ri) +{ + GICv3State *s; + GICv3CPUState *c; + + c =3D env->gicv3state; + s =3D c->gic; + + 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)); + + if (s->migration_blocker) { + return; + } + + c->icc_ctlr_el1[GICV3_S] =3D c->icc_ctlr_el1[GICV3_NS]; +} + +static void whpx_gicv3_reset_hold(Object *obj, ResetType type) +{ + GICv3State *s =3D ARM_GICV3_COMMON(obj); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_GET_CLASS(s); + + if (kgc->parent_phases.hold) { + kgc->parent_phases.hold(obj, type); + } + + whpx_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 whpx_gicv3_icc_reset, + }, +}; + +static void whpx_set_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_gicv3_realize(DeviceState *dev, Error **errp) +{ + ERRP_GUARD(); + GICv3State *s =3D WHPX_GICV3(dev); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_GET_CLASS(s); + Error *local_err =3D NULL; + int i; + + kgc->parent_realize(dev, &local_err); + if (local_err) { + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + return; + } + + 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 WHPX"); + error_append_hint(errp, "A maximum of %d VCPUs can be used", + s->redist_region_count[0]); + return; + } + + gicv3_init_irqs_and_mmio(s, whpx_gicv3_set_irq, NULL); + + for (i =3D 0; i < s->num_cpu; i++) { + CPUState *cpu_state =3D qemu_get_cpu(i); + ARMCPU *cpu =3D ARM_CPU(cpu_state); + WHV_REGISTER_VALUE val =3D {.Reg64 =3D 0x080A0000 + (GICV3_REDIST_= SIZE * i)}; + whpx_set_reg(cpu_state, WHvArm64RegisterGicrBaseGpa, val); + define_arm_cp_regs(cpu, gicv3_cpuif_reginfo); + } + + if (s->maint_irq) { + error_setg(errp, "Nested virtualisation not currently supported by= WHPX."); + return; + } +} + +static void whpx_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); + WHPXARMGICv3Class *kgc =3D WHPX_GICV3_CLASS(klass); + + agcc->pre_save =3D whpx_gicv3_get; + agcc->post_load =3D whpx_gicv3_put; + + device_class_set_parent_realize(dc, whpx_gicv3_realize, + &kgc->parent_realize); + resettable_class_set_parent_phases(rc, NULL, whpx_gicv3_reset_hold, NU= LL, + &kgc->parent_phases); +} + +static const TypeInfo whpx_arm_gicv3_info =3D { + .name =3D TYPE_WHPX_GICV3, + .parent =3D TYPE_ARM_GICV3_COMMON, + .instance_size =3D sizeof(GICv3State), + .class_init =3D whpx_gicv3_class_init, + .class_size =3D sizeof(WHPXARMGICv3Class), +}; + +static void whpx_gicv3_register_types(void) +{ + type_register_static(&whpx_arm_gicv3_info); +} + +type_init(whpx_gicv3_register_types) diff --git a/hw/intc/meson.build b/hw/intc/meson.build index faae20b93d..96742df090 100644 --- a/hw/intc/meson.build +++ b/hw/intc/meson.build @@ -41,6 +41,7 @@ specific_ss.add(when: 'CONFIG_APIC', if_true: files('apic= .c', 'apic_common.c')) arm_common_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif_= common.c')) 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_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 3d24ad22d2..c55cf18120 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -313,6 +313,9 @@ typedef struct ARMGICv3CommonClass ARMGICv3CommonClass; DECLARE_OBJ_CHECKERS(GICv3State, ARMGICv3CommonClass, ARM_GICV3_COMMON, TYPE_ARM_GICV3_COMMON) =20 +/* Types for GICv3 kernel-irqchip */ +#define TYPE_WHPX_GICV3 "whpx-arm-gicv3" + struct ARMGICv3CommonClass { /*< private >*/ SysBusDeviceClass parent_class; --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398427; cv=none; d=zohomail.com; s=zohoarc; b=bQn6JF0YysTuhn0PX0HrtAo5vDBXLhH1bENLNXua8KE3e5GAW522/TRBk8cXa3PYTAlL1O2gHz1TVdjqoBPvK/gwJ0m1RQlQWpSi88VBpROxt2T954dMhc53YT4Y1pW0fKGlQPSgH7i3Qioi7C+bwvx2Gkdi1awKAURMiY2D6Bw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398427; 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=mR3PJeVaQ0egL2+AOPmViXMRbolp5hOP+/rTbwPtJEk=; b=mQfW9Q18/3fzHk5aBqWna/Disr1d7nn4NaHNL36z6f6ZL1fdCqdSFeyjGKSSGfr/1Du+m17OqEjXnyBisL9rryYFwTcHIXetUpzq+hXNp/UAkvaJN0mSMDibsR1Ui6hd4/b1/iT4BccEl/vAdBoregw0FZnUW4+jAyJFfctn8cU= 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 176839842747645.26926169668661; Wed, 14 Jan 2026 05:47:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19O-0000yv-Ll; Wed, 14 Jan 2026 08:43:06 -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 1vg19J-0000lT-LM for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:03 -0500 Received: from p-east2-cluster5-host12-snip4-10.eps.apple.com ([57.103.79.83] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19F-0007tc-FM for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:00 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id A49E01800741; Wed, 14 Jan 2026 13:42:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id A90591800315; Wed, 14 Jan 2026 13:42:46 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=mR3PJeVaQ0egL2+AOPmViXMRbolp5hOP+/rTbwPtJEk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=SipCVMIi8AiQ5qgIVVGVINyeByp+/B+16g/r03RSALcTFIt9ZFHMILNecAmb37vkkK8l+KekCqbofP9H6cBJnIWJ24ydyIEzqqmBVXTwicDA0kwdJwVXrdEtslS5dmI8mBlR7X0l0U1ITIyzqRZRwCmV7LCyijk20xwFU7eHCaZw40+8Venr8x1GgAXfo6OOeTLk2vGNOK5fh7eNQZ/xqDpPIKQjlKGo2ivTfo2nA11GP5vzvZb6y3AR4sBHmk7gPS5h5FJ4n586J+XIlp0SY30x2/GQCN0S6rnDYUrvinpT+s5RNJNnHpxV0Ceesx5dEhuF/A0yLy3Du5+ed/mq8A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani Subject: [PATCH v14 15/26] whpx: add arm64 support Date: Wed, 14 Jan 2026 14:41:32 +0100 Message-ID: <20260114134143.26198-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: rnvp4Q3wOyHe8vEg3cdS2-4zyKKqnFeo X-Proofpoint-GUID: rnvp4Q3wOyHe8vEg3cdS2-4zyKKqnFeo X-Authority-Info: v=2.4 cv=UcpciaSN c=1 sm=1 tr=0 ts=69679d5e cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=7SW9J7SZZjhvT-K8fPQA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX9ad/xpO39Eqp 1M2eLmna15JBG2+f0V+0/cr9xieOx84kMxflj9sJtMFYDTtPmPyrnMn/lmu2F6R/9K9OtM6rtPp lcEkPrMjKMUNFg/Y3VeZ9MLjy0ykp8mOtgg8FfaZf6AOcqWMEgFe/KnWYXuzwRLpao7/CS4pmIC 42UjnydOGRzlRJuG9KSPvMMCiwBOCV23LhVLWE0xnfd4kR+3LbxyGWpizMEvcA4KABrr40KovDK CbnUQcbKMbrDH0qO+/Eix2JNVQk3X8mhSE/8vNUrk9Yivgfqjfj72sTkwPqme657UohtaTFSN/j 6bZoJQ8dzqH/MBdfP18 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 phishscore=0 bulkscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABdgr6wo3HCuqSPigvpCdrpDPitaUHQ9t/sMxFanJy1JvknvZBQu/WWFgBReXAu1/O5rXJAL5A+YD3qJOmfMR8/13cT83UQwNzNRcdHCZBQ8iSckQwFcfuHikjaozPDOQU41NANhF+GE/RIJa3jret86gzJBYiOvaed5uMS2+kIa3h9wRd/pmGMYcMjX/5Tofp3P3F4gxsEvAcOYFUOYsym+dEiggsUGolO1gCW+DUlEyjs32DlrlnGZxd4qcQ0boOUPp6+C8fH13opoeKKGW/Jp5MEfRgqcalLn5BCBPSGW7Sf1Ig/4pFgQjpltBxIYU4NMHCDI3o5AeIJ8OT9COzuy2+mLV6Fq18P1O7OA7pjNUVUOaNb+DM0lq/v4lVn1bmiCZbbFWK0YLbklAY7NrUM7DBFaB2qygMjpMHXVGaRebWHJTonK+0X255azAmTV7H6nHJUwcbZC0KNpyXM9xpFEKJ97jiOKEDTtjC+4/xIz8/8UxoexYOer+q9c2Rlibktex9e13KlRzfqvm9dhac/roVO9mJWGBfPPzNknktmZL9fD3ju6FKfmHkHCkJvLilTEXLRN/E2yCNab5Lkw5v3anibIxdCka0TuzyKaobUs6DMff4dyAa5Mb/PUXxd0XfIpvjZZxjCaiC7pgU2RxfMiE6p6rTlU51M1mvZzvwJ9+C0amFhfSeLYSycR6l4npUu2mQCicEFh6r5MGV73C1s2iUp7d9rYV+yHdKiks5UMF5+wrDYqh2Bo5Psv+/1GBLYIsc+2jCGHhaQKt0VuhUpBTqEHaHTan/j/zr1OEA+RQ0/OlF5xRkuIrfxFubs1PpKEKREwcoqrQKKqO76iDrQCuygRGHpgy26HIvQfeqakNP1+RBCWY9JOigiM3bWGUzCRI/QXqpY8TJ8VAnC32Lxs4okw== 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 (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.79.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398429250158501 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 1 + target/arm/meson.build | 1 + target/arm/whpx/meson.build | 3 + target/arm/whpx/whpx-all.c | 815 ++++++++++++++++++++++++++++++++++++ 4 files changed, 820 insertions(+) create mode 100644 target/arm/whpx/meson.build create mode 100644 target/arm/whpx/whpx-all.c diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 05f9e520b7..827f50f3e0 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -12,6 +12,7 @@ #include "gdbstub/helpers.h" #include "qemu/accel.h" #include "accel/accel-ops.h" +#include "system/memory.h" #include "system/whpx.h" #include "system/cpus.h" #include "system/runstate.h" diff --git a/target/arm/meson.build b/target/arm/meson.build index 462c71148d..ce155ba9b4 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -59,6 +59,7 @@ arm_common_system_ss.add(files( )) =20 subdir('hvf') +subdir('whpx') =20 if 'CONFIG_TCG' in config_all_accel subdir('tcg') diff --git a/target/arm/whpx/meson.build b/target/arm/whpx/meson.build new file mode 100644 index 0000000000..1de2ef0283 --- /dev/null +++ b/target/arm/whpx/meson.build @@ -0,0 +1,3 @@ +arm_system_ss.add(when: 'CONFIG_WHPX', if_true: files( + 'whpx-all.c', +)) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c new file mode 100644 index 0000000000..62fda15597 --- /dev/null +++ b/target/arm/whpx/whpx-all.c @@ -0,0 +1,815 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Windows Hypervisor Platform accelerator (WHPX) + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "system/address-spaces.h" +#include "system/ioport.h" +#include "gdbstub/helpers.h" +#include "qemu/accel.h" +#include "accel/accel-ops.h" +#include "system/whpx.h" +#include "system/cpus.h" +#include "system/runstate.h" +#include "qemu/main-loop.h" +#include "hw/core/boards.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "qapi/qapi-types-common.h" +#include "qapi/qapi-visit-common.h" +#include "migration/blocker.h" +#include "accel/accel-cpu-target.h" +#include + +#include "syndrome.h" +#include "cpu.h" +#include "target/arm/cpregs.h" +#include "internals.h" + +#include "system/whpx-internal.h" +#include "system/whpx-accel-ops.h" +#include "system/whpx-all.h" +#include "system/whpx-common.h" +#include "hw/arm/bsa.h" +#include "arm-powerctl.h" + +#include +#include + +struct whpx_reg_match { + WHV_REGISTER_NAME reg; + uint64_t offset; +}; + +static const struct whpx_reg_match whpx_reg_match[] =3D { + { WHvArm64RegisterX0, offsetof(CPUARMState, xregs[0]) }, + { WHvArm64RegisterX1, offsetof(CPUARMState, xregs[1]) }, + { WHvArm64RegisterX2, offsetof(CPUARMState, xregs[2]) }, + { WHvArm64RegisterX3, offsetof(CPUARMState, xregs[3]) }, + { WHvArm64RegisterX4, offsetof(CPUARMState, xregs[4]) }, + { WHvArm64RegisterX5, offsetof(CPUARMState, xregs[5]) }, + { WHvArm64RegisterX6, offsetof(CPUARMState, xregs[6]) }, + { WHvArm64RegisterX7, offsetof(CPUARMState, xregs[7]) }, + { WHvArm64RegisterX8, offsetof(CPUARMState, xregs[8]) }, + { WHvArm64RegisterX9, offsetof(CPUARMState, xregs[9]) }, + { WHvArm64RegisterX10, offsetof(CPUARMState, xregs[10]) }, + { WHvArm64RegisterX11, offsetof(CPUARMState, xregs[11]) }, + { WHvArm64RegisterX12, offsetof(CPUARMState, xregs[12]) }, + { WHvArm64RegisterX13, offsetof(CPUARMState, xregs[13]) }, + { WHvArm64RegisterX14, offsetof(CPUARMState, xregs[14]) }, + { WHvArm64RegisterX15, offsetof(CPUARMState, xregs[15]) }, + { WHvArm64RegisterX16, offsetof(CPUARMState, xregs[16]) }, + { WHvArm64RegisterX17, offsetof(CPUARMState, xregs[17]) }, + { WHvArm64RegisterX18, offsetof(CPUARMState, xregs[18]) }, + { WHvArm64RegisterX19, offsetof(CPUARMState, xregs[19]) }, + { WHvArm64RegisterX20, offsetof(CPUARMState, xregs[20]) }, + { WHvArm64RegisterX21, offsetof(CPUARMState, xregs[21]) }, + { WHvArm64RegisterX22, offsetof(CPUARMState, xregs[22]) }, + { WHvArm64RegisterX23, offsetof(CPUARMState, xregs[23]) }, + { WHvArm64RegisterX24, offsetof(CPUARMState, xregs[24]) }, + { WHvArm64RegisterX25, offsetof(CPUARMState, xregs[25]) }, + { WHvArm64RegisterX26, offsetof(CPUARMState, xregs[26]) }, + { WHvArm64RegisterX27, offsetof(CPUARMState, xregs[27]) }, + { WHvArm64RegisterX28, offsetof(CPUARMState, xregs[28]) }, + { WHvArm64RegisterFp, offsetof(CPUARMState, xregs[29]) }, + { WHvArm64RegisterLr, offsetof(CPUARMState, xregs[30]) }, + { WHvArm64RegisterPc, offsetof(CPUARMState, pc) }, +}; + +static const struct whpx_reg_match whpx_fpreg_match[] =3D { + { WHvArm64RegisterQ0, offsetof(CPUARMState, vfp.zregs[0]) }, + { WHvArm64RegisterQ1, offsetof(CPUARMState, vfp.zregs[1]) }, + { WHvArm64RegisterQ2, offsetof(CPUARMState, vfp.zregs[2]) }, + { WHvArm64RegisterQ3, offsetof(CPUARMState, vfp.zregs[3]) }, + { WHvArm64RegisterQ4, offsetof(CPUARMState, vfp.zregs[4]) }, + { WHvArm64RegisterQ5, offsetof(CPUARMState, vfp.zregs[5]) }, + { WHvArm64RegisterQ6, offsetof(CPUARMState, vfp.zregs[6]) }, + { WHvArm64RegisterQ7, offsetof(CPUARMState, vfp.zregs[7]) }, + { WHvArm64RegisterQ8, offsetof(CPUARMState, vfp.zregs[8]) }, + { WHvArm64RegisterQ9, offsetof(CPUARMState, vfp.zregs[9]) }, + { WHvArm64RegisterQ10, offsetof(CPUARMState, vfp.zregs[10]) }, + { WHvArm64RegisterQ11, offsetof(CPUARMState, vfp.zregs[11]) }, + { WHvArm64RegisterQ12, offsetof(CPUARMState, vfp.zregs[12]) }, + { WHvArm64RegisterQ13, offsetof(CPUARMState, vfp.zregs[13]) }, + { WHvArm64RegisterQ14, offsetof(CPUARMState, vfp.zregs[14]) }, + { WHvArm64RegisterQ15, offsetof(CPUARMState, vfp.zregs[15]) }, + { WHvArm64RegisterQ16, offsetof(CPUARMState, vfp.zregs[16]) }, + { WHvArm64RegisterQ17, offsetof(CPUARMState, vfp.zregs[17]) }, + { WHvArm64RegisterQ18, offsetof(CPUARMState, vfp.zregs[18]) }, + { WHvArm64RegisterQ19, offsetof(CPUARMState, vfp.zregs[19]) }, + { WHvArm64RegisterQ20, offsetof(CPUARMState, vfp.zregs[20]) }, + { WHvArm64RegisterQ21, offsetof(CPUARMState, vfp.zregs[21]) }, + { WHvArm64RegisterQ22, offsetof(CPUARMState, vfp.zregs[22]) }, + { WHvArm64RegisterQ23, offsetof(CPUARMState, vfp.zregs[23]) }, + { WHvArm64RegisterQ24, offsetof(CPUARMState, vfp.zregs[24]) }, + { WHvArm64RegisterQ25, offsetof(CPUARMState, vfp.zregs[25]) }, + { WHvArm64RegisterQ26, offsetof(CPUARMState, vfp.zregs[26]) }, + { WHvArm64RegisterQ27, offsetof(CPUARMState, vfp.zregs[27]) }, + { WHvArm64RegisterQ28, offsetof(CPUARMState, vfp.zregs[28]) }, + { WHvArm64RegisterQ29, offsetof(CPUARMState, vfp.zregs[29]) }, + { WHvArm64RegisterQ30, offsetof(CPUARMState, vfp.zregs[30]) }, + { WHvArm64RegisterQ31, offsetof(CPUARMState, vfp.zregs[31]) }, +}; + +struct whpx_sreg_match { + WHV_REGISTER_NAME reg; + uint32_t key; + bool global; + uint32_t cp_idx; +}; + +static struct whpx_sreg_match whpx_sreg_match[] =3D { + { WHvArm64RegisterDbgbvr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr0El1, ENCODE_AA64_CP_REG(0, 0, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr0El1, ENCODE_AA64_CP_REG(0, 1, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr2El1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr3El1, ENCODE_AA64_CP_REG(0, 3, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr4El1, ENCODE_AA64_CP_REG(0, 4, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr5El1, ENCODE_AA64_CP_REG(0, 5, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr6El1, ENCODE_AA64_CP_REG(0, 6, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr7El1, ENCODE_AA64_CP_REG(0, 7, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr8El1, ENCODE_AA64_CP_REG(0, 8, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr9El1, ENCODE_AA64_CP_REG(0, 9, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr10El1, ENCODE_AA64_CP_REG(0, 10, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr11El1, ENCODE_AA64_CP_REG(0, 11, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr12El1, ENCODE_AA64_CP_REG(0, 12, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr13El1, ENCODE_AA64_CP_REG(0, 13, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr14El1, ENCODE_AA64_CP_REG(0, 14, 2, 0, 7) }, + + { WHvArm64RegisterDbgbvr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 4) }, + { WHvArm64RegisterDbgbcr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 5) }, + { WHvArm64RegisterDbgwvr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 6) }, + { WHvArm64RegisterDbgwcr15El1, ENCODE_AA64_CP_REG(0, 15, 2, 0, 7) }, +#ifdef SYNC_NO_RAW_REGS + /* + * The registers below are manually synced on init because they are + * marked as NO_RAW. We still list them to make number space sync easi= er. + */ + { WHvArm64RegisterMidrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 0, 0) }, + { WHvArm64RegisterMpidrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 0, 5) }, + { WHvArm64RegisterIdPfr0El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 0) }, +#endif + { WHvArm64RegisterIdAa64Pfr1El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 1), tr= ue }, + { WHvArm64RegisterIdAa64Dfr0El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 0), tr= ue }, + { WHvArm64RegisterIdAa64Dfr1El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 1), tr= ue }, + { WHvArm64RegisterIdAa64Isar0El1, ENCODE_AA64_CP_REG(0, 6, 3, 0, 0), t= rue }, + { WHvArm64RegisterIdAa64Isar1El1, ENCODE_AA64_CP_REG(0, 6, 3, 0, 1), t= rue }, +#ifdef SYNC_NO_MMFR0 + /* We keep the hardware MMFR0 around. HW limits are there anyway */ + { WHvArm64RegisterIdAa64Mmfr0El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 0) }, +#endif + { WHvArm64RegisterIdAa64Mmfr1El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 1), t= rue }, + { WHvArm64RegisterIdAa64Mmfr2El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 2), t= rue }, + { WHvArm64RegisterIdAa64Mmfr3El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 3), t= rue }, + + { WHvArm64RegisterMdscrEl1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 2) }, + { WHvArm64RegisterSctlrEl1, ENCODE_AA64_CP_REG(1, 0, 3, 0, 0) }, + { WHvArm64RegisterCpacrEl1, ENCODE_AA64_CP_REG(1, 0, 3, 0, 2) }, + { WHvArm64RegisterTtbr0El1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 0) }, + { WHvArm64RegisterTtbr1El1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 1) }, + { WHvArm64RegisterTcrEl1, ENCODE_AA64_CP_REG(2, 0, 3, 0, 2) }, + + { WHvArm64RegisterApiAKeyLoEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 0) }, + { WHvArm64RegisterApiAKeyHiEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 1) }, + { WHvArm64RegisterApiBKeyLoEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 2) }, + { WHvArm64RegisterApiBKeyHiEl1, ENCODE_AA64_CP_REG(2, 1, 3, 0, 3) }, + { WHvArm64RegisterApdAKeyLoEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 0) }, + { WHvArm64RegisterApdAKeyHiEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 1) }, + { WHvArm64RegisterApdBKeyLoEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 2) }, + { WHvArm64RegisterApdBKeyHiEl1, ENCODE_AA64_CP_REG(2, 2, 3, 0, 3) }, + { WHvArm64RegisterApgAKeyLoEl1, ENCODE_AA64_CP_REG(2, 3, 3, 0, 0) }, + { WHvArm64RegisterApgAKeyHiEl1, ENCODE_AA64_CP_REG(2, 3, 3, 0, 1) }, + + { WHvArm64RegisterSpsrEl1, ENCODE_AA64_CP_REG(4, 0, 3, 0, 0) }, + { WHvArm64RegisterElrEl1, ENCODE_AA64_CP_REG(4, 0, 3, 0, 1) }, + { WHvArm64RegisterSpEl1, ENCODE_AA64_CP_REG(4, 1, 3, 0, 0) }, + { WHvArm64RegisterEsrEl1, ENCODE_AA64_CP_REG(5, 2, 3, 0, 0) }, + { WHvArm64RegisterFarEl1, ENCODE_AA64_CP_REG(6, 0, 3, 0, 0) }, + { WHvArm64RegisterParEl1, ENCODE_AA64_CP_REG(7, 4, 3, 0, 0) }, + { WHvArm64RegisterMairEl1, ENCODE_AA64_CP_REG(10, 2, 3, 0, 0) }, + { WHvArm64RegisterVbarEl1, ENCODE_AA64_CP_REG(12, 0, 3, 0, 0) }, + { WHvArm64RegisterContextidrEl1, ENCODE_AA64_CP_REG(13, 0, 3, 0, 1) }, + { WHvArm64RegisterTpidrEl1, ENCODE_AA64_CP_REG(13, 0, 3, 0, 4) }, + { WHvArm64RegisterCntkctlEl1, ENCODE_AA64_CP_REG(14, 1, 3, 0, 0) }, + { WHvArm64RegisterCsselrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 2, 0) }, + { WHvArm64RegisterTpidrEl0, ENCODE_AA64_CP_REG(13, 0, 3, 3, 2) }, + { WHvArm64RegisterTpidrroEl0, ENCODE_AA64_CP_REG(13, 0, 3, 3, 3) }, + { WHvArm64RegisterCntvCtlEl0, ENCODE_AA64_CP_REG(14, 3, 3, 3, 1) }, + { WHvArm64RegisterCntvCvalEl0, ENCODE_AA64_CP_REG(14, 3, 3, 3, 2) }, + { WHvArm64RegisterSpEl1, ENCODE_AA64_CP_REG(4, 1, 3, 4, 0) }, +}; + +static void flush_cpu_state(CPUState *cpu) +{ + if (cpu->vcpu_dirty) { + whpx_set_registers(cpu, WHPX_SET_RUNTIME_STATE); + cpu->vcpu_dirty =3D false; + } +} + +HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) +{ + if (exceptions !=3D 0) { + return E_NOTIMPL; + } + return ERROR_SUCCESS; +} +void whpx_apply_breakpoints( + struct whpx_breakpoint_collection *breakpoints, + CPUState *cpu, + bool resuming) +{ + +} +void whpx_translate_cpu_breakpoints( + struct whpx_breakpoints *breakpoints, + CPUState *cpu, + int cpu_breakpoint_count) +{ + +} + +static void whpx_get_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE* val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + flush_cpu_state(cpu); + + hr =3D whp_dispatch.WHvGetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to get register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_set_reg(CPUState *cpu, WHV_REGISTER_NAME reg, WHV_REGISTE= R_VALUE val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, c= pu->cpu_index, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_get_global_reg(WHV_REGISTER_NAME reg, WHV_REGISTER_VALUE = *val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + + hr =3D whp_dispatch.WHvGetVirtualProcessorRegisters(whpx->partition, W= HV_ANY_VP, + ®, 1, val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to get register %08x, hr=3D%08lx", reg,= hr); + } +} + +static void whpx_set_global_reg(WHV_REGISTER_NAME reg, WHV_REGISTER_VALUE = val) +{ + struct whpx_state *whpx =3D &whpx_global; + HRESULT hr; + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters(whpx->partition, W= HV_ANY_VP, + ®, 1, &val); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set register %08x, hr=3D%08lx", reg,= hr); + } +} + +static uint64_t whpx_get_gp_reg(CPUState *cpu, int rt) +{ + assert(rt <=3D 31); + if (rt =3D=3D 31) { + return 0; + } + WHV_REGISTER_NAME reg =3D WHvArm64RegisterX0 + rt; + WHV_REGISTER_VALUE val; + whpx_get_reg(cpu, reg, &val); + + return val.Reg64; +} + +static void whpx_set_gp_reg(CPUState *cpu, int rt, uint64_t val) +{ + assert(rt < 31); + WHV_REGISTER_NAME reg =3D WHvArm64RegisterX0 + rt; + WHV_REGISTER_VALUE reg_val =3D {.Reg64 =3D val}; + + whpx_set_reg(cpu, reg, reg_val); +} + +static int whpx_handle_mmio(CPUState *cpu, WHV_MEMORY_ACCESS_CONTEXT *ctx) +{ + uint64_t syndrome =3D ctx->Syndrome; + + bool isv =3D syndrome & ARM_EL_ISV; + bool iswrite =3D (syndrome >> 6) & 1; + bool sse =3D (syndrome >> 21) & 1; + uint32_t sas =3D (syndrome >> 22) & 3; + uint32_t len =3D 1 << sas; + uint32_t srt =3D (syndrome >> 16) & 0x1f; + uint32_t cm =3D (syndrome >> 8) & 0x1; + uint64_t val =3D 0; + + assert(!cm); + assert(isv); + + if (iswrite) { + val =3D whpx_get_gp_reg(cpu, srt); + address_space_write(&address_space_memory, + ctx->Gpa, + MEMTXATTRS_UNSPECIFIED, &val, len); + } else { + address_space_read(&address_space_memory, + ctx->Gpa, + MEMTXATTRS_UNSPECIFIED, &val, len); + if (sse) { + val =3D sextract64(val, 0, len * 8); + } + whpx_set_gp_reg(cpu, srt, val); + } + + return 0; +} + +static void whpx_psci_cpu_off(ARMCPU *arm_cpu) +{ + int32_t ret =3D arm_set_cpu_off(arm_cpu_mp_affinity(arm_cpu)); + assert(ret =3D=3D QEMU_ARM_POWERCTL_RET_SUCCESS); +} + +int whpx_vcpu_run(CPUState *cpu) +{ + HRESULT hr; + struct whpx_state *whpx =3D &whpx_global; + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + AccelCPUState *vcpu =3D cpu->accel; + int ret; + + + g_assert(bql_locked()); + + if (whpx->running_cpus++ =3D=3D 0) { + ret =3D whpx_first_vcpu_starting(cpu); + if (ret !=3D 0) { + return ret; + } + } + + bql_unlock(); + + + cpu_exec_start(cpu); + do { + bool advance_pc =3D false; + if (cpu->vcpu_dirty) { + whpx_set_registers(cpu, WHPX_SET_RUNTIME_STATE); + cpu->vcpu_dirty =3D false; + } + + if (qatomic_read(&cpu->exit_request)) { + whpx_vcpu_kick(cpu); + } + + hr =3D whp_dispatch.WHvRunVirtualProcessor( + whpx->partition, cpu->cpu_index, + &vcpu->exit_ctx, sizeof(vcpu->exit_ctx)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to exec a virtual processor," + " hr=3D%08lx", hr); + ret =3D -1; + break; + } + + switch (vcpu->exit_ctx.ExitReason) { + case WHvRunVpExitReasonGpaIntercept: + case WHvRunVpExitReasonUnmappedGpa: + advance_pc =3D true; + + if (vcpu->exit_ctx.MemoryAccess.Syndrome & BIT(8)) { + error_report("WHPX: cached access to unmapped memory" + "Pc =3D 0x%llx Gva =3D 0x%llx Gpa =3D 0x%llx", + vcpu->exit_ctx.MemoryAccess.Header.Pc, + vcpu->exit_ctx.MemoryAccess.Gpa, + vcpu->exit_ctx.MemoryAccess.Gva); + break; + } + + ret =3D whpx_handle_mmio(cpu, &vcpu->exit_ctx.MemoryAccess); + break; + case WHvRunVpExitReasonCanceled: + cpu->exception_index =3D EXCP_INTERRUPT; + ret =3D 1; + break; + case WHvRunVpExitReasonArm64Reset: + switch (vcpu->exit_ctx.Arm64Reset.ResetType) { + case WHvArm64ResetTypePowerOff: + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN= ); + break; + case WHvArm64ResetTypeReboot: + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + break; + default: + g_assert_not_reached(); + } + bql_lock(); + if (arm_cpu->power_state !=3D PSCI_OFF) { + whpx_psci_cpu_off(arm_cpu); + } + bql_unlock(); + break; + case WHvRunVpExitReasonNone: + case WHvRunVpExitReasonUnrecoverableException: + case WHvRunVpExitReasonInvalidVpRegisterValue: + case WHvRunVpExitReasonUnsupportedFeature: + default: + error_report("WHPX: Unexpected VP exit code 0x%08x", + vcpu->exit_ctx.ExitReason); + whpx_get_registers(cpu); + bql_lock(); + qemu_system_guest_panicked(cpu_get_crash_info(cpu)); + bql_unlock(); + break; + } + if (advance_pc) { + WHV_REGISTER_VALUE pc; + + flush_cpu_state(cpu); + pc.Reg64 =3D vcpu->exit_ctx.MemoryAccess.Header.Pc + 4; + whpx_set_reg(cpu, WHvArm64RegisterPc, pc); + } + } while (!ret); + + cpu_exec_end(cpu); + + bql_lock(); + current_cpu =3D cpu; + + if (--whpx->running_cpus =3D=3D 0) { + whpx_last_vcpu_stopping(cpu); + } + + qatomic_set(&cpu->exit_request, false); + + return ret < 0; +} + +static void clean_whv_register_value(WHV_REGISTER_VALUE *val) +{ + memset(val, 0, sizeof(WHV_REGISTER_VALUE)); +} + +void whpx_get_registers(CPUState *cpu) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + WHV_REGISTER_VALUE val; + int i; + + for (i =3D 0; i < ARRAY_SIZE(whpx_reg_match); i++) { + whpx_get_reg(cpu, whpx_reg_match[i].reg, &val); + *(uint64_t *)((char *)env + whpx_reg_match[i].offset) =3D val.Reg6= 4; + } + + for (i =3D 0; i < ARRAY_SIZE(whpx_fpreg_match); i++) { + whpx_get_reg(cpu, whpx_reg_match[i].reg, &val); + memcpy((char *)env + whpx_fpreg_match[i].offset, &val, sizeof(val.= Reg128)); + } + + whpx_get_reg(cpu, WHvArm64RegisterPc, &val); + env->pc =3D val.Reg64; + + whpx_get_reg(cpu, WHvArm64RegisterFpcr, &val); + vfp_set_fpcr(env, val.Reg32); + + whpx_get_reg(cpu, WHvArm64RegisterFpsr, &val); + vfp_set_fpsr(env, val.Reg32); + + whpx_get_reg(cpu, WHvArm64RegisterPstate, &val); + pstate_write(env, val.Reg32); + + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + if (whpx_sreg_match[i].global) { + /* WHP disallows us from accessing global regs as a vCPU */ + whpx_get_global_reg(whpx_sreg_match[i].reg, &val); + } else { + whpx_get_reg(cpu, whpx_sreg_match[i].reg, &val); + } + arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx] =3D val.Reg64; + } + + assert(write_list_to_cpustate(arm_cpu)); + aarch64_restore_sp(env, arm_current_el(env)); +} + +void whpx_set_registers(CPUState *cpu, int level) +{ + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + WHV_REGISTER_VALUE val; + clean_whv_register_value(&val); + int i; + + assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); + + for (i =3D 0; i < ARRAY_SIZE(whpx_reg_match); i++) { + val.Reg64 =3D *(uint64_t *)((char *)env + whpx_reg_match[i].offset= ); + whpx_set_reg(cpu, whpx_reg_match[i].reg, val); + } + + for (i =3D 0; i < ARRAY_SIZE(whpx_fpreg_match); i++) { + memcpy(&val.Reg128, (char *)env + whpx_fpreg_match[i].offset, size= of(val.Reg128)); + whpx_set_reg(cpu, whpx_reg_match[i].reg, val); + } + + clean_whv_register_value(&val); + val.Reg64 =3D env->pc; + whpx_set_reg(cpu, WHvArm64RegisterPc, val); + + clean_whv_register_value(&val); + val.Reg32 =3D vfp_get_fpcr(env); + whpx_set_reg(cpu, WHvArm64RegisterFpcr, val); + val.Reg32 =3D vfp_get_fpsr(env); + whpx_set_reg(cpu, WHvArm64RegisterFpsr, val); + val.Reg32 =3D pstate_read(env); + whpx_set_reg(cpu, WHvArm64RegisterPstate, val); + + aarch64_save_sp(env, arm_current_el(env)); + + assert(write_cpustate_to_list(arm_cpu, false)); + + /* Currently set global regs every time. */ + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + val.Reg64 =3D arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx]; + if (whpx_sreg_match[i].global) { + /* WHP disallows us from accessing global regs as a vCPU */ + whpx_set_global_reg(whpx_sreg_match[i].reg, val); + } else { + whpx_set_reg(cpu, whpx_sreg_match[i].reg, val); + } + } +} + +static uint32_t max_vcpu_index; + +static void whpx_cpu_update_state(void *opaque, bool running, RunState sta= te) +{ +} + +int whpx_init_vcpu(CPUState *cpu) +{ + HRESULT hr; + struct whpx_state *whpx =3D &whpx_global; + ARMCPU *arm_cpu =3D ARM_CPU(cpu); + CPUARMState *env =3D &arm_cpu->env; + int ret; + + uint32_t sregs_match_len =3D ARRAY_SIZE(whpx_sreg_match); + uint32_t sregs_cnt =3D 0; + WHV_REGISTER_VALUE val; + int i; + + hr =3D whp_dispatch.WHvCreateVirtualProcessor( + whpx->partition, cpu->cpu_index, 0); + if (FAILED(hr)) { + error_report("WHPX: Failed to create a virtual processor," + " hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + /* Assumption that CNTFRQ_EL0 is the same between the VMM and the part= ition. */ + asm volatile("mrs %0, cntfrq_el0" : "=3Dr"(arm_cpu->gt_cntfrq_hz)); + + cpu->vcpu_dirty =3D true; + cpu->accel =3D g_new0(AccelCPUState, 1); + max_vcpu_index =3D MAX(max_vcpu_index, cpu->cpu_index); + qemu_add_vm_change_state_handler(whpx_cpu_update_state, env); + + env->aarch64 =3D true; + + /* Allocate enough space for our sysreg sync */ + arm_cpu->cpreg_indexes =3D g_renew(uint64_t, arm_cpu->cpreg_indexes, + sregs_match_len); + arm_cpu->cpreg_values =3D g_renew(uint64_t, arm_cpu->cpreg_values, + sregs_match_len); + arm_cpu->cpreg_vmstate_indexes =3D g_renew(uint64_t, + arm_cpu->cpreg_vmstate_indexe= s, + sregs_match_len); + arm_cpu->cpreg_vmstate_values =3D g_renew(uint64_t, + arm_cpu->cpreg_vmstate_values, + sregs_match_len); + + memset(arm_cpu->cpreg_values, 0, sregs_match_len * sizeof(uint64_t)); + + /* Populate cp list for all known sysregs */ + for (i =3D 0; i < sregs_match_len; i++) { + const ARMCPRegInfo *ri; + uint32_t key =3D whpx_sreg_match[i].key; + + ri =3D get_arm_cp_reginfo(arm_cpu->cp_regs, key); + if (ri) { + assert(!(ri->type & ARM_CP_NO_RAW)); + whpx_sreg_match[i].cp_idx =3D sregs_cnt; + arm_cpu->cpreg_indexes[sregs_cnt++] =3D cpreg_to_kvm_id(key); + } else { + whpx_sreg_match[i].cp_idx =3D -1; + } + } + arm_cpu->cpreg_array_len =3D sregs_cnt; + arm_cpu->cpreg_vmstate_array_len =3D sregs_cnt; + + assert(write_cpustate_to_list(arm_cpu, false)); + + /* Set CP_NO_RAW system registers on init */ + val.Reg64 =3D arm_cpu->midr; + whpx_set_reg(cpu, WHvArm64RegisterMidrEl1, + val); + + clean_whv_register_value(&val); + + val.Reg64 =3D deposit64(arm_cpu->mp_affinity, 31, 1, 1 /* RES1 */); + whpx_set_reg(cpu, WHvArm64RegisterMpidrEl1, val); + + return 0; + +error: + return ret; +} + +void whpx_cpu_instance_init(CPUState *cs) +{ +} + +int whpx_accel_init(AccelState *as, MachineState *ms) +{ + struct whpx_state *whpx; + int ret; + HRESULT hr; + WHV_CAPABILITY whpx_cap; + UINT32 whpx_cap_size; + WHV_PARTITION_PROPERTY prop; + WHV_CAPABILITY_FEATURES features; + + whpx =3D &whpx_global; + /* on arm64 Windows Hypervisor Platform, vGICv3 always used */ + whpx_irqchip_in_kernel =3D true; + + if (!init_whp_dispatch()) { + ret =3D -ENOSYS; + goto error; + } + + whpx->mem_quota =3D ms->ram_size; + + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodeHypervisorPresent, &whpx_cap, + sizeof(whpx_cap), &whpx_cap_size); + if (FAILED(hr) || !whpx_cap.HypervisorPresent) { + error_report("WHPX: No accelerator found, hr=3D%08lx", hr); + ret =3D -ENOSPC; + goto error; + } + + memset(&features, 0, sizeof(features)); + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodeFeatures, &features, sizeof(features), NULL); + if (FAILED(hr)) { + error_report("WHPX: Failed to query capabilities, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + if (!features.Arm64Support) { + error_report("WHPX: host OS exposing pre-release WHPX implementati= on. " + "Please update your operating system to at least build 26100.3= 915"); + ret =3D -EINVAL; + goto error; + } + + hr =3D whp_dispatch.WHvCreatePartition(&whpx->partition); + if (FAILED(hr)) { + error_report("WHPX: Failed to create partition, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + memset(&prop, 0, sizeof(prop)); + prop.ProcessorCount =3D ms->smp.cpus; + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeProcessorCount, + &prop, + sizeof(prop)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set partition processor count to %u," + " hr=3D%08lx", prop.ProcessorCount, hr); + ret =3D -EINVAL; + goto error; + } + + if (!whpx->kernel_irqchip_allowed) { + error_report("WHPX: on Arm, only kernel-irqchip=3Don is currently = supported"); + ret =3D -EINVAL; + goto error; + } + + memset(&prop, 0, sizeof(prop)); + + hr =3D whp_dispatch.WHvSetupPartition(whpx->partition); + if (FAILED(hr)) { + error_report("WHPX: Failed to setup partition, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + + whpx_memory_init(); + + return 0; + +error: + if (whpx->partition !=3D NULL) { + whp_dispatch.WHvDeletePartition(whpx->partition); + whpx->partition =3D NULL; + } + + return ret; +} --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398430; cv=none; d=zohomail.com; s=zohoarc; b=OkymxT405UVn2r2SWl3B7wzB7meDMJYEDfc5Ty/OhW68gDH1JGalSvtShssS7CYf7UPRLpxnoaI1cTxgeBJlzBmshBZq3kaivtggazg9d6ROJP8YaXOoE5RKJr1HTcbwwgZEr6LeakafeZqTXm8BK8KSqIbNgZu3euz2m9qeu+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398430; 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=F9oLyg/qgYRJ/JZV5dNJO6abkXMsGF/lMhk1P5D4R60=; b=GdSC72Ul+ljeSGKceJnmoSeOjmwPjRqs+tGgoROR8fRgqheZnpn69FCK7zGQsVkSfemCxZqSW9H/QnPJXW5H6tcbeaYnvXd1KpJ08Q1/Al7czY3QE8fkQMTPYXgL7rHj/IZD/kT04rPj+R0Y3MsSgeagBiDtNGd5mwwfLOCop4s= 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 1768398430635107.28157415963653; Wed, 14 Jan 2026 05:47:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19P-00012o-51; Wed, 14 Jan 2026 08:43:07 -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 1vg19N-0000rG-G8 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:05 -0500 Received: from p-east2-cluster5-host9-snip4-2.eps.apple.com ([57.103.79.105] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19L-00085K-78 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:04 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 510861800499; Wed, 14 Jan 2026 13:42:55 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id DA92D1800498; Wed, 14 Jan 2026 13:42:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=F9oLyg/qgYRJ/JZV5dNJO6abkXMsGF/lMhk1P5D4R60=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=O4+uEOaSqJ54hV8Z8Jed76yZLjrm1E5BZzNphkD0dli8kh8wHm2E6y8/7SXKRLeQK/9XqtPx+IpXXzx4tq6KeYTmL+9og3w7whoKfjDYqoUwArwGx5626LIY6KWzB+sIZRYK2HQ3KlKxHV1PrUnEmw54iDYOUJtYVn9UEqXgs+ahh8k0vwTViAbyJGhN2qhNIU4W7leBOQcBmkN2KX3JXjJ4fFTvbgtMDWlgx9R0gNbUKb4JBSrZD2Dg8S4RT/3VBjgewe3nNSUrY4R2R5HKxe9y6EoWOm1ngnLVocHXVeSgF2gpU6smfs9OoUKiaQBwMWUN2f4rrCvK9ufnnB9Fgw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 16/26] whpx: change memory management logic Date: Wed, 14 Jan 2026 14:41:33 +0100 Message-ID: <20260114134143.26198-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX9DkWNfA3NUBL dpTwxZZTZih5xOEPtB0PJTNF4D4wpf1lKx8VFpk29NOkOBefvfz+VQKyv6renEofs+0AihsRj2x W7Oj6SojaY1k09I9tXQ+sAyxqKXG+YIdpzbIwA+/PiMIFe6yY7PaIbq1Epbm9rW2ZgTLqUQ8WiQ HlnI7sLvuvHqhLcXS9ARpZdCKZq/n/ymnDl0dnJl8Qwe1AgsIz5STakUu74owVyIHRww3ebRgr3 rt0/i083RLYiKahOlMQGsMxESvurKtRZxiCt0zuUoYgZ0LxFuRXLdql1hwEXjNOGjxjuCSxiyeo r9vSJuuigJvF+dE9tKW X-Authority-Info: v=2.4 cv=XZeEDY55 c=1 sm=1 tr=0 ts=69679d63 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Warxv3Xc6ASOjn9-k1MA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: -vxp6_LJlwuT514UZo8GHiD0jc_Dxy-k X-Proofpoint-ORIG-GUID: -vxp6_LJlwuT514UZo8GHiD0jc_Dxy-k X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 clxscore=1030 suspectscore=0 phishscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABua+KEvI1IsVWvgm6kN8ski8KYXpcne0GIpGaUHgvHrnLKPbnl85iIuo5sO1V5fDYoQuAAGRX+Abv7uS2rdg86VQ+0uf0nRGjbQs8PDzmTpPPkMrWcBaE4NZvZI9j+KwFWbKA7iKaHBlgWgjt9oxwPvTVQSpblW4rQYVDRQrIPtbzshrkMyTGcahL4zENV3vxj6dRJnmij1DU8oxr4a+02EzgY+tmpoxPXvomemlQGStZzTIPlK+KVeU7VHQf6Tsz1hA6Mt65/fGDbXAPmmyRcEf0zKgwlT5HJvxX/Na3KwmUwoGuiNTiF7kuPWlA3RtBiGrxgQXfLfP5sLssrZybcW2rBU6h6um2cu0f+RUrcVcTP8odNy3EkGV3loGqvj1tj3CVkKAy4mcn1w2g4qIYzlczXXNzFRN6keXVJtCNddVoImvoM/5yULZZ5OgVO4gwyfiqOUFMGDWJEIqT8bQ9G2QUNmhogyyse11hn9/8g+J4rCQykfqFKyxaJzVsKsDPvr2hymnmjyi3EgsETzYDmF+RRyWoixUVPGosdjAzm9kvUbh9igCilEv5T5JAIhdluqHpHawvIlrN5Eo5RRMvFb+VNn83/hDg0Gbm7sL06CeNQj0XhSAsmQjjEKpRZQPJXyUwqUcQ/L3Vslw3tNTx0C1BhCl89bW7hUz3EIwdFDE3kqPu04QJkui6CzCaQkg6QYC+JTusPfce/FN0cZg1HqV5bpaAa7Opvry6/WdNNhdodDk/Vb2C0P6xlNFxnUKxL2DymzNC+pOrpj95hCBQYo0EQUW4PDG+yITOzj8KMSC8G2Te/H+Z7+hPmp4V2YKJsbJBxCPbfVF1TEVfWcE7dwIMRHPCyCxi7yiQr2+3gCS5g/kONzW+aQe1O+InjDufoWIlpd0cCn3wFUiIsYe67dnPiG026JkczWj6pNcd+w== 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 (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.79.105; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398431157158500 Content-Type: text/plain; charset="utf-8" This allows edk2 to work on Arm, although u-boot is still not functional. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 97 +++++++++++++++------------------------- 1 file changed, 36 insertions(+), 61 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 827f50f3e0..f018a8f5c7 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -255,89 +255,64 @@ void whpx_vcpu_kick(CPUState *cpu) * Memory support. */ =20 -static void whpx_update_mapping(hwaddr start_pa, ram_addr_t size, - void *host_va, int add, int rom, - const char *name) +static void whpx_set_phys_mem(MemoryRegionSection *section, bool add) { struct whpx_state *whpx =3D &whpx_global; + MemoryRegion *area =3D section->mr; + bool writable =3D !area->readonly && !area->rom_device; + WHV_MAP_GPA_RANGE_FLAGS flags; + uint64_t page_size =3D qemu_real_host_page_size(); + uint64_t gva =3D section->offset_within_address_space; + uint64_t size =3D int128_get64(section->size); HRESULT hr; + void *mem; =20 - /* - if (add) { - printf("WHPX: ADD PA:%p Size:%p, Host:%p, %s, '%s'\n", - (void*)start_pa, (void*)size, host_va, - (rom ? "ROM" : "RAM"), name); - } else { - printf("WHPX: DEL PA:%p Size:%p, Host:%p, '%s'\n", - (void*)start_pa, (void*)size, host_va, name); - } - */ - - if (add) { - hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, - host_va, - start_pa, - size, - (WHvMapGpaRangeFlagRead | - WHvMapGpaRangeFlagExecute | - (rom ? 0 : WHvMapGpaRangeFlagWri= te))); - } else { - hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, - start_pa, - size); - } - - if (FAILED(hr)) { - error_report("WHPX: Failed to %s GPA range '%s' PA:%p, Size:%p byt= es," - " Host:%p, hr=3D%08lx", - (add ? "MAP" : "UNMAP"), name, - (void *)(uintptr_t)start_pa, (void *)size, host_va, h= r); + if (!memory_region_is_ram(area)) { + if (writable) { + return; + } else if (!memory_region_is_romd(area)) { + add =3D false; + } } -} - -static void whpx_process_section(MemoryRegionSection *section, int add) -{ - MemoryRegion *mr =3D section->mr; - hwaddr start_pa =3D section->offset_within_address_space; - ram_addr_t size =3D int128_get64(section->size); - unsigned int delta; - uint64_t host_va; =20 - if (!memory_region_is_ram(mr)) { - return; + if (!QEMU_IS_ALIGNED(size, page_size) || + !QEMU_IS_ALIGNED(gva, page_size)) { + /* Not page aligned, so we can not map as RAM */ + add =3D false; } =20 - delta =3D qemu_real_host_page_size() - (start_pa & ~qemu_real_host_pag= e_mask()); - delta &=3D ~qemu_real_host_page_mask(); - if (delta > size) { - return; - } - start_pa +=3D delta; - size -=3D delta; - size &=3D qemu_real_host_page_mask(); - if (!size || (start_pa & ~qemu_real_host_page_mask())) { + if (!add) { + hr =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, + gva, size); + if (FAILED(hr)) { + error_report("WHPX: failed to unmap GPA range"); + abort(); + } return; } =20 - host_va =3D (uintptr_t)memory_region_get_ram_ptr(mr) - + section->offset_within_region + delta; + flags =3D WHvMapGpaRangeFlagRead | WHvMapGpaRangeFlagExecute + | (writable ? WHvMapGpaRangeFlagWrite : 0); + mem =3D memory_region_get_ram_ptr(area) + section->offset_within_regio= n; =20 - whpx_update_mapping(start_pa, size, (void *)(uintptr_t)host_va, add, - memory_region_is_rom(mr), mr->name); + hr =3D whp_dispatch.WHvMapGpaRange(whpx->partition, + mem, gva, size, flags); + if (FAILED(hr)) { + error_report("WHPX: failed to map GPA range"); + abort(); + } } =20 static void whpx_region_add(MemoryListener *listener, MemoryRegionSection *section) { - memory_region_ref(section->mr); - whpx_process_section(section, 1); + whpx_set_phys_mem(section, true); } =20 static void whpx_region_del(MemoryListener *listener, MemoryRegionSection *section) { - whpx_process_section(section, 0); - memory_region_unref(section->mr); + whpx_set_phys_mem(section, false); } =20 static void whpx_transaction_begin(MemoryListener *listener) --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398255; cv=none; d=zohomail.com; s=zohoarc; b=Tv4J6CUuH5ELHo6qnd+r9j9Pcv79MkXJ0mP1cDldCVpktcxHRcXNp75ky+io8LNMy2j2vGlhdR7qWn8VJ/KclrKfV9RqzCjN0NGuP7acWvooAvxMjSIkKAFDlGOXhFFQLzGzdjcmzFnLxhIya51b5SjW/trlh+Dfno58NgB3jf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398255; 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=l9p5jVYclwL2K7rHpkywk2BNDTimX+u9/pjnya/K+yM=; b=HvOe3mWXCQkYmxjGcKAlUrSydDNFZk5FkDJsMFJj8PaKHKJliLz36lDlGuFGeF7QQA9i3UBQlmPP8khH/iJkyGyhM0nJyVFHgUyo6oefOAGBSEdxRnegUN3DjlTkxrZ2ZT9XOJ2ww9r1BOZJYKPxcf1kbBDYn3fu+p2n9O7Fabc= 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 1768398255687991.3497008615157; Wed, 14 Jan 2026 05:44:15 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19Q-00019I-I1; Wed, 14 Jan 2026 08:43:08 -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 1vg19O-0000z4-Jx for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:06 -0500 Received: from p-east2-cluster5-host7-snip4-10.eps.apple.com ([57.103.79.33] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19M-00088J-I4 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:06 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id C18991800749; Wed, 14 Jan 2026 13:42:59 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 87EBF18004A5; Wed, 14 Jan 2026 13:42:54 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=l9p5jVYclwL2K7rHpkywk2BNDTimX+u9/pjnya/K+yM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Oxv03jkcf0YQ/8v0x4T858KLX6jau2XAIzW8ary74Ek53XyTdX6aSQ8kHYdOZYdFRef+ELWh57scAqltMRga9y9p81MW0D240aC000YhnIsOapC774LGRTdU31Z//N28IhF15+zvfq3+JnRQQH/KJcKQLINQGQ6deNh/sTnyQvva9GY2cRphf7ZolFRB/kjeKFwRM3DPmGFs5/YKlDekvo7VaBZgtuf74Q/mGrAVNjncYArMFZoqa6bdtn6gxnflejRh/S20Tn+RPtqX4K1mnMf2OcpZ60ZpmFP7HJH4UwgNMNVNFRjMEC8zOq88UZRRKZuNwmj8RsaINXI7y5jQQw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 17/26] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Date: Wed, 14 Jan 2026 14:41:34 +0100 Message-ID: <20260114134143.26198-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: MEwFPDvbD-49v0SQW7Lo8ki19Xwr8Eje X-Authority-Info: v=2.4 cv=RI++3oi+ c=1 sm=1 tr=0 ts=69679d65 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GfoCO2L6IEBdUbzNuv4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: MEwFPDvbD-49v0SQW7Lo8ki19Xwr8Eje X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX0OXzZWq2PrLA xARuD1KzZD9a+aP9he/ZjsiSkb6HGKJmqb8FmQlftlmrgbAvAU/+SbUTIh0OrhpzU2JjvCrhf1E VOqzs6hpbgT5Nf+fSff5vVGXGeQTTgHmYz/2eBu7NvkQJyUq8onwOPY5Cgtit20fiCyRFtSG4o6 ZxKX+0XF6l8N6J3bT/0vLcVWtf7g106sVJMWFgFMuU5wz2bRiMTOHO3tcKTRNNaQhgZPzN14+yG 7IgXGjRaTEeJuIFq0o9Z9BLwPFBS/8IMdMCeL9dkz274Q8KdRNj8HGUZ6CWHZkgYkYMKh26932w INioSOgtvhxC5OwFjLX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=944 malwarescore=0 clxscore=1030 spamscore=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAB5XELhFFnPYHUkSUEg9gLI9d/cZQwW5FCD7fJ3N0AMFmM4lOnL/lNrjQj1StracZj9jDddGmROMORNywRv6SWWWKX4Db6wR4xXMOQLErCv2J/WbJt6g2yu9sJaJuwa7heCSDfJUAv+87TckL8BnEOTKKrjyJszW7LzK/wOGGat5ZDdu3X4QZGGH92ZCTt1eCCAIuwT0SSV7w62Ma5vB3AcfwgKR+l0vhElyWiR2hS2/1l+NDn/P2QZFLeeS6UZDSPzroqtHxfjDQHQlC4tqYoVSDgkJLAT6vpaDW3yh6A/5FuLImCTYUxSPuIQyMZzVKTynXf0Xe6HlPzqKtI73WjZj4wiSIX+lOvUPl93EK3rXUJIo4VM5/u2G8LtTMtk+s78MHwiUo1oHCaHP1sxsF9fOIqSBzuf+igFGEA+VoLc5YYHO51m0HyMOvEjv6m7gHdFGXoFTxuhXV2K2s9Q/mvTZJLidXt1zybIE9XY97L5nfm5jwQWrECTp6wcOR3kz9TyuLfGbhRVHruCiQ+sCMkMjRTzPqsgXd0IPli/RO5W7H9Y52mkT60Jw2Tg/GYxT4+KBujoSQFd0LDHK3VzRr1H1GtrMhrCerGWY4owg+zHwB/iFDkH2ISZFIVS8PgMu7fOZtsRuyedPZgGFf/CqYnz6aLP8TbpmDtzb9qGGO/l3OF+dUZ8fBQKjln6hS0QS7MVOoXCDDC3ZQWDVHnVNkw2D3qgEZIy5Mh9ezE8uRbZ4jd7cs0EZXRjIzwxdY+AES390bGPwuz5BWvFrkU80Vb2aUXz62HovbJw3Nqr8PH8dwlFotQ9L5dXxHfVADQcjItTBA9I8Iwvw6QMuKKz0I1B0U6QiDYB23rLkR/msPHXcEGnydWnKTpS1O4DSD0AJc9XzXpO11t4aPxiZtI6EXpblefoa3k+Sko0WgnX+Bj5lRLolta9HFYzp5bQGOBZOedCZbb 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 (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.79.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398256097158500 Content-Type: text/plain; charset="utf-8" Hyper-V supports PSCI 1.3, and that implementation is exposed through WHPX. Signed-off-by: Mohamed Mediouni Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- target/arm/cpu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index caf7980b1f..70f0bebd19 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -23,6 +23,7 @@ #include "qemu/timer.h" #include "qemu/log.h" #include "exec/page-vary.h" +#include "system/whpx.h" #include "target/arm/idau.h" #include "qemu/module.h" #include "qapi/error.h" @@ -1143,6 +1144,8 @@ static void arm_cpu_initfn(Object *obj) if (tcg_enabled() || hvf_enabled()) { /* TCG and HVF implement PSCI 1.1 */ cpu->psci_version =3D QEMU_PSCI_VERSION_1_1; + } else if (whpx_enabled()) { + cpu->psci_version =3D QEMU_PSCI_VERSION_1_3; } } =20 --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398299; cv=none; d=zohomail.com; s=zohoarc; b=S6RnZOwHkj8sQRJoOOMVx8iuT82cQl6x1i9ZrHBLouT0lBmqMJqbsxc800f+iqPCO0Ixqqg52yHpKvCdzwBF4t+x7TFZaMjKKL5IfcisbtAZkPYchQpqNNGwygXz+0R5aNjhjVEWUl+lpaIixRKBu1GvgwdkMYLXYnVqNzmHllE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398299; 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=fisWmPzPsk/35/uuGiwommbJrUFStsp22F99e67tksE=; b=P6rAfXf4kiJn9U4ZKTmESwxm+4IBMqnKst41CSpgUA/3UQNksPwAusIMIjAb/4hfuStAGnOg5Ov4wosIjyBTUladYw/QsKzG7ToWR0NQztU2pSOvZymPhidPEuX1qlTrHyetEOp1XfVG83LXq07da9IArXCgGnEb6+SZZraBxYk= 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 1768398299500467.0496281001267; Wed, 14 Jan 2026 05:44:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19U-0001Js-RI; Wed, 14 Jan 2026 08:43:12 -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 1vg19T-0001Fi-5B for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:11 -0500 Received: from p-east2-cluster4-host1-snip4-1.eps.apple.com ([57.103.78.152] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19R-0008L6-7A for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:10 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 6175A180015F; Wed, 14 Jan 2026 13:43:04 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 740B818004B3; Wed, 14 Jan 2026 13:42:59 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=fisWmPzPsk/35/uuGiwommbJrUFStsp22F99e67tksE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=GHvLKiXtHc0q1Wq/AO2aQ2tNtJiahEBsKWotp7SLsP6Z2rMLEjHboL0uWe9X3oaXFFOahzxVg8Pk3HUXGN5HN9aMKASzVJ0XI9hi6oRobAK0bOWHVqS+X8DvUUFKAPqq2IweruM8qpx9rxNsUP0Xbe9fNdNucatseU6L1RimF/9ig9qpw5EaCIr45Y68KxSB0gjkLu0kmi4pTTE69KxnNJ/j7gIIy2BQD2g9PS6mYfPgVC/VzYYkVF+U8gvuG8ZuIr/ypnXSEp8pJ1tdSUNz7sxV5Zx9IVF7GZJye6tPvzx0CUoXjZAk+dYqznhGhks2DGGRsynXuiKKGJnTcH+Vfw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 18/26] whpx: arm64: clamp down IPA size Date: Wed, 14 Jan 2026 14:41:35 +0100 Message-ID: <20260114134143.26198-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: FmTqgtJMJ2lh9qfCNa8Y37CoPe_qluIJ X-Authority-Info: v=2.4 cv=VbD6/Vp9 c=1 sm=1 tr=0 ts=69679d6a cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=wAo57kR77d7e8uaIccUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: FmTqgtJMJ2lh9qfCNa8Y37CoPe_qluIJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX0YlZ8Edo2Mhr 19A+exrVhc+K3dmXtGq/21HmPmYlQXf/XYpgBZFKb2YvryVvnuwnS43ORY4MRsizdO8w0CusFCJ 7QtwMRFArTwrUoD6fXVhwK0ycyfDrOnLi4JuVYcoNvbllu4XIyJBhHbTuLVqf+hwQbnDmvEzVOR Vkv7nPsS9I6obhFsxEYdvZbZfNDB6JOq5svj8+mnIa59B8pnUVCrAWdE5GA5eHlxCKS4Ml54e8q cY4XR7UkRBk2o4jl4W0eWlAS1cTs8vLVsi0AQUYjSoTXZEyuJSJOjkin/D+YEPi9furPdxe7FTY 3kqSfRW+b8MFlLBJ4tN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 mlxscore=0 clxscore=1030 malwarescore=0 spamscore=0 suspectscore=0 adultscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABnKnz6upgETnTiWUbDBp5QHwCqWd2Qzp0ZSmvyfLF4j9VbmbiksW1+W+XLYhFDbjawJsAgYkC95L6/lKhnW+LkvxRAjH04A1gWz8Y7Dr5B4ZTrw77qFzGchFl7SrqmIHphN9c6bNnUl6TV0siZjMsofTPq+m5BUus+uMGbwqILyHboMAyg3vOyPteze1C4jPjdWlPNdtWe9bdy0HjlFkVW9veTTXtqIrEBhKrNJg3CkHf9kMkYYqwXLNI+LCJ6hC5P9zESbBxDQ1FiKsnMKvLJ9wbMGoXaYcWIIGXeFCfG13OYaOiq6uoEHl2gScuqnOQN2zssvlWo1pLdnKXM0/kukZ9WVqyPJBEBv2k4/A+N+5k08+wKCnIs0AMMhScCh8FI8a3hSxTOhOUwT4yqcMShFHLPqENp1w2b/ZVudEYmHrJcmcKbLn7TtruQ2aDFKswwXsBXu7ICcQEuf7C9aDZ4EEMeuMs4wG+V0AyQrs/GLto0pW9rfochJZ3YaNZwDUHSPMjvnTeo0DlYX2Bgk9uZXfzpf5ySuxrd8tYSMMSRBl5oXgOkmFD31eyWc309Ci6m/ptmPWKfG1mZiXN6ICxKdSS3g2zQz4QfaJXj8yYfF/SZWD1Rst3GgSSarHpQZRTecy4Js6fsTvf0WWsvy6X1I2Ktpxk0MlNgg4bHNbzkrH9nqsUYy49JoU7EvgcI0WvhZS+B46dGVZJ23xyhbtO6nC9IlPbB0GpmvCfwIFbSsuVq9cduOog7ihD20YZJNtFUVhyGD/7SePRM0sWG2KcJsFvPjp7QH/JVLHXswh8b9uj9RgfVYiRqvgfFd9dsKASwJMuDoSHlEtF+pCUK+diBaDvgLe7xludL0k2tgmWXdfPo2T2fgDdwRp6Kdn7onmpOHDB+ksGU8J6l5Z+xw== 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 (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.78.152; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398300463158500 Content-Type: text/plain; charset="utf-8" Code taken from HVF and adapted for WHPX use. Note that WHPX doesn't have a default vs maximum IPA distinction. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt.c | 32 ++++++++++++++++++++++++++ include/hw/core/boards.h | 1 + target/arm/whpx/meson.build | 2 ++ target/arm/whpx/whpx-all.c | 46 +++++++++++++++++++++++++++++++++++++ target/arm/whpx/whpx-stub.c | 15 ++++++++++++ target/arm/whpx_arm.h | 16 +++++++++++++ 6 files changed, 112 insertions(+) create mode 100644 target/arm/whpx/whpx-stub.c create mode 100644 target/arm/whpx_arm.h diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 128a226a27..283935ae76 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -72,6 +72,7 @@ #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" #include "qapi/qapi-visit-common.h" @@ -3313,6 +3314,36 @@ static int virt_kvm_type(MachineState *ms, const cha= r *type_str) return fixed_ipa ? 0 : requested_pa_size; } =20 +static int virt_whpx_get_physical_address_range(MachineState *ms) +{ + VirtMachineState *vms =3D VIRT_MACHINE(ms); + + int max_ipa_size =3D whpx_arm_get_ipa_bit_size(); + + /* We freeze the memory map to compute the highest gpa */ + virt_set_memmap(vms, max_ipa_size); + + int requested_ipa_size =3D 64 - clz64(vms->highest_gpa); + + /* + * If we're <=3D the default IPA size just use the default. + * If we're above the default but below the maximum, round up to + * the maximum. whpx_arm_get_max_ipa_bit_size() conveniently only + * returns values that are valid ARM PARange values. + */ + if (requested_ipa_size <=3D max_ipa_size) { + requested_ipa_size =3D max_ipa_size; + } else { + error_report("-m and ,maxmem option values " + "require an IPA range (%d bits) larger than " + "the one supported by the host (%d bits)", + requested_ipa_size, max_ipa_size); + return -1; + } + + return requested_ipa_size; +} + static int virt_hvf_get_physical_address_range(MachineState *ms) { VirtMachineState *vms =3D VIRT_MACHINE(ms); @@ -3412,6 +3443,7 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) mc->get_default_cpu_node_id =3D virt_get_default_cpu_node_id; mc->kvm_type =3D virt_kvm_type; mc->hvf_get_physical_address_range =3D virt_hvf_get_physical_address_r= ange; + mc->whpx_get_physical_address_range =3D virt_whpx_get_physical_address= _range; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler =3D virt_machine_get_hotplug_handler; hc->pre_plug =3D virt_machine_device_pre_plug_cb; diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 07f8938752..0b2aefb126 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -278,6 +278,7 @@ struct MachineClass { void (*wakeup)(MachineState *state); int (*kvm_type)(MachineState *machine, const char *arg); int (*hvf_get_physical_address_range)(MachineState *machine); + int (*whpx_get_physical_address_range)(MachineState *machine); =20 BlockInterfaceType block_default_type; int units_per_default_bus; diff --git a/target/arm/whpx/meson.build b/target/arm/whpx/meson.build index 1de2ef0283..3df632c9d3 100644 --- a/target/arm/whpx/meson.build +++ b/target/arm/whpx/meson.build @@ -1,3 +1,5 @@ arm_system_ss.add(when: 'CONFIG_WHPX', if_true: files( 'whpx-all.c', )) + +arm_common_system_ss.add(when: 'CONFIG_WHPX', if_false: files('whpx-stub.c= ')) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 62fda15597..fce4e1ba10 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -35,6 +35,7 @@ #include "system/whpx-accel-ops.h" #include "system/whpx-all.h" #include "system/whpx-common.h" +#include "whpx_arm.h" #include "hw/arm/bsa.h" #include "arm-powerctl.h" =20 @@ -633,6 +634,40 @@ static void whpx_cpu_update_state(void *opaque, bool r= unning, RunState state) { } =20 +uint32_t whpx_arm_get_ipa_bit_size(void) +{ + WHV_CAPABILITY whpx_cap; + UINT32 whpx_cap_size; + HRESULT hr; + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodePhysicalAddressWidth, &whpx_cap, + sizeof(whpx_cap), &whpx_cap_size); + if (FAILED(hr)) { + error_report("WHPX: failed to get supported" + "physical address width, hr=3D%08lx", hr); + } + + /* + * We clamp any IPA size we want to back the VM with to a valid PARange + * value so the guest doesn't try and map memory outside of the valid = range. + * This logic just clamps the passed in IPA bit size to the first valid + * PARange value <=3D to it. + */ + return round_down_to_parange_bit_size(whpx_cap.PhysicalAddressWidth); +} + +static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARMISARegisters *isar) +{ + uint32_t ipa_size =3D whpx_arm_get_ipa_bit_size(); + uint64_t id_aa64mmfr0; + + /* Clamp down the PARange to the IPA size the kernel supports. */ + uint8_t index =3D round_down_to_parange_index(ipa_size); + id_aa64mmfr0 =3D GET_IDREG(isar, ID_AA64MMFR0); + id_aa64mmfr0 =3D (id_aa64mmfr0 & ~R_ID_AA64MMFR0_PARANGE_MASK) | index; + SET_IDREG(isar, ID_AA64MMFR0, id_aa64mmfr0); +} + int whpx_init_vcpu(CPUState *cpu) { HRESULT hr; @@ -708,6 +743,7 @@ int whpx_init_vcpu(CPUState *cpu) val.Reg64 =3D deposit64(arm_cpu->mp_affinity, 31, 1, 1 /* RES1 */); whpx_set_reg(cpu, WHvArm64RegisterMpidrEl1, val); =20 + clamp_id_aa64mmfr0_parange_to_ipa_size(&arm_cpu->isar); return 0; =20 error: @@ -727,6 +763,8 @@ int whpx_accel_init(AccelState *as, MachineState *ms) UINT32 whpx_cap_size; WHV_PARTITION_PROPERTY prop; WHV_CAPABILITY_FEATURES features; + MachineClass *mc =3D MACHINE_GET_CLASS(ms); + int pa_range =3D 0; =20 whpx =3D &whpx_global; /* on arm64 Windows Hypervisor Platform, vGICv3 always used */ @@ -737,6 +775,14 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + if (mc->whpx_get_physical_address_range) { + pa_range =3D mc->whpx_get_physical_address_range(ms); + if (pa_range < 0) { + ret =3D -EINVAL; + goto error; + } + } + whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( diff --git a/target/arm/whpx/whpx-stub.c b/target/arm/whpx/whpx-stub.c new file mode 100644 index 0000000000..32e434a5f6 --- /dev/null +++ b/target/arm/whpx/whpx-stub.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * WHPX stubs for ARM + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#include "qemu/osdep.h" +#include "whpx_arm.h" + +uint32_t whpx_arm_get_ipa_bit_size(void) +{ + g_assert_not_reached(); +} diff --git a/target/arm/whpx_arm.h b/target/arm/whpx_arm.h new file mode 100644 index 0000000000..de7406b66f --- /dev/null +++ b/target/arm/whpx_arm.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * WHPX support -- ARM specifics + * + * Copyright (c) 2025 Mohamed Mediouni + * + */ + +#ifndef QEMU_WHPX_ARM_H +#define QEMU_WHPX_ARM_H + +#include "target/arm/cpu-qom.h" + +uint32_t whpx_arm_get_ipa_bit_size(void); + +#endif --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398334; cv=none; d=zohomail.com; s=zohoarc; b=gY2L/baXZGSeuYd76vB+8yWm7jCeJSWOuriftV7T1HxImm+tuFrXMX+Qo0ygA1AC/fIlCJX9seko602r+t1f1IcIuLu36hZTXewzFn/otTxjL8grnM3JIvIdJpUO2Q91cNLNQOlzkZK/Wcm5Jh9WakVBCeSUrdf6Y/R9jn9j5GM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398334; 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=0bcIOI3LlXP+xiRF8XwgIxeQr5th/olwhYQiO6iSkA8=; b=kLRXzgqv5lUXD6Js8+h7QZzcDWKxw8OorbhgSbFpNqqly8XDSv/g7XiUxXFxrYcmWhGPKs7RaLOQuW+a93rF7g2kc2O2oEIPvH/aFQ/HL2vdesKqAiNtGuUEFGhNiTtIu3/cVRfYNdkCTXnw33zBAse978AUrx8f0DfHUiqkxzQ= 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 1768398334111695.0544074041129; Wed, 14 Jan 2026 05:45:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19Z-0001Yg-8e; Wed, 14 Jan 2026 08:43:17 -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 1vg19W-0001OB-So for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:14 -0500 Received: from p-east2-cluster4-host9-snip4-10.eps.apple.com ([57.103.78.221] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19U-0008SR-LJ for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:14 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 0D5A31800745; Wed, 14 Jan 2026 13:43:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 15AAD180048A; Wed, 14 Jan 2026 13:43:03 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=0bcIOI3LlXP+xiRF8XwgIxeQr5th/olwhYQiO6iSkA8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=abrxsGEXtQdxCPGWQcQkwFU+OqlvPeJlxsosPPgn+wA5KvjsRhgtVD8fI7rlTwtunf33IpYeLJqhJ3c9em6ZUl3Usn3ZK82w8naKcqsepGqkeexeHTXNksNhAeHjcruy3OlbRAXqulfMqUcqhfSXWIQeDWou23a6habz/zqumqeVJPKeZMm9LhFBWPdZmR7Cee9xa4HBT2Ev1NlfVAdD573VJlz1M4TIuqpmOyppaPFF6m8u4QoIeNmxEy6JCF8Uy+jMaMuw5aGO5ttkk9A6LW6oyUl/+Qf1XoQgIDTTI/u2K8WP3f9022iuaz0xViwL/YdXbFIewwtSVGTqBPFUSw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 19/26] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Date: Wed, 14 Jan 2026 14:41:36 +0100 Message-ID: <20260114134143.26198-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX0zRtmKyDo9zi U723+PfjQSkKKyMP66FGSGroFc0tigQbVomOBkG9PlokEKNwLMnhcvUgbcxvaHE0O9MhLzoMGQ4 tf0NVoVUrrcP6wk1sZHFskDzU4/SLbuzQX7EBhoJOZKHFIjIx8WsSJcjRD/LpZhiq9EcaoFORrE cv2I026eSz49nOuPnYCGN0dwOkM+5+Gx8/6hKiLPyldflWc/K3u0n/l9OG0eW26X3YnH6gcBhJN 4IKacyKu/+YoqYQhgBY7nDNJSIqUh8Rzdat2eYTiekjLRPNPSD2RDQL8Wkb7Yxp7AkfmVJlQ0hy H2dEDUBZ2iiVNNh8tn/ X-Proofpoint-GUID: 1R3Ew8QpJDGhj3hds5TKgneAXG6Dun3s X-Proofpoint-ORIG-GUID: 1R3Ew8QpJDGhj3hds5TKgneAXG6Dun3s X-Authority-Info: v=2.4 cv=esnSD4pX c=1 sm=1 tr=0 ts=69679d6d cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2RVAx2gzJTwwV__86OcA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 clxscore=1030 adultscore=0 malwarescore=0 mlxlogscore=999 bulkscore=0 spamscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABxOr2dA8dDR2l+CU3550mmXTy+MeUd0YdI7p0oyOp7Yk3XC2N4aL/dpZeHAPrZifz3PjGiKbZVjUhN1A2ZDBQD1rrV4aSeU3lLD3AlLN+uPw0V7ruWHrcxqzCJdN9SKhX7CiV9tFtuDuXD9DhUy4JCjQcV72kez7nyqoSGmSOaZm1QwFg2DrgtpMlfGmT/iAGXkOFDKS+LnNl9j6JFpvq4weBmb4RW81KS1tZ/Kc2a/dbep4xEQ6iX3CeEqpOWC9NA2Lkq795piFMrQ7D9BNVRe9IKc8nYwhNHEfnhJu5B/QLlvA80PxyDBJ7fLZjgc9ESRhUWmMjqXZVq2v5qn4MTCsB5kW5R85cCvVs+Rk+kAjGcTyvBBmP4wNweeeSVRpsjr83WivV6delYqhyN2tQUqYxApy4gYlMbD/nwk9YDFafyR78nJwFPgyKdHqkPxV7O7TPM12u05cLqEHO4VWfv3C1HCezW5PIYaY4WYUt8E4tPCp8qry74bVvJuhTfAPNJszz//Hu8iNnrpyuFHLLtSZCwJRYc/W1ZFI/EEW3s+84KAb+RTutL8WikS225nrn848950x0g5IK0IqQyVuSzYJuRWF0gbVtSNObykXgaQPLz129+g82qIerKYXU/dxYsgth6CiTLnWelPErCKGTtxO8NufMFRLLf67p/3GDGUUQfBN4KH5GMKU1BJ7lvivAFznH1zyyiw4/8ogJCEcdCmXQSje7Q6dtTOXCweZQCdMtYSxsBhwgEwktXlnxfqaiSYPoa4v93RU583o7puNKzhRE11lggbMUaShag/oBVOq0DaSkX4EE4o6cCVuflO6rE51Y4fxjmGlDIaMkJ7vgM4bn1XLpxO/FkCgyN91vH9weOCBuFdMKIFINLxj40BD9oswLnwDLAsCc8wVHG6qjYAxrkRIWdpL1pF9WDUor2X0NBpaYqCjwwo+N6w== 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 (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.78.221; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398334745158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/hvf/hvf-all.c | 7 +++++-- hw/arm/virt.c | 43 +++++--------------------------------- include/hw/core/boards.h | 4 ++-- include/system/hvf_int.h | 5 +++++ target/arm/hvf-stub.c | 20 ------------------ target/arm/hvf/hvf.c | 6 +++--- target/arm/hvf_arm.h | 3 --- target/arm/meson.build | 1 - target/arm/whpx/whpx-all.c | 5 +++-- target/i386/hvf/hvf.c | 11 ++++++++++ 10 files changed, 34 insertions(+), 71 deletions(-) delete mode 100644 target/arm/hvf-stub.c diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 77f4e4e4f3..ce18bc0dac 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -17,6 +17,7 @@ #include "system/hvf_int.h" #include "hw/core/cpu.h" #include "hw/core/boards.h" +#include "target/arm/hvf_arm.h" #include "trace.h" =20 bool hvf_allowed; @@ -256,8 +257,10 @@ static int hvf_accel_init(AccelState *as, MachineState= *ms) int pa_range =3D 36; MachineClass *mc =3D MACHINE_GET_CLASS(ms); =20 - if (mc->hvf_get_physical_address_range) { - pa_range =3D mc->hvf_get_physical_address_range(ms); + + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + hvf_arch_get_default_ipa_bit_size(), hvf_arch_get_max_ipa_bit_= size()); if (pa_range < 0) { return -EINVAL; } diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 283935ae76..c59bcaa000 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3314,43 +3314,11 @@ static int virt_kvm_type(MachineState *ms, const ch= ar *type_str) return fixed_ipa ? 0 : requested_pa_size; } =20 -static int virt_whpx_get_physical_address_range(MachineState *ms) +static int virt_get_physical_address_range(MachineState *ms, + int default_ipa_size, int max_ipa_size) { VirtMachineState *vms =3D VIRT_MACHINE(ms); =20 - int max_ipa_size =3D whpx_arm_get_ipa_bit_size(); - - /* We freeze the memory map to compute the highest gpa */ - virt_set_memmap(vms, max_ipa_size); - - int requested_ipa_size =3D 64 - clz64(vms->highest_gpa); - - /* - * If we're <=3D the default IPA size just use the default. - * If we're above the default but below the maximum, round up to - * the maximum. whpx_arm_get_max_ipa_bit_size() conveniently only - * returns values that are valid ARM PARange values. - */ - if (requested_ipa_size <=3D max_ipa_size) { - requested_ipa_size =3D max_ipa_size; - } else { - error_report("-m and ,maxmem option values " - "require an IPA range (%d bits) larger than " - "the one supported by the host (%d bits)", - requested_ipa_size, max_ipa_size); - return -1; - } - - return requested_ipa_size; -} - -static int virt_hvf_get_physical_address_range(MachineState *ms) -{ - VirtMachineState *vms =3D VIRT_MACHINE(ms); - - int default_ipa_size =3D hvf_arm_get_default_ipa_bit_size(); - int max_ipa_size =3D hvf_arm_get_max_ipa_bit_size(); - /* We freeze the memory map to compute the highest gpa */ virt_set_memmap(vms, max_ipa_size); =20 @@ -3359,8 +3327,8 @@ static int virt_hvf_get_physical_address_range(Machin= eState *ms) /* * If we're <=3D the default IPA size just use the default. * If we're above the default but below the maximum, round up to - * the maximum. hvf_arm_get_max_ipa_bit_size() conveniently only - * returns values that are valid ARM PARange values. + * the maximum. hvf/whpx_arch_get_max_ipa_bit_size() conveniently only + * return values that are valid ARM PARange values. */ if (requested_ipa_size <=3D default_ipa_size) { requested_ipa_size =3D default_ipa_size; @@ -3442,8 +3410,7 @@ static void virt_machine_class_init(ObjectClass *oc, = const void *data) mc->get_valid_cpu_types =3D virt_get_valid_cpu_types; mc->get_default_cpu_node_id =3D virt_get_default_cpu_node_id; mc->kvm_type =3D virt_kvm_type; - mc->hvf_get_physical_address_range =3D virt_hvf_get_physical_address_r= ange; - mc->whpx_get_physical_address_range =3D virt_whpx_get_physical_address= _range; + mc->get_physical_address_range =3D virt_get_physical_address_range; assert(!mc->get_hotplug_handler); mc->get_hotplug_handler =3D virt_machine_get_hotplug_handler; hc->pre_plug =3D virt_machine_device_pre_plug_cb; diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 0b2aefb126..26e0879e1a 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -277,8 +277,8 @@ struct MachineClass { void (*reset)(MachineState *state, ResetType type); void (*wakeup)(MachineState *state); int (*kvm_type)(MachineState *machine, const char *arg); - int (*hvf_get_physical_address_range)(MachineState *machine); - int (*whpx_get_physical_address_range)(MachineState *machine); + int (*get_physical_address_range)(MachineState *machine, + int default_ipa_size, int max_ipa_size); =20 BlockInterfaceType block_default_type; int units_per_default_bus; diff --git a/include/system/hvf_int.h b/include/system/hvf_int.h index 3d2be4092e..cecd4617d2 100644 --- a/include/system/hvf_int.h +++ b/include/system/hvf_int.h @@ -73,6 +73,8 @@ void assert_hvf_ok_impl(hv_return_t ret, const char *file= , unsigned int line, const char *hvf_return_string(hv_return_t ret); int hvf_arch_init(void); hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range); +uint32_t hvf_arch_get_default_ipa_bit_size(void); +uint32_t hvf_arch_get_max_ipa_bit_size(void); hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); void hvf_kick_vcpu_thread(CPUState *cpu); =20 @@ -120,4 +122,7 @@ int hvf_update_guest_debug(CPUState *cpu); */ bool hvf_arch_supports_guest_debug(void); =20 +uint32_t hvf_arch_get_default_ipa_bit_size(void); +uint32_t hvf_arch_get_max_ipa_bit_size(void); + #endif diff --git a/target/arm/hvf-stub.c b/target/arm/hvf-stub.c deleted file mode 100644 index ff137267a0..0000000000 --- a/target/arm/hvf-stub.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * QEMU Hypervisor.framework (HVF) stubs for ARM - * - * Copyright (c) Linaro - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "qemu/osdep.h" -#include "hvf_arm.h" - -uint32_t hvf_arm_get_default_ipa_bit_size(void) -{ - g_assert_not_reached(); -} - -uint32_t hvf_arm_get_max_ipa_bit_size(void) -{ - g_assert_not_reached(); -} diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index fa26f63a61..5e93c42047 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -731,7 +731,7 @@ static uint64_t hvf_get_reg(CPUState *cpu, int rt) static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARMISARegisters *isar) { uint32_t ipa_size =3D chosen_ipa_bit_size ? - chosen_ipa_bit_size : hvf_arm_get_max_ipa_bit_size(); + chosen_ipa_bit_size : hvf_arch_get_max_ipa_bit_size(); uint64_t id_aa64mmfr0; =20 /* Clamp down the PARange to the IPA size the kernel supports. */ @@ -827,7 +827,7 @@ static bool hvf_arm_get_host_cpu_features(ARMHostCPUFea= tures *ahcf) return r =3D=3D HV_SUCCESS; } =20 -uint32_t hvf_arm_get_default_ipa_bit_size(void) +uint32_t hvf_arch_get_default_ipa_bit_size(void) { uint32_t default_ipa_size; hv_return_t ret =3D hv_vm_config_get_default_ipa_size(&default_ipa_siz= e); @@ -836,7 +836,7 @@ uint32_t hvf_arm_get_default_ipa_bit_size(void) return default_ipa_size; } =20 -uint32_t hvf_arm_get_max_ipa_bit_size(void) +uint32_t hvf_arch_get_max_ipa_bit_size(void) { uint32_t max_ipa_size; hv_return_t ret =3D hv_vm_config_get_max_ipa_size(&max_ipa_size); diff --git a/target/arm/hvf_arm.h b/target/arm/hvf_arm.h index ea82f2691d..5d19d82e5d 100644 --- a/target/arm/hvf_arm.h +++ b/target/arm/hvf_arm.h @@ -22,7 +22,4 @@ void hvf_arm_init_debug(void); =20 void hvf_arm_set_cpu_features_from_host(ARMCPU *cpu); =20 -uint32_t hvf_arm_get_default_ipa_bit_size(void); -uint32_t hvf_arm_get_max_ipa_bit_size(void); - #endif diff --git a/target/arm/meson.build b/target/arm/meson.build index ce155ba9b4..1ddc4b2a54 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -41,7 +41,6 @@ arm_common_system_ss.add(files('cpu.c')) arm_common_system_ss.add(when: 'TARGET_AARCH64', if_false: files( 'cpu32-stubs.c')) arm_common_system_ss.add(when: 'CONFIG_KVM', if_false: files('kvm-stub.c')) -arm_common_system_ss.add(when: 'CONFIG_HVF', if_false: files('hvf-stub.c')) arm_common_system_ss.add(when: 'CONFIG_ARM_COMPATIBLE_SEMIHOSTING', if_true: files('common-semi-target.c')) arm_common_system_ss.add(files( diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index fce4e1ba10..038a9dcfd7 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -775,8 +775,9 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - if (mc->whpx_get_physical_address_range) { - pa_range =3D mc->whpx_get_physical_address_range(ms); + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); if (pa_range < 0) { ret =3D -EINVAL; goto error; diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index 2023a7bfbb..9d41e51b83 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -225,6 +225,17 @@ int hvf_arch_init(void) return 0; } =20 +/* 48-bit on all Intel Macs. Function currently unused. */ +uint32_t hvf_arch_get_default_ipa_bit_size(void) +{ + g_assert_not_reached(); +} + +uint32_t hvf_arch_get_max_ipa_bit_size(void) +{ + g_assert_not_reached(); +} + hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range) { return hv_vm_create(HV_VM_DEFAULT); --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398306; cv=none; d=zohomail.com; s=zohoarc; b=fUxmYbCXFsmR1JSy8vZhtUUmiQFJdmM1/ujvkQ7uHojQwl849ejnKuQF7RlzJq5gAip58M+xN6VXUcFuOzaoGIUkTDV9jYAhrqDQn5UaxQRIB+U65B8MJ4DajoHEM6RXqZHbYuSnioNhsEbA/ajWjwTda+DeGd/UDUY9bkJO1Ks= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398306; 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=hmtRjfpovQKAt6bOzupfSsq9QGbrBwhc/6trzg3cQyI=; b=Bs4HltKf9UlNFDMcJJwYY+EGPPzTuqMRmwYTV0BFu8WU3BYyZIVqmzG14s8ydEnxHb3Y/AZfvkb52AwaBoeZ1FDdeGiG5FvQt1VrSIl/eADAEYsxL82EQLe0dlZNCfrJMCu5p28h4OQ1pTIw+6fSgJxN90JjO5fpM+ITtyhSnGE= 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 1768398306228186.044034030783; Wed, 14 Jan 2026 05:45:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19e-0001vY-8c; Wed, 14 Jan 2026 08:43: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 1vg19a-0001iY-Uz for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:18 -0500 Received: from p-east2-cluster4-host1-snip4-5.eps.apple.com ([57.103.78.156] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19Y-0000FJ-AM for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:18 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 5EFD418004B8; Wed, 14 Jan 2026 13:43:11 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id B5CD118004BA; Wed, 14 Jan 2026 13:43:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hmtRjfpovQKAt6bOzupfSsq9QGbrBwhc/6trzg3cQyI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BLw1EtPoHEtXcBOGMsuT0RGJw4q0c1HVSKWWIF+Wlx8qay4hlMhfOlBSnTPfT36NA+XwouK+NbZEEkuSck83LNkteGTjb8Z8uQ0sSGpGrMgexCXr/n0VwoeWyRDmrcBTzcz7mgjlCk2BqapKnPAsalimNtvWqtTI1bT7pBDgbbPqonrag9+InqU0oXigmy/ZyYn13SxfbnlmBRtAKGj6z5YHJ5FAAZ9qSydcXXofrtCyqiKO9X3XUvDx615xVmMSEdbfsRfcd4D73y2KXRESgDUZnOlRxoJFtsK0MxtSclJeph/XOOqRj6ywob8XfjXnLVqlR7TUJHx7kjT+a8M8xg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 20/26] whpx: arm64: implement -cpu host Date: Wed, 14 Jan 2026 14:41:37 +0100 Message-ID: <20260114134143.26198-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Niior0fXAZ6E_LD8mm8t_cG0mjqAFJPV X-Proofpoint-ORIG-GUID: Niior0fXAZ6E_LD8mm8t_cG0mjqAFJPV X-Authority-Info: v=2.4 cv=dceNHHXe c=1 sm=1 tr=0 ts=69679d71 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=L6Cw-x9jAAAA:20 a=KKAkSRfTAAAA:8 a=hGuVB2XOhXFvD5HHq_UA:9 a=cvBusfyB2V15izCimMoJ:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX45hzdUzN7QcC fVtjoaFZSWJZnVvg1VXW/4+XkIQwX7HxdNJ8+HAK3RyztK1HzoVXbkbyrYv1wEnLQMYuZkEGnGq JYfJXcsycoD/wFziR5tigvd6gJInEsfdGOaiHVr+Hf5HSSkzTU/TeESARYXBBGQWi2TXRcJ33G9 U4WeInn6cn1E1VqOrIcBm1dEcCDc+Btl8wAFbO7rC9azOmt43KbjJ+yLZX5hjkSlMdVKGFWoLST UhIzInfs6wmcSbGKHHn1SbnxkuCLbztwnrG4t7wHQGBwnTSprxADuyNgM09MIjJUmshdydr2woW 1ij99cMtb9x4AQa29yS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 malwarescore=0 clxscore=1030 mlxscore=0 suspectscore=0 phishscore=0 bulkscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAByZ+3breDGgekNczDPmltsxpPA3VsOjN6hNkg91XlvHsYQ75+gRiDBuCvQogzBUZR9/odY6OhDs0AUKqFf/vhfc5jvWKpP/150XNVYVmk5usfZS+pQWZeIvXr2OC+oN/CBp3UycYtMLtptMd9htxqVDlQSOq/V1D7RodK3xfG2obxcBCcyRzbfyWbc0HZowbNj6iY1bGmJDMKO2qr+eJwwGdhTNf3POfNjv/t+w3KNn7Du6thNZC/gZSZm3peYtHKETg0CHKSBPrLOp3/wf20D2Xk+I1SGKTjWYXBN6/kh7rd959qH/Ti+srM4CV/kxBIxRFCoSw6HKlKysv5m53VMMKCKPikgeB6CFCwKmuJ1Rx1bCw7TcqfVRqzyvEAn4dcjmEi7lM49DB08jjfbcoFppCuo/Rd955/dOY/vavlp3k3rfSRU4Get/Ub/LqxTQUFCFhKwpyUakf6IhQZZMx7BdSfFrwxF+NSSEwlBFY9ydhHoP54je8uPc+bLvrstf55BB4L0EV/704YH72iNpI+1wGAAft6sGiube2cn/92Cgx0BIjU/5YNiKnK53Y1C4UXfbPZNbd2SueIciZmIin5f7qpt6vgp/FqtVL3qg8zwWe17OAWYBwspyQZybimiOsYT/CQNOM0s09SZv49rE+b8g3dlO6D0sdSIWf7/4y6vWSTiOgniIoRYH62R1gKaYJFYotCttKvyN5M095NsLVTdx7c6JhJ3v41lOjscC6vTBhQJvMDMvJgnfVFjB5x/wH64RbA2XaX8qwluVCEPTvLyqWnfFVi55fZS8H7p8teijiEaqHnWaNPNlkFmYKyyw3Zbtda2/QmzcKfqFmEM9Tf1wKhBLMQ6ha4g8ReSaFanlicyMLGFoMO4QfldSsvBLHWDP8E2pR9+vPd4nbthJ3tHAvG4sqzZJoCSXz/VhwrT7QK 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 (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.78.156; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398306451158500 Content-Type: text/plain; charset="utf-8" Logic to fetch MIDR_EL1 for cpu 0 adapted from: https://github.com/FEX-Emu/FEX/blob/e6de17e72ef03aa88ba14fa0ec13163061608c7= 4/Source/Windows/Common/CPUFeatures.cpp#L62 Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/cpu64.c | 17 +++--- target/arm/whpx/whpx-all.c | 104 +++++++++++++++++++++++++++++++++++++ target/arm/whpx_arm.h | 1 + 3 files changed, 116 insertions(+), 6 deletions(-) diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index bf30381370..689babe822 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -26,10 +26,13 @@ #include "qemu/units.h" #include "system/kvm.h" #include "system/hvf.h" +#include "system/whpx.h" +#include "system/hw_accel.h" #include "system/qtest.h" #include "system/tcg.h" #include "kvm_arm.h" #include "hvf_arm.h" +#include "whpx_arm.h" #include "qapi/visitor.h" #include "hw/core/qdev-properties.h" #include "internals.h" @@ -521,7 +524,7 @@ void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp) isar2 =3D FIELD_DP64(isar2, ID_AA64ISAR2, APA3, 0); isar2 =3D FIELD_DP64(isar2, ID_AA64ISAR2, GPA3, 0); =20 - if (kvm_enabled() || hvf_enabled()) { + if (hwaccel_enabled()) { /* * Exit early if PAuth is enabled and fall through to disable it. * The algorithm selection properties are not present. @@ -598,10 +601,10 @@ void aarch64_add_pauth_properties(Object *obj) =20 /* Default to PAUTH on, with the architected algorithm on TCG. */ qdev_property_add_static(DEVICE(obj), &arm_cpu_pauth_property); - if (kvm_enabled() || hvf_enabled()) { + if (hwaccel_enabled()) { /* * Mirror PAuth support from the probed sysregs back into the - * property for KVM or hvf. Is it just a bit backward? Yes it is! + * property for HW accel. Is it just a bit backward? Yes it is! * Note that prop_pauth is true whether the host CPU supports the * architected QARMA5 algorithm or the IMPDEF one. We don't * provide the separate pauth-impdef property for KVM or hvf, @@ -769,6 +772,8 @@ static void aarch64_host_initfn(Object *obj) } #elif defined(CONFIG_HVF) hvf_arm_set_cpu_features_from_host(cpu); +#elif defined(CONFIG_WHPX) + whpx_arm_set_cpu_features_from_host(cpu); #else g_assert_not_reached(); #endif @@ -779,8 +784,8 @@ static void aarch64_host_initfn(Object *obj) =20 static void aarch64_max_initfn(Object *obj) { - if (kvm_enabled() || hvf_enabled()) { - /* With KVM or HVF, '-cpu max' is identical to '-cpu host' */ + if (hwaccel_enabled()) { + /* When hardware acceleration enabled, '-cpu max' is identical to = '-cpu host' */ aarch64_host_initfn(obj); return; } @@ -799,7 +804,7 @@ static const ARMCPUInfo aarch64_cpus[] =3D { { .name =3D "cortex-a57", .initfn =3D aarch64_a57_initfn }, { .name =3D "cortex-a53", .initfn =3D aarch64_a53_initfn }, { .name =3D "max", .initfn =3D aarch64_max_initfn }, -#if defined(CONFIG_KVM) || defined(CONFIG_HVF) +#if defined(CONFIG_KVM) || defined(CONFIG_HVF) || defined(CONFIG_WHPX) { .name =3D "host", .initfn =3D aarch64_host_initfn }, #endif }; diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 038a9dcfd7..3b79b8b376 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -41,6 +41,17 @@ =20 #include #include +#include + +typedef struct ARMHostCPUFeatures { + ARMISARegisters isar; + uint64_t features; + uint64_t midr; + uint32_t reset_sctlr; + const char *dtb_compatible; +} ARMHostCPUFeatures; + +static ARMHostCPUFeatures arm_host_cpu_features; =20 struct whpx_reg_match { WHV_REGISTER_NAME reg; @@ -668,6 +679,99 @@ static void clamp_id_aa64mmfr0_parange_to_ipa_size(ARM= ISARegisters *isar) SET_IDREG(isar, ID_AA64MMFR0, id_aa64mmfr0); } =20 +static uint64_t whpx_read_midr(void) +{ + HKEY key; + uint64_t midr_el1; + DWORD size =3D sizeof(midr_el1); + const char *path =3D "Hardware\\Description\\System\\CentralProcessor\= \0\\"; + assert(!RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &key)); + assert(!RegGetValueA(key, NULL, "CP 4000", RRF_RT_REG_QWORD, NULL, &mi= dr_el1, &size)); + RegCloseKey(key); + return midr_el1; +} + +static bool whpx_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) +{ + const struct isar_regs { + WHV_REGISTER_NAME reg; + uint64_t *val; + } regs[] =3D { + { WHvArm64RegisterIdAa64Pfr0El1, &ahcf->isar.idregs[ID_AA64PFR0_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Pfr1El1, &ahcf->isar.idregs[ID_AA64PFR1_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Dfr0El1, &ahcf->isar.idregs[ID_AA64DFR0_EL= 1_IDX] }, + { WHvArm64RegisterIdAa64Dfr1El1 , &ahcf->isar.idregs[ID_AA64DFR1_E= L1_IDX] }, + { WHvArm64RegisterIdAa64Isar0El1, &ahcf->isar.idregs[ID_AA64ISAR0_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Isar1El1, &ahcf->isar.idregs[ID_AA64ISAR1_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Isar2El1, &ahcf->isar.idregs[ID_AA64ISAR2_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr0El1, &ahcf->isar.idregs[ID_AA64MMFR0_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr1El1, &ahcf->isar.idregs[ID_AA64MMFR1_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr2El1, &ahcf->isar.idregs[ID_AA64MMFR2_= EL1_IDX] }, + { WHvArm64RegisterIdAa64Mmfr3El1, &ahcf->isar.idregs[ID_AA64MMFR2_= EL1_IDX] } + }; + + int i; + WHV_REGISTER_VALUE val; + + ahcf->dtb_compatible =3D "arm,armv8"; + ahcf->features =3D (1ULL << ARM_FEATURE_V8) | + (1ULL << ARM_FEATURE_NEON) | + (1ULL << ARM_FEATURE_AARCH64) | + (1ULL << ARM_FEATURE_PMU) | + (1ULL << ARM_FEATURE_GENERIC_TIMER); + + for (i =3D 0; i < ARRAY_SIZE(regs); i++) { + clean_whv_register_value(&val); + whpx_get_global_reg(regs[i].reg, &val); + *regs[i].val =3D val.Reg64; + } + + /* + * MIDR_EL1 is not a global register on WHPX + * As such, read the CPU0 from the registry to get a consistent value. + * Otherwise, on heterogenous systems, you'll get variance between CPU= s. + */ + ahcf->midr =3D whpx_read_midr(); + + clamp_id_aa64mmfr0_parange_to_ipa_size(&ahcf->isar); + + /* + * Disable SVE, which is not supported by QEMU whpx yet. + * Work needed for SVE support: + * - SVE state save/restore + * - any potentially needed VL management + * Also disable SME at the same time. (not currently supported by Hype= r-V) + */ + SET_IDREG(&ahcf->isar, ID_AA64PFR0, + GET_IDREG(&ahcf->isar, ID_AA64PFR0) & ~R_ID_AA64PFR0_SVE_MAS= K); + + SET_IDREG(&ahcf->isar, ID_AA64PFR1, + GET_IDREG(&ahcf->isar, ID_AA64PFR1) & ~R_ID_AA64PFR1_SME_MAS= K); + + return true; +} + +void whpx_arm_set_cpu_features_from_host(ARMCPU *cpu) +{ + if (!arm_host_cpu_features.dtb_compatible) { + if (!whpx_enabled() || + !whpx_arm_get_host_cpu_features(&arm_host_cpu_features)) { + /* + * We can't report this error yet, so flag that we need to + * in arm_cpu_realizefn(). + */ + cpu->host_cpu_probe_failed =3D true; + return; + } + } + + cpu->dtb_compatible =3D arm_host_cpu_features.dtb_compatible; + cpu->isar =3D arm_host_cpu_features.isar; + 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; +} + int whpx_init_vcpu(CPUState *cpu) { HRESULT hr; diff --git a/target/arm/whpx_arm.h b/target/arm/whpx_arm.h index de7406b66f..df65fd753c 100644 --- a/target/arm/whpx_arm.h +++ b/target/arm/whpx_arm.h @@ -12,5 +12,6 @@ #include "target/arm/cpu-qom.h" =20 uint32_t whpx_arm_get_ipa_bit_size(void); +void whpx_arm_set_cpu_features_from_host(ARMCPU *cpu); =20 #endif --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398224; cv=none; d=zohomail.com; s=zohoarc; b=P01YX7LHUi84z+D0r8Wu/Kn1rvE7ZIDj283vG0kb/bYQiuByOI7EynpcK7g7RAJ1WGIVy2wr2v6/90i4IkeuRJEtuXHyMpUYI6EfcYs0ggy/40iNqBqInfGwTDyZ+byHpBrvjxf0usn753qwrJdUr7fAfxJKQlSlFh6+sLpOm8M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398224; 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=ECjpVySg6XZ/QHOAAJ+X/A1Hu2Jhdy4KwMcQqAyYNsk=; b=mh5Nlunh1JC2DK4gwEqcVLf9ufbget3yT7JUFk9Mrow02j4RCAiEUDyrbuUonv+MtVKEQyBEMEHko+aWTRp0g27FeQdYOT3bZ+t24zwb6kBGqY+2LJMAU/wqbDqwKTDK9CIHGGm4C2cc58/fBq/SKQ/C4Q2+W6j/nN3dwezpjZw= 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 1768398224607679.3996587837015; Wed, 14 Jan 2026 05:43:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19k-0002AN-Oe; Wed, 14 Jan 2026 08:43:28 -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 1vg19g-00025F-5W for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:24 -0500 Received: from p-east2-cluster4-host8-snip4-5.eps.apple.com ([57.103.78.246] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19e-0000Xb-KY for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:23 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 1729C18000A2; Wed, 14 Jan 2026 13:43:15 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 1161318004AC; Wed, 14 Jan 2026 13:43:10 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ECjpVySg6XZ/QHOAAJ+X/A1Hu2Jhdy4KwMcQqAyYNsk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Q705/zI3BhB09e1KAaKgXuQ4+qDcavAJy681RvRD9UiteRo770bB3kePm8hpGntaD44vdIMBjwdUr+1zLxcaviSH+385O0l9BFeiS5IrScH9DuncD64oyzflVIBqvJjtwMBrMlaspq21uizsNfdsClOcpO7lkbffYTMpcvqkHlw+T7uGP70Bfx+rbdkiwLgTKsSADmhpJ+0JlkzDES2FVc0V5cXwNwuUab1lLT3XfZUOMasHCnPvGNHecLkKL29GQYahQOh3fV9kl44WtUZHHp7PB1Qd1l6JpESHQH4EQPCoCbrTDfYBVRP8dzptVfjbg44HMakAZ6Xt1yCNjM91Rw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 21/26] target/arm: whpx: instantiate GIC early Date: Wed, 14 Jan 2026 14:41:38 +0100 Message-ID: <20260114134143.26198-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=QcBrf8bv c=1 sm=1 tr=0 ts=69679d77 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=EYz79TNVRTG0waESW9UA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 7Fk3nt9UQeXDnHDDq6myu2bgwdTL-n_Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX+jXNIQBMUh2R 4Mhu5t17zJxwvUiyyFDC4gvI3kIzVr3zb6RhQ+6L2rMf0K0Z8S8lkm5ivtujjHKwLq4zB7MW8Um I3tp4DKIBSerSMCO4xk3AmrLeOEETeMsEvDTXfjKCbIF4ixbZaINlKptNptdYuXoiU4kka2kk2j 9DywZJ1QkpRu392ty2I40mMNl0FBQ0bjvO2ZTMzxyCFowbh3Us8AnqvenP+X4Fv2u+sQsy9ArxQ sVDMTbMzjYP3+qEKfg3YNNmki6KFtuT9t3wM7SoJybUqj94QzdKUrBaQRRsKVpM3qhczpecBw7G 2wJ5yWKlrTzJS4JUSo5 X-Proofpoint-GUID: 7Fk3nt9UQeXDnHDDq6myu2bgwdTL-n_Q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 phishscore=0 malwarescore=0 mlxscore=0 spamscore=0 bulkscore=0 mlxlogscore=729 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABlbdPisRf+87r9PIqUeV0LvoMUgMJuB7hPagzyWT93dbl7AL1IVmtyiG7uzCYMTpXLvWYdyOQpWVV5ZWxsYFpcp7NsgaB6oRUwS4x2HMqg+3xM89uimZ5pJGoQnvjoxPELG8wTeLgHMTEb8N9N9ThQ6HVq7iI2y+QjJYfZfrOWmsejodZIV8SbMolisvrF69/R9NW0kgFkrGvb28hzsOmZ3bActuYITAUBaLRJ8wkwsvKaESS7rZ0TXsTdkBh85n39sL0aLTTjbYoYE/65Ny1Rsqdou0Jn/LpTHZUDsP4baj7j6AqZd2dp65WZIf2dloCjum18WGLE/9M6KZxd0JdpWGmpLTDevOAMxjVFXhhD1icE1wM763kYI5UWom9W8xKpvDl7ZRbSzsZcjb+yKrnjjFog5p2BpEgGkqpFf321cukWJIe/mSPd8HufV/oayQMDT+9Ucpo9zOolqAdjT6XQG8DP/L92ce+B3Kp06Lc1bbbaZ1PQc0hkxQl9fM37CLHxa3k/d1QdnX1gUn8OfsaV8Bzmp9snQ4R+nLzqc3GuQqgfoNTFumSFahz0mWBYZyp/DJGUujOV1Ho1CMJj1w4+fiRJORThicqCvcoOWwLipIxh/adRH28BdryRR+U47DFyIIrpychKfp1ttK0OIsA2AA20af3DR5Ma1aR6kMQq5mLrjylR64jxZ76LcSEARkddKXRlSfYsCZwYYKk/NlMLyaxJYu3yiNE2J7nn7yPdIg7/1GwGZfTde1AG29M6Zs35eOw6jUMF8LjoRKPN0/UIY7AlEjlwQuDRsyd/DaZNqi0f3Olj/3YIwCojefClMkbNMSIOjpVZlONBWWsmqPC+sBglYPX5mxf2nqgQt76hD3slJa0RqW+4RGuj5ZkeIRmYESE87E/61jmUS6yB4pmG5M= 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 (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.78.246; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398225959158500 Content-Type: text/plain; charset="utf-8" While figuring out a better spot for it, put it in whpx_accel_init. Needs to be done before WHvSetupPartition. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/whpx/whpx-all.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 3b79b8b376..ab31371aea 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -945,6 +945,29 @@ int whpx_accel_init(AccelState *as, MachineState *ms) =20 memset(&prop, 0, sizeof(prop)); =20 + WHV_ARM64_IC_PARAMETERS ic_params =3D { + .EmulationMode =3D WHvArm64IcEmulationModeGicV3, + .GicV3Parameters =3D { + .GicdBaseAddress =3D 0x08000000, + .GitsTranslaterBaseAddress =3D 0x08080000, + .GicLpiIntIdBits =3D 0, + .GicPpiPerformanceMonitorsInterrupt =3D VIRTUAL_PMU_IRQ, + .GicPpiOverflowInterruptFromCntv =3D ARCH_TIMER_VIRT_IRQ + } + }; + prop.Arm64IcParameters =3D ic_params; + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeArm64IcParameters, + &prop, + sizeof(prop)); + if (FAILED(hr)) { + error_report("WHPX: Failed to enable GICv3 interrupt controller, h= r=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } + hr =3D whp_dispatch.WHvSetupPartition(whpx->partition); if (FAILED(hr)) { error_report("WHPX: Failed to setup partition, hr=3D%08lx", hr); --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398251; cv=none; d=zohomail.com; s=zohoarc; b=DO9g61h7/Q9OUK+4Zpm/Q7nlhKd2JS/1up0HDpGkvHANgcEJyeyqjLxL9Uj9PAV0JAb953BG0H4dLXvKFngbh3QikgxCC+DK4gTFGisxpC2jGqsSlAcU7DW5kVEpH9APnypqSqFwgZFmI2idRQBEovMHSeOGgJOnEs9Au2DB3eY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398251; 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=NqtcHJC/jmtg6zxYmtUDz1F7scGINBcHMu0R0Ue6BzE=; b=j3SEG4naYcHy6xwTOytnaUvoCHfTyDGR6kjsm/ywevWPseIZLj0+KAgmWtJbKG36C4AQUPGQrAukIBPwufbZgQPQnpoyV/iJsTKCPH9t9q1JSKdBEymGmQuHs37E57t0Ez0i+Pq9Ja4sztF5cB1LI1/JLEFR1i3H88/4x4p7yFI= 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 176839825096638.87197816226774; Wed, 14 Jan 2026 05:44:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg19z-0002K5-KH; Wed, 14 Jan 2026 08:43:45 -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 1vg19h-00029U-O6 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:26 -0500 Received: from p-east2-cluster4-host10-snip4-2.eps.apple.com ([57.103.78.223] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19g-0000dO-9c for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:25 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id A3A171800482; Wed, 14 Jan 2026 13:43:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 62B6318004AE; Wed, 14 Jan 2026 13:43:15 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=NqtcHJC/jmtg6zxYmtUDz1F7scGINBcHMu0R0Ue6BzE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Hjq9Cd9JM9Bsf4G/5LYVNEJJ3c4MuDoyfjDKhrAmdqrIUWMcFC6VNWiP9VAfh0FqOupihX/98JlYaytEodNkpr01ijo6INtlwuya+5Ugn+wAmvV9Njrp5oKeQT+8jkU+L+5bfwzaIMfIQqqE854iF248ZqwgcOPv4Dtv7BHwchPXM/AR3Tm0xZPnp+JE4t/2CXuchI+4CUvX7o7jtEcLqvcGPMfcUY+MkCNZqn/X1tzdHhDvwULS9OlqQ6SBuc694fIeOE15dZdd8mjR+qMbGisDFtuqMb0NcACBjYvvlkfIgGVfcZATT5330zICaREohhhAronej1O6VLIIuv34gQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 22/26] whpx: arm64: gicv3: add migration blocker Date: Wed, 14 Jan 2026 14:41:39 +0100 Message-ID: <20260114134143.26198-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=YqIChoYX c=1 sm=1 tr=0 ts=69679d79 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ZsnAEJ0dk2gu5naU1fIA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: zE4xKlPO5TCMGIQ_Ue3iUJk_5KtoqbZU X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfXw+b45A0PdjHT dAn4vr2q+OO2CEKFm26TmcsQtYBsDEFGHuKPu8Ob1yvqBMcKWz976AF2cUg5VPJhsb/WLIllIPt VNJ8uTO2zZoc1uYxemCYl5qZgrsEJAzXYZPu80I/OMtw5piGpAFsxbHt9wbKqeWM9jsseo4XvlN ywklK1jeYsm/pTYPErjyCphYdNlhmGyUQrMhKLPzjM5xPUNzJ2Aq7VYewR/b4Hh81RtTriG7PGy 4mR8ZYZ9A39APiji5fTureIOtfl2smI6Dfqu0vB1eT5guxdLOdvT4MtNhIp37HWIdFsjRoH6E70 3hQpOb9rZrkyYsxwBYE X-Proofpoint-GUID: zE4xKlPO5TCMGIQ_Ue3iUJk_5KtoqbZU X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 suspectscore=0 mlxlogscore=999 clxscore=1030 malwarescore=0 phishscore=0 spamscore=0 mlxscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAAB5bdETkQb7CDyrlG1bt93SVH1O3p9q6roPmnC/pC/VykNrMhnSRm3/v5u5cxbe6bduy3NLQuXDRliv0njwF+iy5XfMNsgUtl/Wmk5eu2XFC20V2pBKk5ZCItxETsCWWBZQQQvmKhG4hgpbmOPGpYR2ctbp+0uGxvQBgrNwhuhR8VIMNABMV/WR4XWfuVYucVsEFAkltSdOMJWOBo4e2dTEmKaorsqlu34hcK2ituClokmtoOIOBey+mzdvnwLdodBg6xbExz1/E6pN/TyWljLASRDzbF4ijg6XxrCinWFd4WryPX/VsP3GBjRdcCE7ETkb1AeRMRIk/LcyuncQDaBC1MW44hrb91YVpZDlrXfYd8tfILKMp/b06FbE9gB9XG+qSxs03fUlyt7P65/ojpU8Kh2DJCtQsJT24IzKshzravqtuyT6z8fkAMEdGK2VVhn7rtbd56q7bB1jBkR+FpeCS8RJtyzYLY+XGc2/riClOsKKLV+mY4p2JEsFLlWmLO5WqrOyD+oVx7uahh9YLuY3xKkOkrcDFsgfd24GWBeiwmM3vd4Er9wGWUu0LVYtTai7WfStJOWT6mo60hKQime/Cb6C8YnkHzZBC6jBqTveBJn4qD3J2I96urFgzCQ/dDaFSXrt6kYfXPI06APFIPyu0D9CkgJ8jae9aSXrr1778IbviC5+LupDVe84i9xFGNQNaSj1xs31uqagekA0MF7hvDAZzUP1NRyIXn1Im4FCilCuZRD9mhIHR3B4lYJK7PM9L2sybOX1oGlUnggw/Zt6WcN1UpK4BaYsIzePzMQlbuKV6ow9F6aoy5juUgle+O93UqDREl34I7UGPF7kk+oGyQBYs4kVbqS9vKfXJZep/bySCY/t702b31TqhogILtIzb3d2AOHIMe/Jm1urJvK40eth/cOeixskmdnqVZauA== 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 (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.78.223; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398252068158500 Content-Type: text/plain; charset="utf-8" GICv3 state save-restore is currently not implemented yet. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/intc/arm_gicv3_whpx.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/intc/arm_gicv3_whpx.c b/hw/intc/arm_gicv3_whpx.c index f34f841a4a..bf21ceb454 100644 --- a/hw/intc/arm_gicv3_whpx.c +++ b/hw/intc/arm_gicv3_whpx.c @@ -17,6 +17,7 @@ #include "system/whpx-internal.h" #include "gicv3_internal.h" #include "vgic_common.h" +#include "migration/blocker.h" #include "qom/object.h" #include "target/arm/cpregs.h" =20 @@ -205,6 +206,15 @@ static void whpx_gicv3_realize(DeviceState *dev, Error= **errp) error_setg(errp, "Nested virtualisation not currently supported by= WHPX."); return; } + + Error *whpx_migration_blocker =3D NULL; + + error_setg(&whpx_migration_blocker, + "Live migration disabled because GIC state save/restore not suppor= ted on WHPX"); + if (migrate_add_blocker(&whpx_migration_blocker, errp)) { + error_free(whpx_migration_blocker); + return; + } } =20 static void whpx_gicv3_class_init(ObjectClass *klass, const void *data) --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398334; cv=none; d=zohomail.com; s=zohoarc; b=Nht3cQXPUFHqOZSiiLBAFDQ6MHLNdA15RNlxue3kp1WKUqa4AJdwVpCoPKh9ZQJ48j26UkAwDG02gRGzNsJBlU0WqFxUjAM+ZyJeGXwciDHHEEOXZp1GQtCre5Rb03awT4rr7ICQr+nr8GxWSB7Au39t9vK89ilMalNDy4lHKXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398334; 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=Rk0URHLzFbQb2J2pqqyT/zI1JsK2Hqgs3DZKJWsJ2S8=; b=GtIwM7YR1bXlI8/309tfVHXGECACqB/As15S7d1WRV5qE3AQyxI207d/OYTCXzPq6pPUb1NgeMbaxwqrs++NG4Dq1ZPNJX1cwkVC7HqdoxdCuBHMTob6yPoZWreeu+3ivIsISa8hf+G7w+hJQzcKEOlwv2iLKVZwtfFUevXxuro= 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 176839833421645.977948115832874; Wed, 14 Jan 2026 05:45:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg1A3-0002Xz-IS; Wed, 14 Jan 2026 08:43:49 -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 1vg19o-0002DV-Uj for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:40 -0500 Received: from p-east2-cluster4-host2-snip4-10.eps.apple.com ([57.103.78.171] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19l-0000iv-JS for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:31 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id 35F5118004BF; Wed, 14 Jan 2026 13:43:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id BD6C518004A1; Wed, 14 Jan 2026 13:43:19 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=Rk0URHLzFbQb2J2pqqyT/zI1JsK2Hqgs3DZKJWsJ2S8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=guzEcW1PpKgCwx0CTeDLFfRO5OI44lzquZKLmmLjBVd4cvAjoC7dvnpOqh8JrI4bQMPtujCp9zRby2cDqBivr7mcrB9KnVI5AkmgLOPLs/F2uu1zntLOkdNrduOA5EklppedNIei2qFmt1Dxarw25zXg1v1XxmkGfHBvXI+Pn9DhzusK46KteayHNRwFTrSFmyFGs5lsgS/xDVDeebGJg+bMXIOk0nUYtvfZXucBsKlafdM/vFv/ZmxKvYVI/6HgUu9l0h/CaTOQF5fJakZg6aW2Lum4TyNPQnNV09wrcsO7ygrRPB6jzszJSsoNAS2zqMNufLRkt0QwXlVNooEi1A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 23/26] whpx: enable arm64 builds Date: Wed, 14 Jan 2026 14:41:40 +0100 Message-ID: <20260114134143.26198-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: mxmVC-N0wOf7JgL3opJplJDyGIKnTrlD X-Authority-Info: v=2.4 cv=IcSKmGqa c=1 sm=1 tr=0 ts=69679d7f cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Ck9h3XeVBPDugYI9Na4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX+odbJu5CEdyw U7OKGVAQx1LS1OHMAWoI7iCiJ+bFA5PHZYbLRN6kAFr3NzJg56uZRZgHrbnaf+JXguMnPQruLDz +dqU7sr8npZwQOj7J5aUwvw6NYa8NtFmf4WMLPaSYHJnez7rbQk+2cNtHWHReHreN9Jen0HFbzC GSGGtsTVWkkHRqm6w2BQ5M09Vt1aMYtfFiysisGkHZiw97qx2jT0o1H8t2BBNMGCgenCyuPgp74 yf3SM1cLbzyREs03JNvdGUenvdV8XFc4A//dry3fToA2vv4fxRsOAqr8voeBorCM9qNWu0Yh9Dm IRzCvYNiXzvvQ8VubER X-Proofpoint-GUID: mxmVC-N0wOf7JgL3opJplJDyGIKnTrlD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 phishscore=0 mlxlogscore=848 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABmhogIzCyjb3X0AglfJSDfMmA8EFPp+Y+EgNc0T7DoxBBobnUg3kmXMNPCdXsi8+kAlwCnhahyJzIgOC+iaeGPbKqV8s3Bb1i27pvaVIdEVAiWhf5rLgPxazsDlXBDLbOqTOOspnL1V/S7sZV111dn/YsvR0P1BIz89w7OJMr5lP9YV8XkyPSXo6XnB3CyP8wOxrRGFyrG2EvjtGJa7q2TFKmVqW5bEGxv2hjluHHPrLQmeqq/dh5bOnkYYRPNDGI8wSBRN2ylHlnN05byS+McXUuynp4NOdAajEiY3s7yBeBRfx3ExaaiPY6W7PUF5ZfkPWpS2lzkoxOCo5EvTayKKkt9pw4GuKq7QsxR1FfDr7YYPFFZtizJ5T5fgWAJKusIPkTpxBug45WoGl+fkVqxqRygJhFFjhcESejG4ObiqYbTOpmKEJ5Fdz7oZhJiU6lQOkI95EHeGsfa/k/NtNp2RVsFlx6G4Jr8fO/mE4T8DCS0VSEcor4PUH5E/btt+adlPAgmoAMYmLVNpvLgCU/zs7KbRitS4mtJkPQqsfHzTymRUshgADm/RnR22kG3+Gnzf+SSGyk0H7fPrT5oBPbrEPZ55o5i1XWnXCfKGmTq0bHiYb099F1o3ryY0wl0LevW2pncu/PhWUQn+xgi3FDMuAlvZ4Ls0iMGdtw/bP5tE5i4qVM+Xg+aw7u4CIhr6XWwObxBTtsvekf420ZPl7U33DAyrdhTpufwbNu7q9ALOpHDrMz+o5nqKb+wO18qL5JBJnZ1e7HxcG1/vyCLIZElhaVz+EjnJc84AQYjnNvfRDkbnmASbHVRVnMQMbaoHj9+w8iB3TZhxp7lhE17zSW6CJrAUi2vrPCaf2q54YpzG/1i2gtggEIlFioe6E3H+ZoMH7i1pl7OgN4 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 (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.78.171; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398334621158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- meson.build | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index c58007291a..34c799e066 100644 --- a/meson.build +++ b/meson.build @@ -317,7 +317,8 @@ accelerator_targets +=3D { 'CONFIG_XEN': xen_targets } =20 if cpu =3D=3D 'aarch64' accelerator_targets +=3D { - 'CONFIG_HVF': ['aarch64-softmmu'] + 'CONFIG_HVF': ['aarch64-softmmu'], + 'CONFIG_WHPX': ['aarch64-softmmu'] } elif cpu =3D=3D 'x86_64' accelerator_targets +=3D { @@ -892,13 +893,18 @@ if get_option('mshv').allowed() and host_os =3D=3D 'l= inux' endif =20 if get_option('whpx').allowed() and host_os =3D=3D 'windows' - if get_option('whpx').enabled() and host_machine.cpu() !=3D 'x86_64' - error('WHPX requires 64-bit host') - elif cc.has_header('winhvplatform.h', required: get_option('whpx')) and \ - cc.has_header('winhvemulation.h', required: get_option('whpx')) - accelerators +=3D 'CONFIG_WHPX' + if cpu =3D=3D 'i386' + if get_option('whpx').enabled() + error('WHPX requires 64-bit host') + endif + # Leave CONFIG_WHPX disabled + else + if cc.has_header('winhvplatform.h', required: get_option('whpx')) and \ + cc.has_header('winhvemulation.h', required: get_option('whpx')) + accelerators +=3D 'CONFIG_WHPX' + endif endif -endif + endif =20 hvf =3D not_found if get_option('hvf').allowed() --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398401; cv=none; d=zohomail.com; s=zohoarc; b=gt6NBMgtOvDq1dMXSKU1rh3qavJ37jcrwWyU3/ibecq8UfEbNJxeN24CwUD4NS3iz2lZNGL1jQyOM4INg7f5ZhXQNPL0S9IAMZ6Ojs7naTZmD1gk6melSAk5X+cBikJ237uHK7yRsWs7AE7RS8EbAtExRYaQE71Fojbf4nAr+U0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398401; 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=j3gxaGgJ/UOlr7E7Wf1HhS3Y6+PzTtQg7lYYYapxm5A=; b=fdhJHNhqB0tfz7rVX7xq62oGdjrXWhex1Zi6KpxyI5gOcp7wO2mM867CL6Gcipf0t2KmouZC3psYy31azNu2AiJJ0clzZPC+p9fOwpyl/JxCfIe+IHR3BJCEZT9phntOhcfUHe+MrdhjaSovkcNw0l2+7zhfcHwJvNoyZZdJejw= 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 1768398401567432.09796807221346; Wed, 14 Jan 2026 05:46:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg1AP-0003RQ-Ql; Wed, 14 Jan 2026 08:44:09 -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 1vg19s-0002EL-C6 for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:40 -0500 Received: from p-east2-cluster1-host1-snip4-10.eps.apple.com ([57.103.76.33] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19q-0000oS-Th for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:36 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id DB74218004AE; Wed, 14 Jan 2026 13:43:29 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id EDF2E18004A8; Wed, 14 Jan 2026 13:43:25 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=j3gxaGgJ/UOlr7E7Wf1HhS3Y6+PzTtQg7lYYYapxm5A=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=RU+2KcNujGjxulwvIzEEbDhOcz8wnlAcOFM4d4IIBL/V95GMTOFIFhTOLsw4LlpwnAC06ORD5DNUveeoOSGGizeljvnyEJzPL5abEhLgphVOSGqXcKR5rSrY3RfBUHpwPVudcMMo2pZZs7xF9ejTRg65WiTiqzVAIsQfxuqcrojV05o/FnXLlqU7DO14vGEZOg0inatNQAN0mNHirJQig4fYncIxHj7Ur2ygs3vS+yiMtVYRQzs8+Oylx+vfLKTQHkajC6/V39BrCUMdbHu8ul2awpESyvbsX+V+zG5J0b+60fqYkJ4K0Z4pv1Nzv+7/g9Y3gD+yTnbKNXKY4shbVQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 24/26] whpx: arm64: check for physical address width after WHPX availability Date: Wed, 14 Jan 2026 14:41:41 +0100 Message-ID: <20260114134143.26198-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 6NgKvat5Oz7V9uHfFBTenwlBYnT7UZnB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX21yO8Akj0Yet tEuzaQlssLoPNXIxfIs2YFV3taT1LhWcwjnx7mGP0niqYZwwwGQdq60NJOYW706+CKXQ0uB/ePp cnsuw5VW8RZ2ljjQYRsymcz04WnrySFAt1nWfmKQaJQQKMEoZfgVo10/GXxu5ar4VY/az0HoK7F f0pO8NG5CVko4S3dciQ4RKkf30x/QNcHgtEdZsjug5Q0x+TkZK6xIVtOUsGcg9C+bbqgnCUHlkJ njlsjj242DsDjVFZh+kz/mhq7Xtn0H4RnzsOF2GyjUdsBmgyp7QY6obDU2BiarfegmH2ANKACz5 qdCAajk5NBU4nK0zRra X-Authority-Info: v=2.4 cv=GZYaXAXL c=1 sm=1 tr=0 ts=69679d83 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=lhTSZ31de6YUvqMuns4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 6NgKvat5Oz7V9uHfFBTenwlBYnT7UZnB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 clxscore=1030 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABRRHxN6XBzADakdxY9KFrXndTk9BZVvF+eUIgpw8WYSTZjPq44OmwdwwmBnvdv9sfnolghfQUD+kI1YGigN/EHcyTx4S+6+IX9Jez1hMPSQUAPF5MuUsT/zIfjgCQ3GgXG8hMnwIKyBM+Amj4IBtfG/jvBrnrixJX0ZgZCvUvZIRUNy+WtfsZuCbnHCcZAMeEwae+7OV2kGnajqY46fG2bxEDOhTW6iRmMHoQM9j3bc9ut8pWmVzJHhIptS8TkGVfBLTAerR8HyTzh2u7Qe5nbxr1zlrVBfpp39K9+ITNl4SAj/W3H5TwvrQPJHuQbS+cL/XET4HqgE3pAdi/h7z1kg6V8OvbzfoAQY+Lq4Uxth0WcgQpCDyOWxgOnL9OKRnqndcLYrCaUtwsuz++JFVcN1D3PfYqHe63EiNcCY7DvPrE9Ncgcfx++KndgQ51wTjNgPDXgZdZiFGr0oyF/AZUCuIVSbTrEM9MvQWKZ+M53Wte1QpJcSqXNnXd2jyvRG4e5MRUfGk4TVj3Iwb3mDfBO/oHN20QcW3RbamgoiS7zQmm9Z4i/z7h2keOb9J00fweMiddVYRsskDdsVkrWcgKxqPoVD84XSIViYjkJNXtBbQKdGJJ6gsITu314/2XFIx4K+H4+JDvOLJO1cb94uwJaAmBDihhCUPxFPP078g+Pv+SW8UCh8/+yj81pWcxuoTbapfDoExX+ONMNNuyGnhCWS5nOT4f4U8oWuabAvKfZuveTnV8zipQJoGij1nF8u3WW842j26JYebUE9TIksTQHNgHsF2lVdjZPz7mdZ0cOTDJYhMxQn9R45V+61TSeUb7EpKp0azGwMxcKcqGlV47e3d6WKpXMYsnZZdJ1T3WzYdQk/+f8f2rpZpmMJ51z+GxN2Ofu6GhOQRvY0uPk/JnhRufUmFhfmGh37oplfSHpQg9I6IiIg6kjunM 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 (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.76.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1768398403114158500 Content-Type: text/plain; charset="utf-8" In the case where WHPX isn't supported on the platform, makes the intended error appear instead of failing at getting the IPA width. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- target/arm/whpx/whpx-all.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index ab31371aea..def85988e7 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -654,7 +654,7 @@ uint32_t whpx_arm_get_ipa_bit_size(void) WHvCapabilityCodePhysicalAddressWidth, &whpx_cap, sizeof(whpx_cap), &whpx_cap_size); if (FAILED(hr)) { - error_report("WHPX: failed to get supported" + error_report("WHPX: failed to get supported " "physical address width, hr=3D%08lx", hr); } =20 @@ -879,15 +879,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - if (mc->get_physical_address_range) { - pa_range =3D mc->get_physical_address_range(ms, - whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); - if (pa_range < 0) { - ret =3D -EINVAL; - goto error; - } - } - whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( @@ -915,6 +906,14 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + if (mc->get_physical_address_range) { + pa_range =3D mc->get_physical_address_range(ms, + whpx_arm_get_ipa_bit_size(), whpx_arm_get_ipa_bit_size()); + if (pa_range < 0) { + return -EINVAL; + } + } + hr =3D whp_dispatch.WHvCreatePartition(&whpx->partition); if (FAILED(hr)) { error_report("WHPX: Failed to create partition, hr=3D%08lx", hr); --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398273; cv=none; d=zohomail.com; s=zohoarc; b=HyboRNO0HLRRFCz8yU0PF3FV8k9aH4829PrJffWfONWQ7zU84x7DlU8L3zZ1y9oeRKYslviMgoEw6JdY1Cvwp/gn9E9FyBFKSB/wEocqQeel4ePU4EM5Rz0xCW3MJJnjwmkzQyTh4xB/Vu1/ZkYyLFPhfSNoK8rP4uWtKEk3hWo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398273; 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=8BCQd7Pm/bl3RBBACCAJWlsvec2RfbtyFInvh6wrHr0=; b=HWo+ASd/IiOqoEUBwEyoMETagSsWvXYiOKFI0T6t+PHkkY/51HifoigV9cwYdHBIBdJAI2hnMJUhEypia2OZE6Q6fY/zczmnMTOViuHJW4IKFH5INdLt4Z/NhW1PdJs+sTczD6IIVsmAHfcga9hi1UYt3wHb947iWB6HsTYKj/U= 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 1768398273171869.4887434729856; Wed, 14 Jan 2026 05:44:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg1AS-0003hb-RW; Wed, 14 Jan 2026 08:44:12 -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 1vg19v-0002Ec-OF for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:40 -0500 Received: from p-east2-cluster1-host5-snip4-10.eps.apple.com ([57.103.76.93] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19u-0000rf-8J for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:39 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id A6ED81800740; Wed, 14 Jan 2026 13:43:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id D883318004A5; Wed, 14 Jan 2026 13:43:29 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=8BCQd7Pm/bl3RBBACCAJWlsvec2RfbtyFInvh6wrHr0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VQkxYNsZI3/pH/Dza32og3Y8yN/6n/pi/GlOvJnWPRVfgiD4TkIHRsa6POBuyNZD2yGQm2FWClgWl1AbBqTv3+qq5tuD/6c2sx4xxT8vFY133odQ6wzfyJv1o5nFYoV3A2gj9V8lTKrw6y5gUXff3Ucljqskg/0FVSvhjhEBM84nqQylyfyGOBr3T+xBTI62lK1LzxQWGPWv1Wl89yWdCiGpZp1fvRix0r6f9jxp4SfKvU8QUG6KeUzaUg/5XkcbjKBnseu7Vkcpx5inX/GMM0vywiUgRUuKaVI0GOIfeRuqFZRQcyAs57OnstM2PGQyunp/hm+otSTCIulBpXxfNg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 25/26] whpx: arm64: add partition-wide reset on the reboot path Date: Wed, 14 Jan 2026 14:41:42 +0100 Message-ID: <20260114134143.26198-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: _B0qRhueegl6KS3v5-dfDj5EJBGD8gVz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX4NiyUlCHD2dp 3l1NK4ZPrc34oQNJhiyjzzu028VKOnV/GP6ifhRyVTsJ+h+bQjEfyJ7nB5DvhMy4qTaZbpfCmpC hK4csZuC3anzx7vaqHUqS1nXEb3OOE28+Q61MOa8NQK/GAEM6SsCx5FXTN1eF/hUcZZpAwaVWq0 n8n8ZitgBHJUuiJxNR/we/CvdpvRUN6AG3dgG2KDJOyF4B/8B1xBYB7YtdmIsT28l7+RWR8ipa5 DUK/cpzSYuufBCujZfgU5lD+HrHNO+dOBwTWaeqJPWR4d9GPL5q4nrjnsxPboUswciGPtKlw5WM Yh6TN4fBEENP+HD+JZJ X-Authority-Info: v=2.4 cv=GZYaXAXL c=1 sm=1 tr=0 ts=69679d88 cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=h5GvOLqLgfJ3vAEETv4A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: _B0qRhueegl6KS3v5-dfDj5EJBGD8gVz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=932 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 clxscore=1030 malwarescore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABh+aFZq9+LeBi/jRHtiOK9fNicJk4zKsYl6qpODiP+vZC19vU9aRTWVbUhkppxo4En2hkIneiRHpJQOJyddvoGaD2S7kc5gp2YMhXkZDp4TsLDZJnO0RxG6pt7y+5Jg2q+RlznFV3Bb9nugyUrZCxu18kRp73X3ycUXYnabWRyGciUw49RcGVFViDJjx6uqDJ2y9AWwzSWAiOmcoLeLxqz7xAX2DClb7GiTVt8YA6SOzVoE7KuX9i+LMQk/X+MzXDGsmk/6PiewJcmoSEHcfWOA4+YnbhZb8UG3NQ+jIbDVfTxTpsHGQFHd/FK3v7NLK1sxCoD9FdsvG8dmA6WAf6Fdw/lPr7k7HRHD6vyfxZGCo2DzChctboheRs8LGeBuFQbZ+JBBPMotWAei9+tDJFrg3v8cvEi4bdE6iOWNUVzVB1kLto8k++UTND7M6I4LK/xPtwivPa7deTmOWgM4TBfTD4sUOTO58ReHQclTBfcqm4F6CpeStBPdAyWrBxsjEhz+dQ1MwHpaMbw9cTcvNUfGiuFQK1jNkWpbQdI6/AmKdNwoB8N7NuNPWoM9APXs8SJnZkl696Z2QlvOwFSw4buJVSpLQdOkBn1oTEcwd3zkTjWB4buS6a8x/ZEUfQfVLKL2U0m+7IHFKid3QqnWW7mXodvGvtDdNlHPgWGCJoc1zX20bSQOwum6CECCMSwaPX/46QBwv8o//GQmRqOciTHH5ks1xAtPVh3hBuFOFY28nuHFXsHNgCatgQ0yfQ+7eP2RG2F1RnvJPhEeUqL5g0IZsmp8vkIEMm2u/34ajKM4RNkWzitJHtJu642XnB3P3pGgy1jJCi1NpT1H53JlmuYID7F93tJPq1MsHsIFE6QVauXIOLd5ZfmbSo8Y5y6wm0Kt5unywRqFkk2/MmiFDvDs6fWiH1Pu6KDemI 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 (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.76.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398274363158500 Content-Type: text/plain; charset="utf-8" This resets non-architectural state to allow for reboots to succeed. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- include/system/whpx-internal.h | 2 ++ target/arm/whpx/whpx-all.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 8ded54a39b..ad6ade223e 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -86,6 +86,8 @@ void whpx_apic_get(APICCommonState *s); X(HRESULT, WHvSetVirtualProcessorInterruptControllerState2, \ (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, PVOID State, \ UINT32 StateSize)) \ + X(HRESULT, WHvResetPartition, \ + (WHV_PARTITION_HANDLE Partition)) \ =20 #define LIST_WINHVEMULATION_FUNCTIONS(X) \ X(HRESULT, WHvEmulatorCreateEmulator, (const WHV_EMULATOR_CALLBACKS* Cal= lbacks, WHV_EMULATOR_HANDLE* Emulator)) \ diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index def85988e7..e1611f8660 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -497,6 +497,8 @@ int whpx_vcpu_run(CPUState *cpu) if (arm_cpu->power_state !=3D PSCI_OFF) { whpx_psci_cpu_off(arm_cpu); } + /* Partition-wide reset, to reset state for reboots to succeed= . */ + whp_dispatch.WHvResetPartition(whpx->partition); bql_unlock(); break; case WHvRunVpExitReasonNone: --=20 2.50.1 (Apple Git-155) From nobody Mon Feb 9 00:56: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=1768398430; cv=none; d=zohomail.com; s=zohoarc; b=lPQSbxuJUTzr6/u4DbSBSmXYM617aqG/uMFdyXsPViCI1HMYZmkuNhLi+Ou0XIDsWODa1HkvPd5ndeMx7AAXfoufq6+KwIZiZArzfmnE6peDwHJWvNHmZzpz3ZqlrNLycA44mJ/2Y+uS6wDHk121KAU/uiN6AucBRQzUFISkcCo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768398430; 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=tKQ/4xbc6eQJ5bc3AgtiWrCRgVv5jEGUZv6XVNIKmZw=; b=Cq8/FICWbCZf0J8KrdXmhh+gYTg7DIoKdNUPc4zdU/zZlKQqFHjR2qaSNFGFowfc4gSM/OzscsLdpva/OCb7ek+8F3p9CKgGlEDxl70612hgLFIRnsXeCZ8COLACiHyJGAmfYQ/Z3AJxQ/LUIFOjJIkBbbCv/DsBoyFifSsiNzE= 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 1768398430414754.1022142448263; Wed, 14 Jan 2026 05:47:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vg1AV-00049T-CG; Wed, 14 Jan 2026 08:44: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 1vg1A1-0002WK-7y for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:45 -0500 Received: from p-east2-cluster1-host4-snip4-1.eps.apple.com ([57.103.76.14] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vg19z-0000vf-Dt for qemu-devel@nongnu.org; Wed, 14 Jan 2026 08:43:44 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPS id D25691800744; Wed, 14 Jan 2026 13:43:41 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-2 (Postfix) with ESMTPSA id 9F2CC1800315; Wed, 14 Jan 2026 13:43:34 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=tKQ/4xbc6eQJ5bc3AgtiWrCRgVv5jEGUZv6XVNIKmZw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WfDwiyLdYX8fsOMQjc9QZ6lvepUdVxsVuOU6dgCRwJa0jCIwMbz6w9NetT6CUpqpcZazacZGhJsBFVlsRXCyh/iGueCprlTmM6hNk7/1s7S+da5IcDUxIpd2PATVabBXKs567bjBwkQNQJ1VmKKyxAzyyuS8omGKj95fpHoEqa6S6YtDPjtpbAy47qE0ADuPRTvme8yvMUfX/U0YUOMXFUCUugr83oJlFrw5mcNbm85Twa+WNnbtgk+w1hID+YZmJRRjcG1Ied6IjN+4sblLJ2PjwpzxigpMnMqF3SgZZ13K2GPtKtvVjEE3xnhbJzo/r9RSKA9pFX7v5NaHetV/Bg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, "Michael S. Tsirkin" , Zhao Liu , Yanan Wang , Pedro Barbuda , Marcel Apfelbaum , Phil Dennis-Jordan , Shannon Zhao , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , Akihiko Odaki , Ani Sinha , Richard Henderson , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Peter Xu , Mads Ynddal , Igor Mammedov , Alexander Graf , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Cameron Esfahani , Pierrick Bouvier Subject: [PATCH v14 26/26] MAINTAINERS: update the list of maintained files for WHPX Date: Wed, 14 Jan 2026 14:41:43 +0100 Message-ID: <20260114134143.26198-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260114134143.26198-1-mohamed@unpredictable.fr> References: <20260114134143.26198-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=HdAZjyE8 c=1 sm=1 tr=0 ts=69679d8e cx=c_apl:c_apl_out:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=t-S863UTctjxRPX8:21 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=hdCJvu6vi-O6ykQZt0QA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: vadbpc9UKoKdWXcGhVeZYg8eJ3ueCo9t X-Proofpoint-GUID: vadbpc9UKoKdWXcGhVeZYg8eJ3ueCo9t X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE0MDExNCBTYWx0ZWRfX+JvxvjSInc+o 1HqBqSgNmYwV+tHprfSnIPo0N8Sje1w16Pbrutng7I+tzNM8bpAV9zefRR0hg2KDTRoyTaFpu1E NSaJGFzjr6BUDWMxa++QByiutv/yhuKcrzSb66PXgQMlETNXRXHGLjNc1UqIahm3L/DXd5VEtJO Tsz+4D+M1oBASTdbg0FH3WqU/fq/q0J0x3wEfx6uati2LGrgTi5hoTGDQ1PRE6A3tQTU46+dfN9 dSIxqoJt3AM4//YXv+NaLzgYSmQq2oosHtIgBBBQg4dcWTzv6/jSGYt3/gpXsUuvR0FDyKg/jW+ S1RkZ/Qz11U1sYGOJ9J X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-14_04,2026-01-14_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 adultscore=0 clxscore=1030 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2601140114 X-JNJ: AAAAAAABR9ENd9/TpcvK/SsPe1GK/xPDa3wVuXcSN5RG1bxlqZ0klWHgUYRSl+q2CRfu9fl7i3V1AvNY0jSE1eNJSJjdOf7wrUDSnz6Rnm1ZCut9iFr45+VSV9+SE8BPD1nuozHooHTk0AdoyrVRCPN4BEq2YwwIsHa/I1/npzMKb867+ODSYgkHW7788TQgFu1hhXi59/Be1CDM+2VZ4GuB244R9Ozs+lLs1TSjJTclwc6IbuXJOIExKWM/iO/RRfUYvHDrOiTU8lJyZCRz/aZaYuSdXmkIPzTEH+tSEOVpyBqZGMqPQTCySin4GzW2iuhs5F4r7dEb+hcKBZqd1tfPPO1ROOTpu2YJQM5uCdjPMYoES3xVc9p1qqSo56JpwbbZweGW4Tze0ExaltRdG6Jag7f8muZFKOP3LTOmNPUZs4NZxZq/4zWrV3XQtYVIToBMFVEU0Yr9I/4nvn+4/4YRD+fIozOEnWrWF7xZUtHsNPTkp5YYh046/BApzDoFY0VR2qO6ZEBiTMs8caGZN2kwp18+fKiQ5JNkV+YW9th30yFteEEsPXO9Moe5oQGYqOuqcU8oaeajF/fqOw3Re99+VQNNrGq/UzIZBWDj20k/VHbSEmmTltQtXLc/VQ2OZ59ndfH7w9ZNa4zEerIdyJRuZZND0iWdj8Js+J9xBpCiHIAm5JYTcStDgqU5nCyvVstw7KRCrapRWQ1Ze/OBnypbVvIMhKQpa39oHqz9yGO7pdPiDmP1MOtlQFj036xwtS0Nqel+nxrq16QMGlcf7dE1FkUBCJuyzep+FHu1+wy+HYwiHkr/xqxgFHg41EosUHTqYABGJSPK/GKJIShAjXWr99SZBV1743frC5ezPjeZM4pGIP20Jtk5jNAZPh44HeSvY9MfLle5pmBspFoEkFFAVJrQ0ODH43UL09NfSx9Sm9y+huJmFg== 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 (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.76.14; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable 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: 1768398431090158500 Content-Type: text/plain; charset="utf-8" Add arm64-specific files. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- MAINTAINERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index e66c764167..3190f1f354 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -565,6 +565,8 @@ M: Mohamed Mediouni S: Supported F: accel/whpx/ F: target/i386/whpx/ +F: target/arm/whpx/ +F: hw/intc/arm_gicv3_whpx.c F: accel/stubs/whpx-stub.c F: include/system/whpx.h F: include/system/whpx-accel-ops.h --=20 2.50.1 (Apple Git-155)