From nobody Wed Jan 7 09:26:51 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=1767053147; cv=none; d=zohomail.com; s=zohoarc; b=ALrWUkqRq8vMmN9W1qjT8gyRpLgk29JhDZD5yAMhdb0M/rhz4dEgnx8XybZqYaxyrifVhUaXJTF+eVDTlXYbE3vn0ANljq7ZJ+kSw6OS3Z+FwlD91RIDQD7u+pHb3mCC1tHccpSbUUdcJNc8qUBoyDre7VQhjJrePAColDPqWrc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053147; 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=f+GIQnfWWlQmAJA2mjQnJL7KpctI93lWldMR/V0QEF3LQlcIWH0J5SOAJPfYv4voF1MKvMP86VgB07WvxVslT6Ew4ohVt5s4IKZT7lrmogVEX5qQBjGIZf3MQGEIUKpd+FODUp9uaRM7eoU71WD9aBkDrqyLwvCNVdlHBhntdjU= 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 1767053147254909.7443556427961; Mon, 29 Dec 2025 16:05:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNE4-000665-FW; Mon, 29 Dec 2025 19:04:36 -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 1vaNDy-00064o-RR for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:30 -0500 Received: from p-east2-cluster5-host10-snip4-4.eps.apple.com ([57.103.79.117] 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 1vaNDw-0003f9-Jf for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:30 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 2BAF31800467; Tue, 30 Dec 2025 00:04:23 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id A4C6E180044C; Tue, 30 Dec 2025 00:04:18 +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=U/0VYWGy0v0801Ea7exkY1qcvLhYs7O7zgKWHhCeBWmD+2+4l1FPSriOHZJmb72hdBs721NHMHvfX56JXKmPOb7OTlZD/yYtNxQah+hY4kDc1yYEudn6Q2bDoBhg4O7NMDRDHeP2T2ASO+zLhzztamAM5n4mZE3nrY8fHi+waghEY3R68SiX6h8jlYVL9HfYFpCQRs+OkyPNm844zSchS0k8syWw2pbrMTUSIYlkVzWLOxulDRc84QC4syKZeMv3aAggWozqVijUxkcXm1PHfGJoj/T5JH21IEiSHCAaQI7b3P5ymQalAokz7kVBCrpTukC0+0q+kz2+M3TgVSRjaw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Sebastian Ott , Pierrick Bouvier Subject: [PATCH v13 01/28] target/arm/kvm: add constants for new PSCI versions Date: Tue, 30 Dec 2025 01:03:33 +0100 Message-ID: <20251230000401.72124-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX1pegLrn0iQNK AKqU/CW6v8+Hm+GZ7+21plNHSkhgerePNubAFnEwrUfKKvMbeGbU+8y4VkNiHteOnWs3DnMINBN mjkpm0WNWRTe6a/zlhYl7O/zJMC2Qod+SQIUiuKRgMDN/KQUMZa+yIepvcM1ObDnIl9Y8asZpqr kuKkeGDWKgsbMS1xGXFf6wbDAi0jf4Z/nwDOi1k8rdPeT4kexQlrqzqwXf9DKqT6uKjGhPOswWH 7UB3BC8uZ6oO18XnN/g5XPB9YDPxC0edeC394EwMKTMtDlZKee9LYzo6rUP5dFsLFyCzWK/2quR NT0uHFKQd6AE/rCi44v X-Proofpoint-GUID: _n_W7yLKmlDjOqLxhzQnbsD2fLHVUQBo X-Proofpoint-ORIG-GUID: _n_W7yLKmlDjOqLxhzQnbsD2fLHVUQBo X-Authority-Info: v=2.4 cv=afdsXBot c=1 sm=1 tr=0 ts=69531709 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=KKAkSRfTAAAA:8 a=DAm2dGrMCKCYv6Tpj9cA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxlogscore=934 mlxscore=0 malwarescore=0 adultscore=0 clxscore=1030 spamscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB5ur3/7IPGrlS0/s0d4P7sWXGT866xmUKw/43k+NMBw12zkTvEHpXnnpgHMBPLjzttd0gPfUbl3zFoMk5yaKMenmM1Kkk/PKJJ3f+c7Q2WObQXQrnmSyafoVMK8ZCM/0tmpb2Lwtlxs3pNEei9uBhUlujGRLFT0jQ0FW2gxsAwS71C3XH9Xtm3iQYAcLj1J4CQckGp5MqtLrE9pAVstxUQvZzt+aGIK41YQ5mXJe7s2DpEv0kfI0krfaizgw9d1wWn5aT06dhFl3ouhJw2cmvzl/zdpdTNXyy9XgUQAsEix+KMABlHt+LeAfdqJD7pb+2JJdlVchgRKT3sHm9G7BgYXFtebTJQEXlMWdY5s7eiwDWdIRvH8y/ogQ3zUE2kH1/CZDxplatPOPjoSxwnPSN2T/tb8bkEQZlCkPaAbyF7wwZz9UkTAE5sAVjuglwIzFNAo2PxYxiM5nf1UZ+QiYg8wP+6kx4MhdaTawOh2LRlUhTmBAVKQRdWNCu8C+dOMwAeWM1O/i7NRKGwMSY3l6bxf3NZjF2RampkMv1D+pGLEPuVzxgH+XxNJbqgBwNlZZ8YIO7LUPpZTlb0h+pB4FMDgK+BGdcmALa9KcR2/blg2mwItLXhPos+2d9tpYPgv/LjGLA9Qax0Zuvc3RQ2o+OT8ABIFJR4KNtyvnqz/eJERp/8Ui23cAvTGePid54Kx4fWGDKOKsFrE/jYIC1NKx9ENN3KC/lDUJfLfyNgTI9q3VN+hqtIRsqv58ae8LlUb3/iEIW8DdklDDQgBIscerqukCQVRsyuofxu50f4ZHRrDWvtekbszYIO/u2fYkL6ahDr+CQhtqNHC9q3lfUMqd9Rcc5P+DhiDez5OgznzEnlBfaug3YDzC/2BMxFNWavvjc50DjCzu/IWkyCQYMQQYAkPyJJ9tVc1P5ZuSLcY8dtJVd0MJ+U/wEs0l0hh5vWGqtjXcX 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.117; 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: 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: 1767053148342158500 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 Wed Jan 7 09:26:51 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=1767053420; cv=none; d=zohomail.com; s=zohoarc; b=fi5RswOHex8CjFo1KgLmu9+7MGn5iOMv6FaYZ08JhQjc+9EN1PeB33qd1pQT+46aoYOdXfWD5k43GXpuFcEJlTkZuefvDLQX/SRJLmMWBro2uEPsWIOBD0awZCc+UBpxHavH1pIkL8PcG0/j9MnYvTt9/9fPPCPsQlhRinmgX8E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053420; 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=HU0pULAKI0bgHBnML5lTCU8j0egQAu7mZ/xXnxAuG59Kc9PANg4Pi35j/pMtIw9HRe+QHoB0khBkuul7DtLhg2+2OZGEGzJARyuXtgYHyYgwGcBeULTGKFHUuwx4ghMRPWpCnuAoZ0LMtY38lOOp26Htu/K9hUKvuBCFNZZgcbo= 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 1767053420895937.8228719770201; Mon, 29 Dec 2025 16:10:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNE6-00067I-Iz; Mon, 29 Dec 2025 19:04:38 -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 1vaNDy-00064q-W1 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:32 -0500 Received: from p-east2-cluster6-host2-snip4-5.eps.apple.com ([57.103.76.186] 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 1vaNDw-0003fD-Sn for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:30 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 088FC1800104; Tue, 30 Dec 2025 00:04:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id D1AFE180044B; Tue, 30 Dec 2025 00:04:22 +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=IeTO4EAJaskILkwmrPSG4kX3kFNjuTZS6XDIvNLHlgtk5FRobL/9yOj/4sD6pxOI/qJRZ3IXcgsLie3ceXAFwsoFMFeFkC9ngkQRXkXWlLkOIXgIrEqTNanEpfHdQU/Boxc2pKB+ShdMEH2b3d8m529qiN2XB/2b5qMBIrXaQFrjTGMhl79QE45pz9kxibdDurMCtO5B2uxzYvXN0Nk62xHFYFYC33AtNwbF6B/erHeQWFaV1ut7nt05EukTr2N+jJqGEgqmR+hTVqFdlQZ5zyrRysbmgxamo5NqJD7mfsg5t+TYuAqRhkTJOim5MFMTxgL/lbY6MOewnPPDTt8aMw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 02/28] accel/system: Introduce hwaccel_enabled() helper Date: Tue, 30 Dec 2025 01:03:34 +0100 Message-ID: <20251230000401.72124-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX8A3e5VI9gTYk 4iWLrn3Na7gZVtKmmnTAq4Km02QX7BtZ9VC9BWMiIJNj23WZz7bnDVnbt4nAhyVUFS1ROWz9DNH 85LmP3LrwJU4qiRCE6Lv3hOKSylDb6zc7m4y6E9JEq7lA0y5PQ0sP1wsiOYp/iNvfoLURt5/8iX RtAEwZQGyLcAEMGnGaNZg5PCae0kmTo+h+DtNeZkqs69NpxRETrbo0XYJr6v83FI00jVIEVpQMv 0bTwCbWEImGuwyxiI/NgzGHNZVindlvUPT7sWUpGUPfo7A23//zXzdvRTKvPzy8kSQw2VJ8RlHr OZi0E6uGVJr2COfVCaG X-Proofpoint-GUID: GYHqfl_KwuqUF2XqLQwV6LElwrRIXSEF X-Authority-Info: v=2.4 cv=GMoF0+NK c=1 sm=1 tr=0 ts=6953170b cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=zYwLhoXY7WJC0OmO1EgA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: GYHqfl_KwuqUF2XqLQwV6LElwrRIXSEF 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxlogscore=999 mlxscore=0 clxscore=1030 phishscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABIm49ooLjVKuAwB2QOZgn3wUJ/U7uK1cBjRqN+lXbVs1L1KCMcM8/mIstllxM6cqkHbkAXR3sWjTpYHozwhscDyIyGDYSOHJyou/tgB7bqCrL0LyAbjWs6ZpADNcHFD1WX8opTu7i90e52rpqrxf4WJG8o4iPJHWoScbluF04DUgv4ZyR+EYJcLjyXvf31bInHlrM/JXGqmKCvt+gMELVppE55a2LShwJp3qBdrSdqQfg3OWhA3l+dLFaHgS8GqulvzmDeTZGVJrYuzpyVbEt94tpG3z6TuPhIz/+0WbYHJyFbC0E2FRwZokbQmi+J2XuamC4KnKcVCW7zAlE8EGsk1gC5dAbgli+JksuwQtzhElmCcLrnjp3HyPAHCLC/65ernGY2TliUBbiDt2v+/miEjmhyj/5fE2msoDCvGNxD5kzob8E19xDRHdqGCAjt4Y+yVSfFLvpc5leCWooHsq/ITGafnnTzlyJjT4U0ft60a/+CVP2dang8fXbiB577pUU65z4QZ0t3NKJBCcjsofOx3Y+ePm64M0O92AJqnQObPTrkpyOJXIGLcik044cyA3E3mO0gmAb7nReOQgQJks4orhS5g15bv2S3fnj18sk5MiAMneEhxihn9HnKk9P3l8Pg16J3LHGvkcPPqLF6kbxdySYBDC8Jt58AuU0v3JksrywTFDH9Y3yqHUsMKoa30QUMke6x2El0fsa/LXyzd9cOg6cY1ZsBr5ifKzEckYJDcd36h4hu+TQrHaXX1G9Ne0IzEfiEqYFmcYvle19zGEkCLvY1WhbOsc6VPf3Hod0MbWOQgnRCLIoxJoe9moW9U9x7VVKMKAfDr0Br8NxiXS7rQz2+53AMkP2yHVAEodH+AbmcLJT9YwMOO2y2V/PmMklUkigz+JoobulOvuVaSh3j47t1HWxdjgIOqFVxK0EKxrSy7kS7csQXK7+R31WfSmJCMcn/MAcijPO8T0= 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.186; 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: 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: 1767053421257158500 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 Wed Jan 7 09:26:51 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=1767053203; cv=none; d=zohomail.com; s=zohoarc; b=JkF4zDexY/WylNUnfr4owGoHzcBA0o9YTeUxqIxjmtObTYbHlbZD1TTSuxUmwbRrkYeG0rh7oYjW59kZS+1H/Ssbh9T0p8NJp6DWN7wLo9xOVwnKkf2AdYBmZT6sZbtsbmTgQjR8yz2CXDM7LvkdaN49A+UL9tz1lVCHhAn4ziM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053203; 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=YGYVjBOXjPoeL1SGXWJGz57R4VgqDSfei2lG7n/c7EPuqRJxhvgeRWsq8Z1yvtiEF+DynnPLf2qWt423EdoW7ihIvcj32YInVCuBqSbOKftY1NQD6DqbcLnGWPEViTH5pv9gGia5bQYngX5nzqv33CrzVn3jTrWWicruSmxjgCs= 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 1767053203444637.2827143056539; Mon, 29 Dec 2025 16:06:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNE7-00068A-JV; Mon, 29 Dec 2025 19:04:39 -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 1vaNE3-00065v-CC for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:35 -0500 Received: from p-east2-cluster6-host6-snip4-2.eps.apple.com ([57.103.76.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 1vaNE0-0003g4-RB for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:34 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 2FD6918000BF; Tue, 30 Dec 2025 00:04:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 22FE21800476; Tue, 30 Dec 2025 00:04:27 +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=Se0g1VKRg3DjgzK0LZc7TwLED6q3ZUdxA1NWOSx7r1uxYRlz25akrcG0/hlVgNvkweXnW1xCrfOlgcOKiqjTOZBTPppZfyvJvm/cy73Q+FazL2phxOPV/zIjsGJ7AFs+RGE6Ij3uIo6K4YYRuz12DCKfd4LaRpOxqUjPtsBKH5rIiYC5hY9S1U6Pp7gYyk66dx9eWgkInJDUJ47yfT/XE6vhNwKIH0Dzcn+4gWh+Sguzxf+6qfdO6WCtX9wT4SsRI4P4WVLSvYvTAaG5udyfrGEaQYDeW8WCcew8xiLAeZocvRQCGpVVLi9CQPTPMfvnLpgYabTe61hkzcxOKsG5Aw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 03/28] qtest: hw/arm: virt: skip ACPI test for ITS off Date: Tue, 30 Dec 2025 01:03:35 +0100 Message-ID: <20251230000401.72124-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXyXkUAZd4ITq2 DjTZnkeu1btv7GBNG3EDOHiMnr3h66LHdc2h30gqChlIzP98b2EUKZ8ELFhOP0EQSNXs/xMQjlg bksiYsvYiiOyw255fcFHDQCJKmPfqCKB+83C+o7u8d5ZCefPR4sWMxTAdi9IkGwhVUGWb56/QJ0 xaFQEJg/4MWcsfMSus7xW+bJR+6uNoQPAKKBBo7sO3/Aw1dI4EiOqIFICSbRebAEd8KAEKw9sTA n+ZjzZQ1+7MUJOp01S7cR5j0/0Mq0G6hbN459blbbwgZQl3tREQpZPXBB8L0jQWQYLF9CQX2noW XQJ2QUqltn9PmMiUGjL X-Proofpoint-GUID: TlCDSoLcv5FADbGvH1upDxAB0JBZ711U X-Authority-Info: v=2.4 cv=d+b4CBjE c=1 sm=1 tr=0 ts=6953170f cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=1t8nasy7xzbR8br5Zw8A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: TlCDSoLcv5FADbGvH1upDxAB0JBZ711U 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 malwarescore=0 suspectscore=0 bulkscore=0 spamscore=0 clxscore=1030 adultscore=0 phishscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB114fQsAYS/fvcdnwLASkJw1XctKmQQi2Dxmt2DH/MLBbzoUp3jDK07Yc4W8Ou9QSsA+RBWib2eX7cmrodwyz11mNqzIGhKOziIQTCz2aRHRt1P0jQweqaSM5WKxav0knMPiPjRpLTlg4XCkG6F32pUT8TjFj/wcZgplUuTQC5aiBpieYqqrCTO0yl+17z5CiJqWVCVRj88/gSB65G/UZ0vm0mmwXq+MKaWumS2sLTLIpf4Gio3ausMqyHL1ZZEar7ABTTVh2Yvm0/nuRhdo+jzE+AkB0UfZCIifheqtEIYkvX9b4FYpEBWTqBPPwtxwJpUtfUbRGgBiAEf5ZMv62xybRqOIdQcWOIjupwG2JP4v6ht3EFVMZHNTZf3VPhA6IzFg3vjJarGnVBpQbmnZUEVqB45FPWeQk2a9iW1zU/r6DJ00kaDlJ3cB2ARMWZw8UjyjCjYA7Lh9vrB3aYbuISSPLeKcfcAte3Jld3+1aBQ/LV2GlaJgIdCIskTYw6yOBfNg0NHSTme8QrJoqUQ3u9esZxOpvWARuNF9VKYOFnAhqhp7xjoQ9h+m0XKPHlkKht+8sxgMtUnlscgVG1WH9SqEaOlsy0UZ1eM9dMYk+S7ZcLna5zTIpVbK0gDXp+/Z5KLO3qWKSm+Zj1QFz9Pq/+kyOAIVRpA55MCAHrMCN3fC1+DNsp/cMW36yF4ZhchMaDdNlQwcjXX5kgN3rTYmz7SKdS2LPtw/88En9nmCbkHZSVUd2Kz9IyQcWro/yLoPXM/nMeSMG70wbLdA1Sr7BhTpMIxz7ngRNuiJQrYVZLhjo1SdjO2M5PfQeEGe3ACSf5G1tSk2iOk0Dbcvzlz50ORDjYtVD6jqMW1yKSMIhEV0JTyfJMLeKsXq7xbcDLr4kLXkK6BoAFGl7Ee6shLYkkxgvROgHQ5QJTgMEf3WScYtk0XJwzeLm3/hHwQAjYn8= 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.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=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: 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: 1767053204401158500 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 Wed Jan 7 09:26:51 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=1767053122; cv=none; d=zohomail.com; s=zohoarc; b=agsTkQwC+nHsl7mElP63kt1q4g0Jg51rwo3pZ92xh1kOFiDavG0jih014qoX7UKgAvO7qqOF6HAYlfQoZm7F332R8LdTC1mJ7nDgc2vOoHrcE0sucbtgMNNUeHdH/lw/h089ZOpIfAyPeV+0IJ4WqJDPBs8ezX/ZIENbqYpvuug= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053122; 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=1eybbgQXT+wf9Pb17rKnNcXISNCmng16ZKUPr4ZmEzE=; b=bwzKYEOD3yDru8Ju/jjTeDMjQyt6yfymFIYvE+FmECxDuBctvpThyDt7hyYOGQNJFLgDshCDg2O3Rqyjqio1rjzCtuM0jZ3rsqt2HmTNmWl8ZEdGcBvOJclYhpdkfHkOchP9aRW1aqCtfmpeKngy3kNrQYa4l+wkqGvX/RL7U9M= 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 176705312164485.18170922506692; Mon, 29 Dec 2025 16:05:21 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNEF-00069N-Fc; Mon, 29 Dec 2025 19:04:47 -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 1vaNEA-00068O-0v for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:43 -0500 Received: from p-east2-cluster6-host11-snip4-10.eps.apple.com ([57.103.76.241] 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 1vaNE7-0003gf-Nc for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:41 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id BFADD1800476; Tue, 30 Dec 2025 00:04:35 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 4ECB8180046E; Tue, 30 Dec 2025 00:04:31 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=1eybbgQXT+wf9Pb17rKnNcXISNCmng16ZKUPr4ZmEzE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Y2kD3RnvG7PwNOH2+JBo2GvEyB0KfNqDQ3CsRUodSOSuxvmE+S5Mj0XQVdfVVx8/JyqO8b5UdENbndCAHw/q0ulbXUpDi2euedbZ5y+5sIfP4hOtL6NLXWyKlwBoypU+ILjZrbrIKNA8v9XWR2Rw3lOO4iKzQlrreB2+whBsH5EuO/lDz5wpuDPHkq6X/svWxjG4nGlJ5OfXvyLZt3HBHX2b0vDrTf6ZY/pFQrij9TayIyYNf1st2kmcZtLuWAEG9cGWjrKPlft5/AeldmKLaU3LKFdOCslyH0XZQpnZgwNg31cgep13sX2uBLCi3GjZtfy662vw4F1BOdjUNeWN9g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 04/28] hw/arm: virt: add GICv2m for the case when ITS is not available Date: Tue, 30 Dec 2025 01:03:36 +0100 Message-ID: <20251230000401.72124-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX1NkFJZhJZYep B+OWPtnvyvElydo1FT70uo1JXc9wsG9LN0rGEFdksjkbMaYpy6u4bGd2dotTyvtYWsW1Sfxsq86 nbCfcb1/DXN/3xBeFPX6NTSEEE/OUtHetDtPVjk4ykYFrR2LrHFZ5BRJcWzGj3xyT0D6/OosKpl Dgr9vZTAEr9PuIcp7LHmO4TK1MsblEco+qimUW5F2jeROWbBtTlhRotAQ8saxdEiy3k6+NSELwy jzyAerPR7clKCNshXTFsm3aJDMcEK11Dpk0ds+zlz9R1FGGdAGzITN9X4QhxJDeZ6pPLNyoM59d 4QO7PG7UNFyBBUlENca X-Proofpoint-GUID: 1Tiv06ewnzmYuAnd5jb_6sQdBBrmbnti X-Proofpoint-ORIG-GUID: 1Tiv06ewnzmYuAnd5jb_6sQdBBrmbnti X-Authority-Info: v=2.4 cv=GOcF0+NK c=1 sm=1 tr=0 ts=69531715 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=8tVNtdTugjW4QW2w:21 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=5LJxe2L5dRr0YdfDuXsA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 spamscore=0 mlxscore=0 adultscore=0 clxscore=1030 suspectscore=0 bulkscore=0 mlxlogscore=999 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAByMo3iUUZvi33EjotqEJj3mDcWeds0qkuDcQX0Dl/lxg6+sizeLT3hzflL9j51wfKPVUQnSP6akSHwZo6xirOHKtoeRAjswbpb4BUBMuiEWsM3SSdW+eQccFXECzziZtcJ+74W3vVLseq4o6hizZawlhfA9VPEgpZt7bDOFgUBclK/l7V1TkTUxL+sPdizEi1x2/9TlMQa48I6KyBv/VJnhsIpPJkW0xdb7kW5GdRL1JZ+o1eAoI4KpkATbKUOhsS1pkzQALVisWSa4ff7UyUUkwXfI/6nS+1KsxOJiGWe9dkBcC4y2RFRuBLpRcN5PQPvWq2A87CmbbPErrrrMSqURJXD0JHRm8lyT/4jGOShWzgsXtAkEi8QD0dt+dU3TSN1Yn5MalyeSt2rVNvWtLHfA2v0RTp0jTusxe8SP5WU1x7vsLmV89bxYx2Glhbc2DUA9sCJhrjUgyWvTdIsoITNYbPLyiHC/uKFw3Ftum8gXZnzqVnG+XZnUUKAA9hw8xhWZNDskDE/flX38j/u0fbYvfZj+aYTu+lqdxXpeotMey/KX2lOBBLa9zvbVyO+5KXWme3WnJ6T6ATDmCzxZjynmAJWX29sw8I8wzY8exuC+7RYjwHAk0JSmu6R8n6UEZzIrkmBapUgMeiETmAb96MWQAcwz20GjIYE3hSyQHSSLGktoO4dS62LZ2b3UwDWgGGdGmcvGMab0yOCynyf+R3mOJPE4OZtN5vhvlQUnXiM22Nc9QpXRnbPuZzoLGmMWw9EOI9oP7gq2tet1wfOWxvUBPUsg/whzjUEVjAqTowP2DUwF/09gFeGs32Lef4CnWibOxucbx8zHtLMXTelzL5Tglj/bBbXbDnAZgtBv0jClxNXK/jzH7FmudzlDSPa1IEpNKqKBOkpYpZncjFWjIiJMSYNBCoygrTc11rpiNIx5O2foesnKpoKeacgDqJeB/cMg== 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.241; 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: 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: 1767053124584158500 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 | 16 +++++++++++++++- include/hw/arm/virt.h | 2 ++ 3 files changed, 21 insertions(+), 2 deletions(-) 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 fd0e28f030..0fb8dcb07d 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; @@ -3533,10 +3538,19 @@ static void machvirt_machine_init(void) } type_init(machvirt_machine_init); =20 +static void virt_machine_11_0_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(11, 0) + static void virt_machine_10_2_options(MachineClass *mc) { + VirtMachineClass *vmc =3D VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); + + vmc->no_gicv3_with_gicv2m =3D true; + virt_machine_11_0_options(mc); } -DEFINE_VIRT_MACHINE_AS_LATEST(10, 2) +DEFINE_VIRT_MACHINE(10, 2) =20 static void virt_machine_10_1_options(MachineClass *mc) { 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 Wed Jan 7 09:26:51 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=1767053139; cv=none; d=zohomail.com; s=zohoarc; b=gjnzDc0LBlXFUugY9O7YCaijv9zGKxLpImJFMHXFMRlCi6fQJsXREwOn39gILCo+16XbY/0v9TsBNuTSbRp2vylhRUpFSvHK0hL2Mx6ZqTPMYEJC+mIVrOQ1j5oihMHkVv6U2LNX4K2V3zWdV8jjWHn55kM9LEvwB0xAeIX59sI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053139; 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=Z33f0GqAvGinloAsfyQ4cdt7phJ8Kq1QoibVSdU/CKdDiFn+fFWe745S/IFxUXqKWuj2aHTDZ2BeTaVfXl8Niw54bX9NWYrZH1lCnur2e3DlggbPizv0o0ltdkR0jhFErMZ01HtDIU4QXP8gcE7de1suNA3dsxGqmIOSqIKI4Y0= 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 1767053139949253.6950150763579; Mon, 29 Dec 2025 16:05:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNEJ-0006BL-JR; Mon, 29 Dec 2025 19:04:51 -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 1vaNEB-00069C-JU for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:43 -0500 Received: from p-east2-cluster6-host11-snip4-10.eps.apple.com ([57.103.76.241] 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 1vaNE9-0003gn-3N for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:42 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id A11AD180010E; Tue, 30 Dec 2025 00:04:39 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 95FFB1800470; Tue, 30 Dec 2025 00:04:35 +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=LWqnxoehwIouIJKzVFdnVgGgrcd6+I55ZGmrGbB9X6LBX8RtBJL/z3k1Mp4VLsrzMw2o7Ea4d5Bm4K5rYxMeX/kmwmxlwt4Ntoo6Y6MYReIsCeTXfYuiVuDwr+OVet6cBj2g40EW/P7vfLh8qlYU0Xkp/IcrDozVN1qYiYgrMkoHle2uX62sK/LA3+Hzr3SnmptzvSGL/hyY8qLW3jZ2J9TjnQowZA82F2rJb9scTXGv4FQv9FjjHYRkPYEga1lu1rzvlS+fVhVuaVeJhhi1DbDcMmdDVo44f3WlQXmIsGnSm9wYwd3GfsS4FU+u437NiAri3TbCB8KzkmtHbI8geQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 05/28] tests: data: update AArch64 ACPI tables Date: Tue, 30 Dec 2025 01:03:37 +0100 Message-ID: <20251230000401.72124-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXzr0n8kjFQ0Rt 3jGuee6JRWluTouaBl+hF9EhSv4YrkHN+6FAmuVyZ5BOziohAYR54DXk2wjo5XIJG1Uqn5tSXSz IGt+2uba1RRIYEjUev7voh9lXpJu3AiKmd2YMlePR8VZSJheVftWMJ4SdZsFcBDN1jKSvhGNwv3 D9gYHTI8L/FzO4P+7p5YO54zChLqd4Hmphmr3JxoDAHysQ7AMz09z1p+KXyzG4B0eClx8qTB5hZ jEKPbYsBoFENDoJkYHTKK+f+oqsxm5Pce2NWfobVwgupxx3qWd/mYKCqx/EZ0M7sNp+WOMbfnJw z6bh56pn9EhCpZHAiqt X-Authority-Info: v=2.4 cv=U/yfzOru c=1 sm=1 tr=0 ts=69531718 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=CvHhVyPyXxbOnLnphYAA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: yryoRvJjgk-Di2T_fQuzoPwibFl7TpTY X-Proofpoint-ORIG-GUID: yryoRvJjgk-Di2T_fQuzoPwibFl7TpTY 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 malwarescore=0 bulkscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 suspectscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABw/acp8kOWOfo3bcp1IUcb6PCvVXY9axmqwE6xsmq4aE3Ucqukr6557JdaC3ubKAUwbNALTF3Uq+NTd1ddx9xz58cayuA+IEAGky7jVhFfMLdNnqEWgaR3MNrzo2ZCkGs09hdZG/pnNVS31G+MOV0MGtyvFNgX9rtAu1+bCupToe6wvCyB72rmqRO/hnlxDmWu0s3Kx8VxGRXufksd5HcegB/5AS+8SJgqiZO4gMkvU3zZ1cuchmdaQMyShkWtRUNsjbFy0GazUlwDGIOTnnO6qzomLPH/nOXbOx+TCLSF4Pt9pli35+JDHje7cgPRof6dUFmVELtBGuB2gfDBx10JU8MrKHxlBwNtqU5kGyZBxaSscKdANXUu+N4Q1ZSz+zXgUcz3KowGEMoAgXLV7T+2QwfZ9xdyw8+eGYB1NzTJK5T0cAt5pw0id6fk40ZpBdsTpa8QiElTStkaLnsGYvthxd7EaGWk6V3AZQv3swSvNnkqLlaKO29xTPFeJd80SrZ5ueXebCALfGqqQLkGvCE2F0+Cch/aFyjl/VBE3jZEnX3PpRzLESXjtNODCyQlrRv+b9hNv3USIxaRaYA2fDrAypN7Q8VeN3dboD9kvCbqeq514F02MB77Q+vYUBz7B70UttUUGXNJ9qmHrgPhZSpkZxtHNJSrYChk+zWgv7LiJmpmz0CJ4vM8HJuWR0F28MXUiiwEssDm82XJ2wLL8lL4g8/wscR4hBH7G1/Y4D454d3QY5r7s0dRs6XRwb0VMGJyUSffR+fLxbcwFJNGYtLile17KjemTWK0oL9LIxDbK7bRB2pSHbmnMgGk5zovsX4m8JG1/Tx3v0cOZvMDehywcHV8PyERALP49h6UayYP7leYDnCo3ykBdXlnHdFzvYeW0GeMutdQdZ2siRVA+K16Ds2EMVJAffqJtkjsp+CrXxW231KDhIJ/1RVpFHw9p+hZxjEiEuOYg== 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.241; 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: 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: 1767053140974158500 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 Wed Jan 7 09:26:51 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=1767053189; cv=none; d=zohomail.com; s=zohoarc; b=lT/LyaJW7lTG/cjSHWhpJ/Un+3MAOqZkjqLW2+rO+Bt5hl77W+12tEQS/it6Z7PcvxsIzRAvcNaSzMht8VU//d9843rwCQ45D2q0+Pdtt6IE9A+IB9sKLbJlQDI2c6Bwq+CG9SNze4+42c1BOj9DmisA0szoewhIlXQrUHLNd08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053189; 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=I0HpQlmLeMnsVhsgmIJRE/DJeIbftWJyZSQLdGKoz3c=; b=KNj8Ob1MXav/42st6m+kYggxbKB+kb4gNqz8JZskFSqLM4XZLGZbxYoqsLLlQrcZzfPqaIcTS+b+BHWIuRbEIxz8mYLu/xuj9XPwYg3uLjz4Mh/M33VGB9ZpEGo8raoA8YVoPGkUkNbAAPmiEK/FuaeE17AdtCDya9IAgzSaujg= 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 1767053189784717.8746695203109; Mon, 29 Dec 2025 16:06:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNEL-0006Bx-DR; Mon, 29 Dec 2025 19:04:57 -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 1vaNEH-0006AJ-4M for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:49 -0500 Received: from p-east2-cluster6-host9-snip4-2.eps.apple.com ([57.103.76.193] 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 1vaNEF-0003hX-7B for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:48 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 2A6551800470; Tue, 30 Dec 2025 00:04:44 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id B8FCD180044B; Tue, 30 Dec 2025 00:04:39 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=I0HpQlmLeMnsVhsgmIJRE/DJeIbftWJyZSQLdGKoz3c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OWR488ZcLaMoncq8goHO+8O0uO41kv2m3nCeJ1AiPqcBKq+KCwXsI92ubvjQLtq8M9QXd9jRJ7e5W34Vqd3Cd6jdcqwbaqxrbD3eUTTO1veCFEFaBG1fJWp/w83uY4Pu7Lc8Ocs2Ne2l0UmMV+GT2TW4XY1USzLneEpoAWim9fnIVb10cw0fRRCe1y9Q4GSaWJgkmwKLcYdgTyqEI4mtwsbxYPE2t2PeMINvGO3MOS+XHRAEBgNLM46An1krYqHip2Gvzw4QgwwKo+S8QY+GqB/RDqLrEjb8FlIsUOf20Je5NVFOt9P4uEJY3WuqyrCB1Wk/iu+miGn8sWmdg9pQDw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 06/28] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Date: Tue, 30 Dec 2025 01:03:38 +0100 Message-ID: <20251230000401.72124-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: L3f12YKyspPzAI4_m2hxj9qtLvBupGlY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX+HLgOnrpmZkW Zph7wVlFZ9XJj3SVTVdHntyPUT4BIyAxQMokEfDzguatu/EFaCogeuSoFlyCLYaWC2cas0RXi05 KK45e+IV6KgGX8Iv3NKKCNlyvv0UrtVc8fzMsPHkQBx55D2nB5J3pRtQoyvmkF13iwRYoo9MzOE JIk7i9nnCCgBWY6xZmJEpgfbLuvE6q9MX0hHrzP55BwB2RnIBCsxWCiAloHx18mCIeoYgfjn/AD BDOWr45Dm+qAekL28uK+xnybjMpIa7hF+X2XGMbDq/BY/Rp5FYVO1DRS2xrbc/nk68/dBgbo8Pb s0dh2XU1tV2WhYlWsRy X-Authority-Info: v=2.4 cv=SLJPlevH c=1 sm=1 tr=0 ts=6953171c cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=065Y4zqepXN3nrMe:21 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=eCCvHKTOcc9AFgEG6kwA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: L3f12YKyspPzAI4_m2hxj9qtLvBupGlY 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 mlxscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 clxscore=1030 spamscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABEO2s6sGoWyzZvFjF4ks0ANEB0LFbKrO66pNy8gU9wwvjRnYizKFLFa1mzGLSxHO+Q2lmTVOXBCRd2mDHbUQvGn8dzyuepYtNLSlTHblC4mXkiBdZ6Cy2o6KixS9+Aut+3mbJhINEiyoSacIYM1RwDn9A4rFVFrmaU6Dx/Bfix3QtxwtdiNYWcSpHGbENE/ShIflaF2H3EoicXnft0EbauknZuGUjwbaQKcuhpow/5fodM2tYUib9s04QeopkYJwS2pyGQ+qIXFDQu93HNd8Ngg7lDXu5mW8M/rAzJFmJisfuL/gen2Rg4i2MrDPAqrv0KlIhAMIFsp+LKp8PdrdnA3Jp5V79lhYt6P1oW0VPJPbXtmSLbDWNi1nq6FgTcUIhoh+swP4Ys+1WM/TLXRRmF+eMozLemyZs2BU28dPkhRGyScBwmRXOT6orHXeho7KDFmRL3I3qB+rHtjMKR1fQTk5b71dgwG4yIQKz5rJgZE0QYwfjmim9bj+C/GDl5ahhUDNz3ff2Brq9YLZunbqj972AuDNeoLY/UO1BQqwe/LRZL5AL6JduxxgHrJDUrctfIxOXGesMeVy6q1vqpUIexvlEP9TCvEFjDyfIPYMie1kumDUwKScb7VyzZueg/HtGeJSwmqpfYZt/UPfBhmi+M9/6eHGPZfwAUXl5OVSlp3H3vYfier2/Gcj1F8haqyfXixfIxKQcrcGEVmknArux2QhnY8EkBYgXtFIoaVTz+L+2K4AERwTGZMpdn92FlFK4kDIADPbRTgRi3T4luuJTNxBqOdJyw93o4agySSuF0BAgD3e+VPMzhzx8fppQ9c1IJwLLcGiS3GnhjvYOUtR1fXOxKZ+iWPV/vgtCdMAOHe9iB1pc8PdW9TTOVJoIRmnbBpQdIu/IyKmed8d74MApmApuFj2TCwK5CU1lKAI036/fUOfKIpjCIktT4hs6zF1H94esoymQ 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.193; 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: 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: 1767053190630158500 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 Reviewed-by: Pierrick Bouvier --- 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 0fb8dcb07d..dcdb740586 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() && vms->tcg_its) { + /* + * Signal to the user when ITS is neither supported by the host + * nor emulated by the machine. + */ + info_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 Wed Jan 7 09:26:51 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=1767053278; cv=none; d=zohomail.com; s=zohoarc; b=B1AnhWpzjFksSZqRWS7eeeebKzEXKvtKUCUqDIYVKQOP4mRFtiNOsPufLyHH3mdAJ5GErAMoFl/aDlArPCnDS+xuY/DMNAV0dEHwaHrhEfg/r6qbTHZ5oLrdBDN7XKZFitz5sbBj90EvfYfjlVFTsT6key7vcFOMcMfpUvw9fZw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053278; 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=y+ZYHRYb+E5pHeYsI0vujjPW/wVtUK8MJtzmsMoCsS4=; b=OG/RVY0ZAPr9hmHAONxfgU2xu4KzTCBEBp8sqjllJLuBO/64GXRpQIE40J4yGCtYIWI3ec/Wh8qSAaVeteOrcBBi7d0H2xdnQDl0JvCavxSfbtfbHoKx6ur5EzwfJhAGIho6dwCI1V9nIPhwv0F4RrAa/j5CpIT8+9XPwEn64ag= 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 1767053278363535.2593830784925; Mon, 29 Dec 2025 16:07:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNEV-0006ET-6k; Mon, 29 Dec 2025 19:05:03 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaNEP-0006D3-RC for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:58 -0500 Received: from p-east2-cluster6-host9-snip4-3.eps.apple.com ([57.103.76.194] 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 1vaNEN-0003i1-PC for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:57 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id DBEE01800109; Tue, 30 Dec 2025 00:04:49 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 42F0E1800457; Tue, 30 Dec 2025 00:04:44 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=y+ZYHRYb+E5pHeYsI0vujjPW/wVtUK8MJtzmsMoCsS4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Xxfy4mxVeBRCH1dtVWd63Q/3y8bW/GkuYrO/eELwuOx9cFQhkPCB9eAAbvpXO4c9jkzFIXEUxMZft1hlzt/4CLzOjR5IlwzBYlxlB86Jsem/w1l5OCHhpg/AqX2YCZwq7Rd/R4ZViTtZhNmmKSwXa7wSIrD1KAjTKUovx6liTKngljtYvwRGx3o0anTnCAWHV5JrELvFD/8xZIBrwjJuFmb804/ZGQ0n8R4L2ic5VzzdeSnVyp4rSBzrSYFLqxDcUGJIcRU0CNH2wOzo2Zgyn0ojKoypj9+hvcAZ34luY00V3+9y3/wzfJiNStO9ZxWdvZjVuW0Bc9z5gh5bTsFz9w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 07/28] hw: arm: virt: rework MSI-X configuration Date: Tue, 30 Dec 2025 01:03:39 +0100 Message-ID: <20251230000401.72124-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=ALPFdfBd c=1 sm=1 tr=0 ts=69531725 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=IPYOmMg1pR9sqvhpA7gA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX4AO67qcz6mGA XwpREvSPveNiFXBfwJG8tv3lTrLg9GiZwzS0hgwNWPanNn4YvBhkou2GVDjwAcj+nH7+PHmf0Vg 1g0qHLs0Ds3US4QWK58fzYaa5CUOA6eG/t8TlZ5D2A3QkpEbHGCySS8UxSHy9TWfZYCB8m9FvnX xxEfZ3KIy29NiY4tTDAb7l5p0mFwr7GkpxnQcfzX9OVRetUyn949m2qsgT45Xsavc4GkrvYna0V fHPcQJSBOqMjNNeD0CD+4+JxGnmAndHz7Imjf9Sd136HqDW+WEllqUwH5Ml8YFz2NUjMFwihWob 3zgs78BZO9sltVsDB73 X-Proofpoint-ORIG-GUID: 5u0-HJlbQnk08d_IsOgN4H1HpKaTnSzp X-Proofpoint-GUID: 5u0-HJlbQnk08d_IsOgN4H1HpKaTnSzp 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=957 adultscore=0 clxscore=1030 malwarescore=0 spamscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB3gUrW2Op5vW4CSeoQeYbCrAkwBra/V5+B34rlrGAvVFrPnrGdU4KM1e60Lz1dX3riy8ZTLH0owBZ1rUWh7oyoRITHp4uIBrzIWG6qKQdUnrLg4tWQR4hFAeD34OR3boWebz8jDTQr9y3VOS5LDhtfAXdIgE3QP9Yanpby0OkDqKbcpFYz4N590h0bP5yKgbMMgVy+XAqDsKsgNjMhEmhYgPymJP0Uo2ABNvwY6/V38Xb19Sbo0zUPwGPTL5qSMtoiH4jym3KkXPDVV7TVV8qMCWX134mkyED/3CerITjsB9NX3/iVqNojWfwoXCFTT1mCs/ddrq9jbKo1qLFtPbr3N65e1QSqMSFP4AnGvu0Keh2IE+8Z1QmlUzM+BD/XnxvTmbP9hIw4RFnI5wqKGhbKgyUPRsHKmYAjd/5K4iExQtvM01hWOQoe/c0tpTDYdLmYTBi2fMsZa0nBu9SSXEn8meWVG67a1JSLVFENWt+MohH1Lrz41inc5RuQeFcsfPyLapBHxw2/TwzmxhpN9OXtGJ2RwDyJz/qHAzFNzRt4joqlrYS4NAz8iaxslGAsAQXxOxL4xgl5U34fXITFVKg5U1Mg7sN71C4Lh/PgAuFU+QoxTaYHK5I3JwE38xLdEPj/Txd0tNcxqAV+JmifOUMVsC0zKWXsX77Z1DlwbYWFNlIaJdEjS4wvwa5NJJfQWjlV/lbaJURoiDUdo3fKEfiEIdG0kEDd957fpNJuv/Iy35XSA376hmVmv95SJqjfj/Vkv8EbrYtIG18giCpQnJdCJNbP+EzDgfc5GRiZudyf73OZX9G5jLiDb0jF7+61JEq68FEX+6BwydfEKEisRkDW4rdG1zmyANjo4hSv5THKhKy5U3VCjWDwfJy3OwIE/fII2R83f0EcsJBxFM/SIRGq3PbmFuw9QL3RQeIAhoQvJkJql4= 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.194; 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: 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: 1767053278787158500 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 Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 3 +- hw/arm/virt.c | 110 ++++++++++++++++++++++++++++++++------- include/hw/arm/virt.h | 4 +- 3 files changed, 94 insertions(+), 23 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 86024a1a73..f3adb95cfe 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -962,8 +962,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 dcdb740586..1858190dd1 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,95 @@ 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; + default: + return false; } - 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); - OnOffAuto its =3D vms->its; + const char *val; =20 - visit_type_OnOffAuto(v, name, &its, errp); + 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; + default: + val =3D "auto"; + break; + } + return g_strdup(val); } =20 -static void virt_set_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +static void virt_set_msi(Object *obj, const char *value, Error **errp) +{ + ERRP_GUARD(); + VirtMachineState *vms =3D VIRT_MACHINE(obj); + + 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= "); + } +} + +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 +3125,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 +3517,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 +3585,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 Wed Jan 7 09:26:51 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=1767053559; cv=none; d=zohomail.com; s=zohoarc; b=DgzwHTozVfuOc30gfk3DNR9etbvyICfwIezAplcvTed64umGU5Zmy0gi1BRxsQIAtOOIP3eHOE24mb9FwbkX58E9gcPWfhg70MyvwAkfRSBbkl6ktqo8Yf6p9AZwD/9tDkD7HzyEz6/mIkew5WEeA4rjgxxwdKwoeoDhLqn1XGI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053559; 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=HpokZuec6NXVp7nrggRT+LOBrrsSy8fFvL6oRjwDxLI=; b=gn5FfyStWqTbksLxK/lLPHURJAumzQgJH3yhcJeVT/goApQYw1Pf3kcQZwlcIHiCxGcqbFmyrom2mRWB2P7Xd5MwjImCmVc2Fiv3tRTEiCwqnk+eB0FYby06ZzsLINuyK8g3EP80IWoBRVUDX/1DSIRr19VA1aJi4VCjZIUtOr4= 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 1767053559130183.46728265174227; Mon, 29 Dec 2025 16:12:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNEx-0006Uk-UN; Mon, 29 Dec 2025 19:05:34 -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 1vaNER-0006DZ-1F for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:59 -0500 Received: from p-east2-cluster2-host10-snip4-1.eps.apple.com ([57.103.78.74] 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 1vaNEP-0003iB-Jl for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:04:58 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 8A4AF1800479; Tue, 30 Dec 2025 00:04:53 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 514DA18000BF; Tue, 30 Dec 2025 00:04:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=HpokZuec6NXVp7nrggRT+LOBrrsSy8fFvL6oRjwDxLI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=GpWotYFxUJPw6REaSEtHHSMKNqB18vzjZQZhoEEB4I5A8LiP4kkTNYKfxYoDsGM3wshP6cRDEu7THM44mF7m3Xgs72s0dut6z7GA4k89gpba/htcnnE5g1EOfHRDUmRQEGUrL2FtDewjx1rSh+KEByHnaCMVIn/xBx6t50wSinQ/8VytP+FBvbTKu2idE0UVazMAVo3kQtBfpxEAGQ1z2Geab5uWP1jp4d7ACBBN3qSO5iCqkhDK51xDydMknt+gv3fDArRrBC6fo1OJq8xr6QJKJ3n1dxdYjlZpe8lXud1ICCYDGBbXQ6wzu/QZDggMIvQRgJK+koPlmz0Ay5Tiig== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 08/28] hw: arm: virt-acpi-build: add temporary hack to match existing behavior Date: Tue, 30 Dec 2025 01:03:40 +0100 Message-ID: <20251230000401.72124-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=TdibdBQh c=1 sm=1 tr=0 ts=69531727 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=HMNHyw_DGvBsvbusI_IA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: DzDNsGcZYZJmP5lSwgwk8sJGTyGsEfDL X-Proofpoint-ORIG-GUID: DzDNsGcZYZJmP5lSwgwk8sJGTyGsEfDL X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX0pFsB+987Uu0 sMT0M76OzruXwo9Ah3/MYRvEmCMeaYCs9nYtaLNo5mBP62r0ywRVXSZsdBPeY+SI5U4cBpyAIOA jizaeLJyoClike0/8Wsw3rC6jem/+u6sbAr12FUfS7LF7FK6zBLXL2mGOa1mih64pDGtAjcSxpX 6WO+i3oGcgorQjKqPtoxp2GXQT2OiXGXYHNureFnqMrLszWaLQqu9TYtD8+fS5jnl2U1tj5wRFb GNdy9P2N8wnlWOG1sM0TdhbdDmT8Hd4flNrIEAb3VFmjWfn5BWP6OkYLvKALT8AIFjE0y+lk/9n +f/NqIL8hqJG0WouDoi 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 bulkscore=0 phishscore=0 suspectscore=0 malwarescore=0 mlxlogscore=999 clxscore=1030 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABzD8cmI+Mg09GICaX0qgVVu1Pzvl4X+IRehNkgoIHpvPe98tOFcNJHOv4+TCNzAUCPaqNtSUZER/c8tSbZ0M/XOQqEAnECmj//mTmLBThpsnfC2WhHbrmeoJoKH06g7zc3LW0agIsTRFVkyf5TS90dE6V4TxgovmYsWyMbM11OG6N5sOnLVVIiLdhoG052XrWIFhruAc0Xx8xq1phE2H+V+x1+i/aDTOaGUUbwqj44ZkHwqqaVaVaONO2q3FAc6275UGCblK7wcDTns920fcdxZ6YWYnddgtzbCIKQEJe7ZqVf29RgAQVQgaSn85XtG57T62UFKBxVFUujuSgk8Kj/GHlr5VCghci/Ug2PkAYsXRCHvdG5JoKMJhHKKVdlgJ2eJLiVjWOK38GnuTFIUxUGqYMDUb0nl5tKPSG7uiqLq46RvwgeUMZc24xiAHszDcTvIfSk+8uxZ/JRRwRB5j8aJNDz4grMbB1dAd7XH8Jvyw5mlDPwzs8jOZbgHhzJI8KyK+1SKgSfdntHucAWobkFPJHBmLRoA3O3tRi+yFT1u0bPoyWNt85Yjgi6hiZnV1gHXMamB4y5vlFN/GsXAXbqXloWihn6ygeTaHA7Ql2I0lOyiQ/9GsR61R0ylVEtCZ17tnSxHAQHqryujXYCpufAugJ+1JZlsRUoyci5194DyHni1wEbP5gizt5k99UlocTLjH9QF9FtwsXoR/tcSNG9qqCqgqMtXOLCNx5zVUgc+sqREkUme9cSYrAhYCWijtR2O9sYbICBULrVou2dniA4CgjCsWZVu+ZQv0XECIjUQSAgS+++xxBpDoxHjfC6L0c3MWKl0g/sYUW/XXrZZy4rUqeMYjrI7+JsA15sEAJpXNd4kxrFIYA8kvSaOwEi8MzNZppot4kZpDKIb2D5bRMLNcRLH+6xDVQZppwjfJVSetsKGmsZ8SQ4HeSVwyWUz3QzN4= 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.74; 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: 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: 1767053560405158500 Content-Type: text/plain; charset="utf-8" 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. And see what to do for older releases. Likely don't want this to be carried around indefinitely. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- hw/arm/virt-acpi-build.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index f3adb95cfe..2b217e8681 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 (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || vms->gic_version =3D=3D 2) { /* * 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 (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || vms->gic_version =3D=3D 2) { 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 (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || vms->gic_version =3D=3D 2) { /* 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 (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || vms->gic_version =3D=3D 2) { 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 (virt_is_its_enabled(vms)) { + if (virt_is_its_enabled(vms) || vms->gic_version =3D=3D 2) { /* * Map bypassed (don't go through the SMMU) RIDs (input) to * ITS Group node directly: RC -> ITS. --=20 2.50.1 (Apple Git-155) From nobody Wed Jan 7 09:26:51 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=1767053156; cv=none; d=zohomail.com; s=zohoarc; b=QoLm79xjSue14msRMG5mipSW8AUpLeXGI6+FR5E/rW3k6xNWqXZU0P6IzIkbNzWG9JLLPo/QkieJdz4qd7xT40JQoh08a2LcLZLaHVQm7WLQ2SSp+jnay946xg60/YEDB9ermcfOaIjYDXGS1w1SDZPIRCGrk5An7Sdd+JLcFXc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053156; 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=A/1tnIbVtZPZe5QEQmUt0qxXLJhVR+oyhh+UmrFnqamFwK8XlVG9cg6qz6QSeBpmwpmEWQ2xzKJCMhD5l/wuB4+I5AS+6HObipnhjl+0G5idfyx3AaE6252k4fC09RgVbK8EPHkG0xBV0FT/vFa6UcI89agjS2CpxnQWQDofH5M= 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 1767053156830751.5629051843129; Mon, 29 Dec 2025 16:05:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNFC-0006vB-NC; Mon, 29 Dec 2025 19:05: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 1vaNEb-0006PC-KH for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:12 -0500 Received: from p-east2-cluster2-host8-snip4-10.eps.apple.com ([57.103.78.63] 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 1vaNEY-0003rd-TT for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:08 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 490EE18010C4; Tue, 30 Dec 2025 00:04:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 5E49E1800104; Tue, 30 Dec 2025 00:04:53 +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=UBNYkkGSZexyJNHS56OQthdth8yyuz0wIK6ZOdVDEi0svCf5aJhDS0Ar4QqUaGo5wXLpZUqLQuMHCMZe73YyUCPZahL+sntNLiuuk9dnOzPm6Tb4RynvA6X0QwtevOev95eFh668vYu181YrjxQf92zjbLBW1xn/aSV3WIXR/lxKinp/94g9m0nnOATiXGKvXZLQ/SOzXyHd1mshH43Qj00p1zpP7xmCVwfk17jVnTTbaOrArcCeHXKRa1+B1XEBYPc5GJj1FZQU4R3Vkkyf9o1gpgqvMBcS1gV0FqojlLqi2C8EOfiMkvOPHQ+rEzIkywiBiYyUHBP4MpsSW8O5nw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 09/28] docs: arm: update virt machine model description Date: Tue, 30 Dec 2025 01:03:41 +0100 Message-ID: <20251230000401.72124-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXwm7WRUxXjWCq QJqOn9olXPpKs0VTs8idWkBl6C6wKisLcnd5xMLDb3PhUQnrC2WT4KMZeHMAfVqoOuEj9lhjO+2 H93XPeTVt5FXgGgJsSctNrP1O03XctlfYiMYn7i97/iMbczMt5mr4LGn1S18RGz/yFtQXoinKfs e++tIUwfzejLIJOxJtn7uvd1EgcHFPSVPK1fIqb1ls94vjCXEi9Yb3VquWxrpXikpHaPTjaD6SW FHp4kLvkRNYjw6cVm0Y5LR5HRppDySK+hkkhHhOZx/VkBzQkjdLQRLMgtLOSOqnAjKpNnMZUWEY w3IhBoft2aTKR6DviKi X-Proofpoint-ORIG-GUID: 5-XdhjX4JAVUB39Av82NK9ccJ8-teQSs X-Proofpoint-GUID: 5-XdhjX4JAVUB39Av82NK9ccJ8-teQSs X-Authority-Info: v=2.4 cv=YI2SCBGx c=1 sm=1 tr=0 ts=6953172e cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=UWX6RoDBcPCHCN3xbnsA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 adultscore=0 spamscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABPEIWVMqwsbN9XfNH7HvB+4d2fxRctpxHpMZ5cPfmdgM26jnF4cAZO+caRkJHsHxUq9ogpyHIcMVr0pljrwtuzM2EiDB+gyRfeke8CFDrk/9m6vLdMj9NyCPp5JxIpMNl+Qa08W9xxTMVvZrAhBrt8UbUorw2vPTZQB8lujL2yGPvB+lvNWje0Usx0AzGT8qYJQUI8z5CHCue+vYLyNFrWoqyshsLw/kBiMKsls26El+G7LWOAiPrjX/HpudoyijE/XGrSdw/W93jIpjYkGYsyFC4m5dDRWN+pb6TQAyIKuDlHyIQ4f/C1d7bDF1UCKtbF7AdsNJoYJEtvfUbIhsah3ctRtZsA+UnNv97fuqCNkZHKriQacBEW4rMp9lJgaU+5X3O5Xdrq1ltfFt0zqf6DGZt1QHq5PK8W1SfUDUIAKZ2Xp2YvlwwmY8x6de6mjWYs0xxosgZx0wbeSDb8/XtvHWlS6El/FE5GdWVnNW/LIiRjDkZjALUZUjsr1EywbFan6xnRA6HpnqIJwcG3UpnusxipJ8iQ+Kh3IoFJcybdiiSCm4gceP0ZLTJXUcSEoJpb/Q01UPSk5ponQhZ/luF5Ks3+pOrTq7tV4yhiCNU1gCFuimGJ6n4kUOoinXk1r5KZkdnXrQnsdHzukJbccjp1ZsgBCGjsTHJC6enUD9Uhsg8wOFqsBigk1Ki+hGQ+Tax/y8ZuEMuIQwN0U5nhok3n53y4XgaCS6w+unDJP0/zIC8fwfoivGN2u22jJOg8yHT30KjFt/C0Hk8i80FQ057qPBCuFrw4z3HAkpEbOv3EQ05tYFlkV40DdA/JDcPbAuHjthLcV7b1cr51CVvlDRE7bonxLMbBTp6+q8oopy1hExPWu+hc7MhgeaNShsKlLOyqaSf13Oi3gmeBbO8LsOh6Xuh1zIVS1yxbS3IeITvWNbUEWF6mEJZwm/278FEGQSeI0eCSRc= 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.63; 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_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: 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: 1767053160778158500 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 Wed Jan 7 09:26:51 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=1767053189; cv=none; d=zohomail.com; s=zohoarc; b=YF9hkH7hKzT8EjaB1TYHBIin6stNQqDWO/PQh0VTeTmKUUBu1L6xtlsNj3QmHPcHAXxF0y0LkYrc6wxRXU6OH3f7Q+0cVffEyetRGbNjN7kzw6tpJb3uSt6OlyTV0JV0nsRmvgLkwv8JWaTHAT2n+f7c3LVc7xdeVZ1gCe+XXWk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053189; 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=1zFYtxGhq0VuOqIx4HS+RS5UNcitCPNW8rhTvyPPr5c=; b=YXENxUGbAHgzM33yd+v+zyumeccFa5v4UjyfWf88Tu8PoYJcqauWohyYvMyMU+viqzdwt4qxdjP0Pr5U4IzILNvY4ZzrmZYGWaBRTqbm6SmzfFvU+rNDrmZwu3P/j+qDcxd76VjjfIXyS1ZH3E78ZhS29RLgFTFS9LbRDytPlzQ= 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 1767053189603419.0733712677494; Mon, 29 Dec 2025 16:06:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNFE-0007Ay-PG; Mon, 29 Dec 2025 19:05:48 -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 1vaNEj-0006Ru-Vh for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:23 -0500 Received: from p-east2-cluster2-host1-snip4-10.eps.apple.com ([57.103.78.13] 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 1vaNEf-0003v3-Dy for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:16 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id C96EA180010E; Tue, 30 Dec 2025 00:05:02 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 8B7B3180046E; Tue, 30 Dec 2025 00:04:57 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=1zFYtxGhq0VuOqIx4HS+RS5UNcitCPNW8rhTvyPPr5c=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=EYzJp0RU3Bb8SAL2FmJHM42HchCAffPCg2NAopl6NVduPKc85MuHr4Xws4nD9R2CSidYLNdIFXRHxhj7ga3D7I5gO3lMKssgzMOjq0KtH2DKQ4oGhxE8kbOzbFYUK9lqNGxbafh6VEVQNBXaN2K1u32EYwNmTOV8DH4g95RlU3i2XerxhphMuo+TE4q70xJVF8MUqkN/l2L6NP49e4tRTYeUmTWb/EG09MFdNu/AnfuuAI+sM0mhDCkJHD3F43w3QHykMrpb4J0NMLO/V/+hGG7PcVBbj4ZKMJf3pPAFSDYF3o/JM0KtSXNmIuPAuAeHAOYkq8NFt6KRVmoo6lALXw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 10/28] whpx: Move around files before introducing AArch64 support Date: Tue, 30 Dec 2025 01:03:42 +0100 Message-ID: <20251230000401.72124-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX80WOdJuZspIr 7bl2Wkc6QVY5DRnEitUsFyhtmqONXlkQaCcRKMsDzniSrIJTiXjJgdRQ2rnyZCjtlBB8zidOZWA 1qAfVg/u6hJUN3yNEd3lkmrIrf8GixNJCbeZITIflzoyyVYPqt7LwxdjwcLze+kA/dmMlhSQedU SAelV7QsgUh8op58qH94g1B0eTHE8c4HSm4w0Y5q9bJyRK6OOQGiPaksr2ixTTkj1QaIlQ3x1U8 2OAwZ18+6XU5sE91LtW1plT0ClbRUnycRk1hgZ5q2b/pJ/2Bk/wkRd/OXUGXb+sW4lysIHTLaIM q44dfGQk973nkB8YRO6 X-Proofpoint-ORIG-GUID: swzBjZ56bxAyAeL9YLic-rR0bRHaViwX X-Authority-Info: v=2.4 cv=RfOdyltv c=1 sm=1 tr=0 ts=69531732 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A: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: swzBjZ56bxAyAeL9YLic-rR0bRHaViwX 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxscore=0 suspectscore=0 phishscore=0 malwarescore=0 clxscore=1030 mlxlogscore=999 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB0pDhyk0YfV2Mcq/Ay5O97pftrHRAjitlkPlL0M3DTxkpsxBrX3eY/p+tzwzfnGNgN/oWWcmmlANUSaJTIm9yUbMKz+X9X4MKUOPfqwDVbI4oIUezIhymj4V8eg9ClzEh9FM/e4NH1RxGYiEPROPYLBBtmmOceCq2Ph8ZzaZaQBw3suhu1eI4/1mwPLEQ94ZriDDCgZRBN3Kdacy83vMzzE/l5ieXpY6q7esSYGwDQ/cNG7GBFhPbYQUsphirSyETLlId4OlvQx4T/sxWGQLzMfyHb/QYytpDc6bLkvB0scF7K06bHMp0ZxsfoHF7d+70UUa0bLbzy3WXDCA2E6ow4HnJd+u2e5bgDPwPw2PkQPnp1/hwyuyLqXxRDJD9VlhfirU2OkA8MXNWdpbukq1WF0a8l5nmOO1Gn0LsFlUU6Mj9VXN+QZ+iGYmCq6Zf+McskGgEcdcLyHee7l7mIDBk+SuuvdQHqEkxx99xnFvBrygm90QJEQqJhXLqHOBy2G9JsxQgTsfzBCNYMppRSWrWYGQOhSDXA5mpnxkZOSVT1DDlKA737P8LhsswxOQA2ka3HShbKQ5H195D80csRPRCzNBmtMFV1d8PwSw46syttKluGCRFZwNYxGnP/8vt5YXT0mhtNu4zyDKiB/t9sVE6XKVLGstC+VByTwd4v6fdva1BN7M7KahHADmUTRqibk3hf5VBhr9Mzj813xFs4Qpssc4lkZWxax/j2br2f7CvB6pIs/1WivvKNvN+jTJurFmxsKgXjl9xSvZfHqizhoRfTvdyTdWUmnGE+gAu2MdwJ/cLS02MNXFlH+bRgNaWmCWG9Mw0Rq+232HT6711UlxqKfjgMtMQjhmhxQ+WzaKATbePE99voRb7D7Hj4YaYTg8qXhoZrJSj1CSHmZIVunQPAVJP0zV1RZPf64cj45Y+qSgGOv9Wz5fS+prmu/0E/lFzr0hBqJdpC/qSnEBSpA== 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.13; 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: 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: 1767053192438158500 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 cbae7c26f8..6b045fb3f8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -550,9 +550,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 Wed Jan 7 09:26:51 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=1767053582; cv=none; d=zohomail.com; s=zohoarc; b=nAYU/S1ANne69ozgDnPTD9qQCVwTU8JmKKm7y+8jW4/eqBiaIS9WCK4qBD2+TLKxu9P+kZapCTjavAsDDWWhIFr0x5K7S53/e+LobIj5opUqeP3InC9lP7QYMjQkzJZJ6yqgw386nJ72xcZWSHQNhyR4IZIJJuaSmB1VbkdWCME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053582; 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=vPJyes1h152YqKceSY8o99F0z6ylEKM/hXt9EyrZvnA=; b=mbAqLoX7vFMAN/6EYQcdBKH287VUvHJHoo20lvlbeXQWl4jmmMxjG79sCP6Jux2TIHgRUdbJ7UCo1ctwphURTSiW7oscuAmJPRxgUDgw/JMflT+YANtYa812DFgJyct0fwKjVOUzkGNnCypLfwYhItQBYOvWBc8nMudLCS6/muE= 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 1767053582912832.245726547312; Mon, 29 Dec 2025 16:13:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNG4-0008Az-G3; Mon, 29 Dec 2025 19:06:40 -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 1vaNEo-0006UP-H7 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:25 -0500 Received: from p-east2-cluster2-host12-snip4-1.eps.apple.com ([57.103.78.94] 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 1vaNEi-0003y1-74 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:20 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id D43D11800464; Tue, 30 Dec 2025 00:05:08 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id E238A18010D6; Tue, 30 Dec 2025 00:05:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=vPJyes1h152YqKceSY8o99F0z6ylEKM/hXt9EyrZvnA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=aVBBaF54Eg+a4+1aTVu3SGYuq/+/8b6usNI01vpwcxBOqWqL+Mg3tt6D2cyKjfOJag2d/cNnOzteItYHRJaEnjXimFonVMd3jarEr+kRBylcha4f6B1sUTaDrF/HIHPt+hBX8TSpl4rR7G/+0hxXi71n0hSz6Z/rnSCGu2SnFDOJ50Oy8QA9SWfDJeqvUgdwoXM/RubOFfWBhjSUBSRIeEaUw/7pizl+XOx2jpPET5dIerWFhbCAei2wQ/PuCpBWGpR9gmUL1QZWB5mItyOSpdYF6/DSpswTDEfFwWF/eM2gEi9SSaa8rfD4qY4VdNn8GGR8vecGqYl16gle3yOlPw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 11/28] whpx: reshuffle common code Date: Tue, 30 Dec 2025 01:03:43 +0100 Message-ID: <20251230000401.72124-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Fa1S4-1RLFQyH0bP_wpK74qWMbCjgtGJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX4V4QezTFoqsR Zn59v3eStdgd2FHVfEfcHAU6JwQYklTCwdwLOWgBc+CLJgzlI67oqt4rLZwuRwSRzIK/qe3LK30 mBlQcRbEUQ7N49l4JQ6SV1dCQOjNl0aaS94bhs8IXNSEVCTQWb8IApbt7fZTJCaZlg/gsXMc5VV mb6yz9QKUHOomjJVenAUPk5o09my0yjNmnXAtQtpfN+vqJeTxLPcxgvoge7dVTXij1rmp3LyQ/v Qopo7hhuCD/Vy/pwuf9XyIY+xMgxRJyGVcrVaNQON690/LQcD3zcMPijSqs/yaTLieQ5Vq6WSDR 5DwbDZ7q8Lr8bRhxSzL X-Proofpoint-ORIG-GUID: Fa1S4-1RLFQyH0bP_wpK74qWMbCjgtGJ X-Authority-Info: v=2.4 cv=drDWylg4 c=1 sm=1 tr=0 ts=69531739 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=XtnWhMvHLvoGx0dyWtYA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 clxscore=1030 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABBwgWqWvo6AXD2yFr+NwufRCDB/M8a83KD/0uvrHkXEjwKUKs1R8LVfgOtrofkqMy6X6mPpaJQNz3vivzvTgJMTAQc76WXOlxCmf3bulMxGrRFJZA7GdsnDt/P885y3idJHdIEhaMVMfrCkUBwX5pxjcs4/f8lKv7noywzr+li4iUN8ncpgCJ+eeyZAmNlf7QZrszR0hiwYQiuncaTFqCKbR3ChxiRqz3/bAOs5n6Sp4UHOsz6Gp5VDqvIkU+Vm0XLx3vHfy3dTDTl7jQ6AQXD8kfleHLehjUa9rQRbS65vlLdOuvwCYXXhdn5S9LeSAMmyLn1ZZxIRLkPFkG8ZyGCl3BZTqFdafzRUUVfRwquxLXjNpUq1VgHykPhlWV9aBWToll4go0jbO+KC470yw4b56TzdNqhqq7SXXBnStQCwZWelnCeWL3gLaP6etg8cucLD0AI+mDDkXn31zBafsGi0JylpNom+F4G7Ou2vXLoSzEXPOQ5baL0g/I0pWzxVRSwgWyrpM2G/wVwZe19iGcASQU91ExVSaekrWiHmgIpKwuAu8HvxIU9uTBHL1NGEfuncPTPkOwhLRWuxh4HfBRGc2meinjY4W3cQfJFUrz8/cMyR2aEJhG7vnFgbI0Pr2/gNY9gnXmBUWqVI0S5TINMmrC3IA9umqeROhxgC6YIgPzp83awymktekN0+BebHR/lSj1oPV2C1+55lR6iGYxegdzbZcc+UFl4YzZV0nOcFyRgRXaK5eL+fnI61TuK6MLbB2yAyxkP7hOJ4+Yoc7EbCESoMEEBHIsIkqFh029shKbQLCqzKMVoYPSrXMcVztsDXFcNofMoKrsrUSwvovIXPcAM0n8HwmAMyiMXJLOAf9Um2x8gu78+Xx9o4jutFZdJfZjF4vtjkqjlB5gB6/3P+k= 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.94; 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: 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: 1767053584782158500 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 6b045fb3f8..8d84f141cc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -555,6 +555,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 Wed Jan 7 09:26:51 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=1767053182; cv=none; d=zohomail.com; s=zohoarc; b=lwMlyXl/mImEiqOTunk58U21U6qLXrJchhTJelcqpp29Q92+ly43psvfcPoTmgUvZXKjvqJsPY61b8lVN40ctzA1+RyxZoQwRfX/IVKnOCMiDnIauSKf9cTC7vQxPK5y19NrnsFp2F8UOkIzqCfy+UrRR3nsXeAv4pFYA0KIwCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053182; 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=FK87SDtEM2GSv2YNSTJ9oRIKAp6QItslXxbg89byHf4vOA2oAZc6NoESSNybYZlz8neiCJ8zPBW2z/VYxKrv/XtfQNwwN14HL0klliERBD11EAnxjPRsQZSgXqntRrKBYK0gBqAQEfeSgtziZ+kw/g/w/HyFfMpBsxaaXXIEmO4= 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 1767053182764861.7793160297633; Mon, 29 Dec 2025 16:06:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNFW-0007Rk-Dz; Mon, 29 Dec 2025 19:06: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 1vaNEq-0006Uv-7O for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:28 -0500 Received: from p-east2-cluster2-host6-snip4-4.eps.apple.com ([57.103.78.37] 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 1vaNEo-0003ze-82 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:23 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 79F821800476; Tue, 30 Dec 2025 00:05:14 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 2C18D18010C6; Tue, 30 Dec 2025 00:05:08 +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=ZNOVqCS5e1QkBx0XqHCiOJHXHdgUWyruHUrbrAPJ4OSRji8Ny/KKqjouqW1Yg1WV8a0tQdZobOi0Okbbvdf0ctj0QpCFamD1aumisK4QPXehjN2UZXXdVYg1CMnVn10OD4f7lcVKlgaMg0vJtdcwM0xopm6StXcjO8gw4JrUphEC4L7Yf17H8mtsdG333bobYPoBcyjZLPy0Dfz2/QMJ5p2Y8WGL0Iap2FRsdHmuQSJ1GtIwPi7m/3gNt8PFzA6d1lGyFSNKwwjh3awzX6l+0xvfn71B534DJy9LjRcQ7WeNer3vuFwDDTaoHK8Kw4Pz2z0JWdYJTIXfkfDJfobqAA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 12/28] whpx: ifdef out winhvemulation on non-x86_64 Date: Tue, 30 Dec 2025 01:03:44 +0100 Message-ID: <20251230000401.72124-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=OdeVzxTY c=1 sm=1 tr=0 ts=6953173e cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VExx-Oqz_yhFp4n2Ql0A:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: -SLd5QbamGTec31qWKgJVVlMrdbi5Xb1 X-Proofpoint-ORIG-GUID: -SLd5QbamGTec31qWKgJVVlMrdbi5Xb1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX3/VcHyAM/+Vf 2TzReD06mYXJ57o5wrnf5tjS0Gx8b4yME3PMSkEHeFBTpPyFC75cjKE5NtUb3wHF7uXhTXWoHaA Y3lFYK2ShMWsW+/Lh7AWoteRWeNAmX8ObIZPlvw6m9U3PbPW5sZaUYP7HqCFI5yJ6SezT4LlIyl JSQdjvmrbe7BBoHiO8uwClPsj5w9rPFc7lR+03hPPg/BGMahUOte31SZFddYDM3yGcn9GVj70/o 95Bdx0BHsOcAxLXeBFXUw+hTmcVCoBVzRACgBcFBSYQmyDSBXtQEPedGKHKTeuTjwwQtndgd8dI reMwgViE7ffjDjvgsy5 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 phishscore=0 clxscore=1030 mlxlogscore=999 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABDzjAdje+YPBjOeYtwlohvi4W9ZppOayefDMLQEdfH9MwmdelI7FJFisds0KF1IlWXeij5+02xLFJndwBVJ5j9tU69XNhaBoPoBipyn9cfNYGA/DdraGryghMg9PqwTCLO45Nw1ynUMaaSA4IIW/9ksyv9U4ufd2YnSw6x8ketEiwCyy8SHJ7iD/lS+ni7l074CSDYISXHGZIJrO3pH4VmanQeuKxOk5ZSaxZER1J110IxlP15V1cLvK7As1nant3XFcZXFcS3Y6q10GQydVEKsuUNgqDH99OaBA0TL6CUO4XfhMpxDCw7snBNgVb8PA5mdU9NxE4G+OP3IJIdPFd9rCXbWjiqBYs4P1Xq/0mO4/RTnQdqGBY+Rpl/zFbLblORlXMPmQud03pxB3XTgpz1MP3y8ZNaSr3eeRAeDyGCFuqF9a5TrFcVVcccynzWjO5/Ego16rYGA5fMqeY3cc9xtMK2y81HHo7/UVU/SQp7Je5c38LoBKd8zalvXZGhAecbriOrgCTYgA+HC1OI/YjiiEGihhZEySnDt5lwxwK74qLCx75ymV2eLnwkXaz1IwPTvODU94uVUIb9dfKwBgFfT3+ymtbbX9KDphdvZjcB65L+9GLfnuqG5K4tJp6qkeeNIuFoTHdNMAIsby3JczYhseRZs3evYuEh9PBbOzgUWJJqRFFo//aTqFLyiujRr22oIEcr6wYBHQXeiWJM4/XQR9qUzlniO9CBGK2h9u3wLS9WmW5539leH4QGHzC0C8Q9btOYsEyHFhSUslOdZzlq8uEtG7xFYlE0fjAl92iqqMra6nq9dMVjyTPmjEpv0PM3HIebRU1UPajijYREhR4/jhtJCEB6NWBLngyAGI207jkxJOfCLLLErW4wV59fEJU9xphKnzb6S9UEVeZC6dr2ndF7emQG1l8w3gNTM+P9S7BtZSIPAC1NQ== 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.37; 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: 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: 1767053184711158500 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 Wed Jan 7 09:26:51 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=1767053417; cv=none; d=zohomail.com; s=zohoarc; b=f3rdNs51d2Dj7hPPmLmaNyJk7QYsI1zHhwY01MOM/Wxn8ikojKOtDsOFKFdePs2Yzk1hCVOayg9QrN2bEsjEj51fIfqR1U2h41KXxz2Lfz8QzigtWircv9xcRTfMH23ZgQlcADFfmHII7u+1E68NwN3xf56aE1TVgDeIg7/DHu8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053417; 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=QukvILeiI+sa4KH4AyQXIOfeKh37TqTZ8EbhxDe6jjgdiAxrQOY5lTCZKZm8sjdgw5HCii5A0PevMbKkoqs1qb3PdLHO8L1pipW8aurPL+Ur68TLgXDETV6xsbImU2owIzhJI+Hv0+88fsfmIgLyVpYcK2RxP3BlTn9qu/XHjC8= 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 1767053417934248.46873917346647; Mon, 29 Dec 2025 16:10:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNGn-0000VH-7X; Mon, 29 Dec 2025 19:07:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaNEw-0006VV-66 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:31 -0500 Received: from p-east2-cluster1-host7-snip4-10.eps.apple.com ([57.103.76.73] 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 1vaNEt-00040S-W2 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:29 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 404DB18000AE; Tue, 30 Dec 2025 00:05:18 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id C617F180011D; Tue, 30 Dec 2025 00:05:13 +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=LtMhUkxPjCDtbZfrIRlP3JbCiSwp/mCt7aJq+nV3d9Khmz9d4WWnxAL0EV80vQp8bnOxRfro8lAd1ALWnPu0rccikLQNshKIexHh+CMTbOz5lWYD5rIpV6B/Judf/xHWnEG57PcV20SAhEpYFlCS9zYVWSL9dydvEGw1H0bhhKZ7wDH2gWpDZmYokRjSQvxoUdWfBeeubEzlXO932sNpA+I1U7S/7N4x7V3xW7772SY1KIsUu8vZSW3WkhWxC2nTVa0VAIEl83YEIvB5Mhu1MtCrHu98XG95ck5QrkOAL1B4/9O25gFohQHj1H0NIX2N48kp13aneV7a0g5J7+UBEQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 13/28] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Date: Tue, 30 Dec 2025 01:03:45 +0100 Message-ID: <20251230000401.72124-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=ALPFdfBd c=1 sm=1 tr=0 ts=69531743 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2psWIPzlEfUqwKpUe20A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXw0kwNhFF1Bwm uGVFj4kHgySE3X7pM9OTeev8tuOI32P0ASJU5QVeqsPY9iBbUKyd5yhKxIfhAp+aAQ7gle00Er8 CphhQ8seJVNInh+sl7jaER2DXaecFfgWNG75NERyWH59S1t/AS31jgpUwY98LNpUiqY8NGhRJ4c 93y9PVOMkXpl6fZrqiP6T+iecukD/PPlIySnl6byjQDBYMkemSWWDukdnRKbmG9TtlFfx2qzUk5 euawayzRvlY9loBYKysYAf14wUCR02GmAubnUfSalv3Ripdb6MB1Prh+sxf0vf4YO2mkDOoo6Mn ZE6GX6l6Q2zrtXR36C3 X-Proofpoint-ORIG-GUID: Tr8MzgkXe4zC4kedLeTjnVnn-gUxxkun X-Proofpoint-GUID: Tr8MzgkXe4zC4kedLeTjnVnn-gUxxkun 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 adultscore=0 clxscore=1030 malwarescore=0 spamscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABpdqSAX4k4lM/hKzdh1u9lP6mGNY+asBdSkjeDRl4x3Bn7Ttah5Q/wBijqHl+FJL8Q+MvbEPI9rnzS6CzDrHASUDjEVOK75aPDxhVBsV0g3u78T/dOUXEirQrnjjohv6jO/YNC3YQins1DfbmvNjQmcfW/oX4XU5GCzmIIhYNvUPrrr5ZONALE5ogeod+NXqpmhwno5wdwBIKxw2m4K7HX5Hi1sXUD4Stu8DYIce3nBnxzaFw3HjfNAjLjOzs3C9vxeSaoLRFGkYrZ8dVFIsH+EzwwTo2WJQwID1v6Ww4wRNG7grSUmSQ2vgkDroxRCQVJtEyfZUyR5ca4XgUc3xB7GIGwIPxqoMr0kFDOL7JI6NjdBQ0qBvNXiHdvFc/LQCwci3cxRtFwaTcd9B6i9x8/nHaKlk314UMDxcWfHFwKsg7i4a4Hg1a4PmzCNKQ3rajBgSN1MMVncWxrk6r+y3mlNOw/D9sSOceGrszWjzeCIUX2cEtRusgNu4b9w8ScZLXB2P0SntmINKm0lJ5CkVTBAaM/QYZGUno4nIySM8sKzLMFdY3qN65AhYqtkY5FdGsf/cpYcoY6DQDnnpCIqamrt6DQyOi/FkNPisgIL6BpQYeY21ApwjaRNK33Cn6vY6VJn2kL343xrmU/RNN0NRCldoPp4BMI9tJ4ddb+dejjK2VDsCAfu0Gm+Ms/f3jDTtgGn9cGDq3naVhB8T93Av21wnP143kgueYK/glK/H3kIPwADkdYBX/RRMH10m1dzSVrIuHSKRNFMuc3pT/mqSYU59obL8c/9aoBCRBgF6BXnJX0e9fInUR5oC+cxwqB+Bkw4NTPMuhUxHfH84SSDJtk0fu+avRzfSLYc2vgUDJeDbMbC7HmSy28XdB6j2rMEmRAVtNVxw1xHxSou8O8jnxxnm0X/0WnFwfLV7RS5gQ+xTUfeyW75YkPn4qytUDYCYeP9SD 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.73; 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: 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: 1767053419808158500 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 Wed Jan 7 09:26:51 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=1767053201; cv=none; d=zohomail.com; s=zohoarc; b=JMxyB1+OSH/WRlOmPWp6d4YZnxvAnDdVz9eEXsOAOoiQsvsiyIXY37MQQctj9owjyhwKqrDWMhe1caQX64iXdFY6NPdlK3+V/BgtV1nODGlQWwyTRNqt10N5JoIHHw7gbtFhK72x/pybJyHMQ9lmWadiah+b8beXQrtsCcd1wnA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053201; 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=WfwnJ9Q9K5cmS8/8oIUqYWNv64GIrX5gc55omlulRxXSczpJbr+XAvKRQONHU5PKBNzc3SYno44gdZ/yKPoObTzVwhI32xfAqO4+qAFqQ0HT54TRoyEpCgq5Ie7k7dvsLp0L7lzlBw8PbA1RTucM3C1ksmLDjIgKH46VCu8fteA= 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 1767053201829118.59755506206113; Mon, 29 Dec 2025 16:06:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNFc-0007Ty-2J; Mon, 29 Dec 2025 19:06:18 -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 1vaNEx-0006Vk-2O for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:31 -0500 Received: from p-east2-cluster1-host8-snip4-10.eps.apple.com ([57.103.76.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 1vaNEu-00040c-QL for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:30 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 4F88118010D4; Tue, 30 Dec 2025 00:05:23 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 8D7A41800104; Tue, 30 Dec 2025 00:05:18 +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=QglmCbsLTQ0CCwaGatoCCD4FyyDzqjJ16vxq55uIO7jgX3n2ko2L/diZP3if/rl4qZaOaUtwy31YPVLhyVMRM2HxGyMfqNzklY4UUJDurKO1tdDVZ/zteBp88Zx/cmm26FNzN58/dDb5/89s9XnUhWgK4zawQQeyFt4trRB3o+TzAW8P1lv8K1j3/OCJi0RfMOjHs1L65sY0zs73oPyF+b8zCrkEoN2e9SNHANzB8pE8fmxYsF5/yrTWeEQSB9m59vWch1TRSmMAs1e8EZRNK8Mrva7MIa97ZCAFRpZwW/N2zPpgV75OPxseA12Ydf/cHu8EM9lKnvNJW82scI20bw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 14/28] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Date: Tue, 30 Dec 2025 01:03:46 +0100 Message-ID: <20251230000401.72124-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX/w7LWHPc1U1n g4WLTeVp5v6mNGkZc6egyNRmWil9uES7azYZ4m8VQri/8MMl7DixHUUIr9Qt4qW75rZtu9gfplO 6g/wX+ptif0W5YdkXZhVivAG8EL68Zfpu+DWEv+KNcT/+NSyEtRZCMppRSWjT1Dg3vGilf71u12 7ZL+veEF7AHQpLh93Mvibt2n/mT8fVBkETh+icUDTT5DRvWc7Wj6OPFBjtjaETVGQDGY7JifEuh j/U00xWwpwdNeitMgGTI8Z5MrxPf3kpOhal+hZPp7eE2OdaEOEfHhGRNbE0r+b4J4Jb0dhohZBn 82KSEQedkDkMlVD9pYT X-Proofpoint-ORIG-GUID: -BwHz-lBYY-uNZ_yQqzXeSPEU3u7cuDh X-Authority-Info: v=2.4 cv=PfTyRyhd c=1 sm=1 tr=0 ts=69531746 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ogbMO5OAvhA2mBZm2BUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: -BwHz-lBYY-uNZ_yQqzXeSPEU3u7cuDh 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 clxscore=1030 suspectscore=0 malwarescore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB+6XztH9wjdk8lZkCJHKQT4Jasaucy/rpdiOe3p/FWfFejbPqsNMd+6HakmFuQRoYak+EgvJSdDWNjx09u2sw73AMvKnlqvZGWBeqc74Cfqf2rP2Vt/xie1tXuNSa+shQUFS9GDn5LmzDiQ8x0UONjYqeKDh0lLkLLmCH5PA+mWMUPlLNUBHxQd6O0T1aDmk2NaAq3l+eVCDn7X/g1Zv8GGKKyIyv2FSBSBid5Dc6e+uSx6Vtn6bnlI2O/3Wox47hgaBXjdUBWgNLhPF9CIaEETFcAiSHOoIyWrgTQ8fnv2Ddm9H1BPN2qrXsxcl3abJPF5skKrBU7S/45PJFmfoWaZ0wDkHkCb+jVLEYzk4EhQMOPBQh5Nr4YlFRF7gb6w7W6qJvJKNxWvyC6BOVn4a5ZmolCwArt/t1kdVqfIIhRnAuwoIe3SPiuwkDJPYJY8k2NiCWEOHRuwIZ3jlfxr2c/J8wq3Wa2GC8RBdRIcMr9dgjZpgDnmWofArZvSARw/ABeayOFkaud2mngIK1vAFHwAvCVR5QmLgeOCmZkQdvJK3N2ubfgA4SLOm5CryaBmmOR0NKForhub3BGje9Be3BvgAElQeSrozY/BIov1q+6n7FRv0NegxjEF09Ebyr0IwhwGBTkKxxvSmBg3Qg3y3rtr5nTNbh/4L9lIv5KzcH67CS9N8nvXvOmqM4jSG6mhYT7JkCW2GHqUen7/i3uSDwUkud4GInndTsj3UxEOq0XRNdW9rlIFB3UiZxaihLUU49iBsIB1A/zMpSiUhpWaDrSeD3SQLrGIdRt7rd0m8tDEwmzN+sPrZx4ZR+9EzNQnhppqHo5Y78nXcYkj2wLV0K/xFfG4uzyDcdZN+gr3meEvCQcrBtpsapbSyqOFZ4Jq4ZiPxt647hJcz+swVWLj6r4eTJC2dUIgZ5pZDztyHLe6qMPIxiyFNomqjUse9Nc3QNS6eg 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.83; 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_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: 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: 1767053202911158500 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 Wed Jan 7 09:26:51 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=1767053436; cv=none; d=zohomail.com; s=zohoarc; b=FG20Z5BCKYecFxXL2xHwFUfPuX15r4pdYsTCD4n92QRpwmH9kbprPyUkUqmRlyCCU/yqTeeN2jmJbjpJKcXpXLG4CpB2V2PGWc7P8Kj+P36jd3rVN6K9zHHZRR0EGx3OrLWPfis+hmR294GHc0zFYunLuUPu/2xcfFpSHxgYeoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053436; 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=0xGYESW9cn3qbrdflbEg+UvV7jNqIae/CAt+d/KgNUY=; b=d3EAk0GPSVmiOl1Tgbn1zv9KHshuC9jZoQ09L8+mPAQo8110gBN/nm90fWIvAZh0FiKDpt8ue1v2juU3FnvLtv3jOM82JpqSMhdaGn5eK9QSDiFUdDgEM2HSwhVoUWvYgj0PQCYgNN25Ngn4pby+/w836k/yJRcztqo6v0yRb74= 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 176705343558076.26202195931921; Mon, 29 Dec 2025 16:10:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNHw-0001Qc-HI; Mon, 29 Dec 2025 19:08:38 -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 1vaNF7-0006i0-V7 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:44 -0500 Received: from p-east2-cluster1-host2-snip4-6.eps.apple.com ([57.103.76.39] 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 1vaNF0-00041J-MN for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:38 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 02F6E18010C6; Tue, 30 Dec 2025 00:05:27 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id D694418010C2; Tue, 30 Dec 2025 00:05:22 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=0xGYESW9cn3qbrdflbEg+UvV7jNqIae/CAt+d/KgNUY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OFvTyzFesuyK08PqpeJ7+ryeBbI+WXy6lrauFt1bOkXJaQbfpGzr64T/c7KS1RBLcdw7SgGwFxfN4zyIeyT0MO/rv7B877szoAj2s9tY6feA2zM4V3vWXtbsuCNHl06vcVhfBlaNo48Je6jKH02TsBWS9w+jVHyIK8dNpVSqZLcrzfWOHmGUUVkREmBBitlqu6TMrHElcY+0ML6prV6wX//sL42DBXRzFEcYLl0qUbdrDrfQhAB2b7DrfsPJZ/VumbYmyrPE+uTRz+g7w/B8NRhnOurrq9C2ESSVOI5x66KVwreY0RtakylqwaBAnZu0d4nSCUlknkCfx7ZQnZ+wQA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 15/28] whpx: interrupt controller support Date: Tue, 30 Dec 2025 01:03:47 +0100 Message-ID: <20251230000401.72124-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX7CbIScs+VCpk v9uRItrVxWgXssk4fSMRVkQwJENPxHDns0kvBZEjcKW5SfHlyjpe2oI2jJs/vBusJ3iycocvKhN DpQ/gIQFGDLrG7mwUIB1+CMhoPxmka4JxYnjlOsLYXy52C+OrDUEj6dbpRBDh2OGzvyu6BTQznI T1t0Rj3r/F+sg3p2NDU6gfJNeb8hdjOxPEQIJOrqbx3i/aAUZCjRHxVNOHB1EFSCZ9mQ7D+pFll J0ZoF5bTAain5xzFijnaIQi/btKooadkvMuwImNDAeJQPJHeN+4EtKk3dQ8AuNWd0mTwcGZ+cly SJ7lGbjBuw16Uxu2rt/ X-Proofpoint-GUID: HNce0aqKycISKAl2_G_QTvE2MqarqqIM X-Authority-Info: v=2.4 cv=Qbxrf8bv c=1 sm=1 tr=0 ts=6953174c cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=flZNgbgI_Ya0FyYah8EA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: HNce0aqKycISKAl2_G_QTvE2MqarqqIM 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 phishscore=0 suspectscore=0 clxscore=1030 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABhUDEG3/bDo4B/+KxyrcIShn2Mp/G3IAZ39eRcibrTTXDh3j1rt48WGN7z4wSb20+u9M/u1u3CITRMFdFXTegKfkSN2unZiAKqPa9HX8JdvPg2chQIkgHlgETtgFFfW5CjUeC6ZdCItr4P+YEtD1hegfsMXeyhYwRbHUW9UaJcUdMdVwicLyS7tBBm8BSViPQUGVQDWU6BGjSVDY4A9XPfRp7k5pg8cy1TJs8BOpp3yY1WfDiOLSz0GDvLOFEfixe5dUeAkofcMtutbH5qHsuA1g4QURYgJRqoa0qTmBhxMMTDOD9K3PXh4zDrljOKbHqc7XsxFkdR140gJMWCdwNDjbVIOkiDosKFIdl37/AEwn9zZt5VAYK/JmkB6Aj1H0FHtmiWbWwe+/uB98nP+pclSxy8Vn48uyDaydC4aDfGkjQN4XgPmbEfeuuk32i1Ih9RfbIQ2H2kwwdMcq5EGOeStjYKjtsD9198KDTsSV9gEf/esQ5BdFZmAIrNug7HAGJO1UZypTZZUi+yDk65wOKptk71OiF3m/DwGsftTv+6ey23NnQzlYzgByNQkUJGhmxmxL2HOO4JleYwA8KcJanwOaUhm530ckY0TZvOg4V+7mbDURpkS0UGJNyNeXEwJqin8AMx2dJ7AguVZxuyR7V43IhdEmkB4UNA9cpZJi4MWXmapMAFdSoFerXSS/5VjO7FddAkZlTxOglmr+6CJhVFnDY/JvZTEkf66VKwYzZEDBCGoeeF4BB0w9ZI04eiU1Z+NvYK8sQlVd2DxX7q6uPO8yza8iARQp+0VLGi6MCHc1dgrPu+c75oLQl9n+vu3pv+Jb+Pp8dN+f5ajAjR9EGhwEbLXuJ9F9HldYLWUQzJS9troKWYIq8guLbvQi4b9RHRrKM5ICVa03SOdXTyZCaPWnDUnhuRJbFnXyq4zHr22cAeC3a/YSowabZv3k2OomqtGYk2DfcEA== 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.39; 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: 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: 1767053437677158501 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 1858190dd1..01fc1f9ac9 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..4fe6305c89 --- /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_TYPE interrupt_type =3D WHvArm64InterruptTypeFixed; + WHV_INTERRUPT_CONTROL interrupt_control =3D { + interrupt_type =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 (GICv3CPUState *)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) { + error_propagate(errp, local_err); + return; + } + + if (s->revision !=3D 3) { + error_setg(errp, "unsupported GIC revision %d for platform GIC", + s->revision); + } + + if (s->security_extn) { + error_setg(errp, "the platform vGICv3 does not implement the " + "security extensions"); + return; + } + + if (s->nmi_support) { + error_setg(errp, "NMI is not supported with the platform GIC"); + return; + } + + if (s->nb_redist_regions > 1) { + error_setg(errp, "Multiple VGICv3 redistributor regions are not " + "supported by 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 Wed Jan 7 09:26:51 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=1767053267; cv=none; d=zohomail.com; s=zohoarc; b=G3q6rd1BkFceDBr7RHUrya9Q0OtrcW7gBXGB7dhP6DgEc0c5glQu+PvkoL4rNkcuAQyWeyoUpsK+Q4lcWVW/X+A+kTXeZ/LjUwcmIVAyGr/GSHzDGXclb86+tBOsW+jqqHAqhXLv9sh5F8eJgBXpJVROUZnEV3wzZcDIizSs9bw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053267; 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=NOtnmoMJdpIAbHZ9cVTVx9Uk04rGkx2azqpbmZx9H7k=; b=eHwLXobGhZhwRhs3JHXxbGUR88hcUB1ZtofDqvTAGL6n2AH4mxl9JayPfY+IxOC0I906n72cS3BFciFj8V5P4X9piZJ1C0Frq97vNeZOGqK8rGlbX+t1+abZGtCnMxO4eZLErIsdDpAuksQ7JMg6UlaEHiNbJxIvJ/Gam2sgtOM= 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 1767053267266803.7020923709645; Mon, 29 Dec 2025 16:07:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNG1-0007vm-2C; Mon, 29 Dec 2025 19:06:39 -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 1vaNFB-0006nl-68 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:45 -0500 Received: from p-east2-cluster1-host6-snip4-3.eps.apple.com ([57.103.76.96] 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 1vaNF3-00041c-VL for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:44 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 0F0FE1800479; Tue, 30 Dec 2025 00:05:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 40160180045F; Tue, 30 Dec 2025 00:05:27 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=NOtnmoMJdpIAbHZ9cVTVx9Uk04rGkx2azqpbmZx9H7k=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OwxInbpZLTLQFPlk6qhdAEk0AoMdqrZIEx2bOdAEvKMGKvYhnDsHarIiEo3Wn2H2yMXtwn34oEqLBdcW1LlVbG2AKZH87Wra+yfdfLnjzOsSHgqmiTYtEcNADF5w91DzcHR2UPmiyt+tpmVJ4LG/nJ2ZvGx0/9RdaLNgBSIhr3ut90mvFDYG8lJ4AL8ctZQSHe43WeITCrJtT9mBrGnvXKx8cPKvlufiISF6079lp99iBpQ3KE1S7jGZjxtT0R/WH2HgNNIYLtwgpY2DRZTFEmf/ACARdu+aGh3uPMBxKKUdqawt+tfPBUf8ff32Oi/3Xh4chsCc76Uw4lFD8MPs+A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 16/28] whpx: add arm64 support Date: Tue, 30 Dec 2025 01:03:48 +0100 Message-ID: <20251230000401.72124-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: wOuXdovuVbvhLxi9h6lMHhM_P740vjL6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXyEsUyyqjdcKS HMmLqObcMl4gWY3QSlvo4Bkl2wHUB8Modisi5qWUNbwS7OTwiWgUQhFInVhIZUntZA6ROWoyjSx rEBKEnDmYAg87U1cIg1Q6DwHljpwmVvro56AF3luvbj5faeNSnga+mmq7agR4dmT1VX/80Re6WA dKJc/3GsnFZ+uArHM/jlIgttj9LjqI07LmKTexhyEYQ8aRSmTq/oa0o02PnTIan+7YmKT0GGUXg 0yuNRQyHdiKc4Z9WDyn0sVHXcEITQ0yVmFeAsVNuKJlaANUN8c1izOWkz/jK+NcWdndEDs1MSjY rLksNg06HBjq9C5eBFl X-Authority-Info: v=2.4 cv=bttBxUai c=1 sm=1 tr=0 ts=6953174e cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=coTCL0kfoV_fbKzCm0sA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: wOuXdovuVbvhLxi9h6lMHhM_P740vjL6 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 adultscore=0 phishscore=0 clxscore=1030 mlxlogscore=999 suspectscore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABimQIhDpZsUsEuPpeJHMuvkTOQfnLG+pz3EoEZZx2WUKBinLlKZSsnHhXo5oI/o0UA7L7msJDlIfPGSERZNaX7ngS+A0sjvFOmiuyXEqThF6DtRke4gYady9GwmVswhGsgFrICXACjOIv8kSWi0vZnqUI+sAULt/zI9SD9Qb4OH+sKQdRhi/YmrE9n8+1rZz5rzx8NN1Y38krg7uJLwXYqVQQ7rWexVKXeOTbJToRYWYRUgrEu/5IYnR1nr6pL2w+RmnYOEh8wZ0M/r8FLxlYczcK+VhIjWR6zjsiDJp3D6y6bT5O4RC3jd8Bg02Q8n5bWVlAl9xLLU8FZ7NLItclYjKBwupWSeb29dmvRp+ey4MbmVLeUPd3snBPBouIlrcK3hJQcxB4bKCYC5J5WYY9PSrhzg7OII97RVejlMGBPLojB+gCa6L4iFpVWCIkGGzAOyZMLccxrJ4oqH3rcCvjGrXnhxx0J5TejcIx2Cozcbql62IOZZ4/+aslhUuXz08MayZ2z0U3RdSR7VdU+3OcRodK+nURqMHGkYIac8WSLl1yOs5fUuvQaswg6G4mNaUp0tHiP3nbABG2yJapQrPaiXADrcB4ppnQCi+8EWej8t8qwIytHr+4yWTN/c2dP4s08B0y3aAKlMiRC7rZsZnzd/CZ539dwhXXGhcpJkiNgc2vAlZQY/Ev9f/xLAykdNdAgSX5jQWInN6swx7N9o4tUYguWBWm4IUDU8ea9K8x3U0+Zb/C70/SqLwOay2RJfz4QMRdcqJIeWjoSf6KR7a7FRvyDftk08MxiVQ2ROYYK51jrt9nMoZbHZBKwD0vHv/OTRIDSHvRMbpKUp1eHW1s41QbX8zxZ7Xr0LVIADEJYKLAMKoz6UO+9MCVSmtmCDDZsQAvTVk9DPp4E7JvQLpOON6jI0iljwasm64i+yZyDhRmRZBdwbxidSI7MehU3o8qvBO3 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.96; 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: 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: 1767053270126158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-common.c | 1 + target/arm/meson.build | 1 + target/arm/whpx/meson.build | 3 + target/arm/whpx/whpx-all.c | 845 ++++++++++++++++++++++++++++++++++++ 4 files changed, 850 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 3df7e03654..61277a627c 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..75b82be4e7 --- /dev/null +++ b/target/arm/whpx/whpx-all.c @@ -0,0 +1,845 @@ +/* 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((void *)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].global) { + continue; + } + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + whpx_get_reg(cpu, whpx_sreg_match[i].reg, &val); + + arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx] =3D val.Reg64; + } + + /* WHP disallows us from reading global regs as a vCPU */ + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].global =3D=3D false) { + continue; + } + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + + whpx_get_global_reg(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 *)((void *)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, (void *)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)); + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].global =3D=3D true) { + continue; + } + + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + clean_whv_register_value(&val); + val.Reg64 =3D arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx]; + whpx_set_reg(cpu, whpx_sreg_match[i].reg, val); + } + + /* Currently set global regs every time. */ + for (i =3D 0; i < ARRAY_SIZE(whpx_sreg_match); i++) { + if (whpx_sreg_match[i].global =3D=3D false) { + continue; + } + + if (whpx_sreg_match[i].cp_idx =3D=3D -1) { + continue; + } + clean_whv_register_value(&val); + val.Reg64 =3D arm_cpu->cpreg_values[whpx_sreg_match[i].cp_idx]; + whpx_set_global_reg(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; + AccelCPUState *vcpu =3D NULL; + 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; + + vcpu =3D g_new0(AccelCPUState, 1); + + 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 vcpu; + 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: + g_free(vcpu); + + 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 =3D {0}; + + 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; + } + + 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(WHV_PARTITION_PROPERTY)); + prop.ProcessorCount =3D ms->smp.cpus; + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeProcessorCount, + &prop, + sizeof(WHV_PARTITION_PROPERTY)); + + 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(WHV_PARTITION_PROPERTY)); + + 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 Wed Jan 7 09:26:51 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=1767053674; cv=none; d=zohomail.com; s=zohoarc; b=VB7cEtP/8eRYUAU+Xou00qVVewoGkPMMZ9kKCs6a4xic0O9LQqk97ZNFGoKl3vuvBe8LGfy2edC3TAjsF8iPG7rUNhIFFBVRLw2JSvxU3QzNwbuzMKKBrR6l44OA/OBkHx54HVAEI333MYAHmnr0ezfDO8t+5Mp7EVWvIoM8PYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053674; 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=RYd36B4r2zyhfdaIKZ22rf125WLRtXVxcPagevuCjqdz84Fl+Z3dCCphVHJP/kBmqed0pFv5oQT/tiwAxH9gXugvwE5oC7zC4tRs8etzhGd63Osv3tBJV0K8q4dWz8sGLnppuomkUtOmYpJy/FnDjL5+ijaxq/P7G1MJat1gOwY= 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 1767053674437421.9566121773272; Mon, 29 Dec 2025 16:14:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNGE-0008TJ-Pg; Mon, 29 Dec 2025 19:06:54 -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 1vaNFC-0006xR-Od for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:46 -0500 Received: from p-east2-cluster1-host8-snip4-10.eps.apple.com ([57.103.76.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 1vaNF8-000421-Fo for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:46 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 9EE5E180044C; Tue, 30 Dec 2025 00:05:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id DE0551800444; Tue, 30 Dec 2025 00:05:31 +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=DIIKvwXG5ZNR/DEyn2lV3hWwp19tiecfIQY7oCgQx48UbL9l9e78/r8Nz3kskpyex0dNU4oDWpUKgUGLavw6hgx5HDBO36OWU+pEb/u7SJ2MSd+5Uv7GGzV9NOoE1Svk929Bo3znJ5Hb+06JqAZhL6tqPyNa67Yw2B7dLXzHfiqtzinFSn6cSvWOYi4BJFhP0YEbwx8MhEcn6MuHT8FG+2I/St07WIDgorDSuU5yQRCG9oVoQBeUoZcTLjG0gQf0Soif/zD/5OfJrU4fnq90grr1RyKw9k3O4XVw5d0iMaUJXEX5PNJY5+XJ0FFNbPPx/9sm3jCxr0oQH00RSkJLUA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 17/28] whpx: change memory management logic Date: Tue, 30 Dec 2025 01:03:49 +0100 Message-ID: <20251230000401.72124-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=Wqsm8Nfv c=1 sm=1 tr=0 ts=69531753 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Warxv3Xc6ASOjn9-k1MA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX7DnE46JFnNa4 n2EI9XVD66Sg41ps/H8Updo0j6KhOfVMKPcdmabLYybPBH9DyufWE0dIzMy5gTNJuoalfBR2WLF 5FCpF9VbhHZpbEOoK04lhKG6W72ygrQ7BZFKHUY0cRUdBx36ymKBu2+w6qk4ZX9gbwvYCOg5rWF qqxQN5mVNaIxDiAt8vpGkjaLfaZ8N1e/zaWaqQlsTQbMhnV/vPEEsOkIfoIahd7Ei1jluvbIZNQ r6pfXLmN6XmpQmfxHA2iIxVrK9GOD4oiTdpvoZNrQ1I8ErBj1vEyoNoPpu/sKgCX+NGsmH/OzcE ZsuFFoJmw2U6/oRHlQ3 X-Proofpoint-GUID: zhUu8P3i9JInvn7ln0RqTTo9F0mlNQlH X-Proofpoint-ORIG-GUID: zhUu8P3i9JInvn7ln0RqTTo9F0mlNQlH 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 clxscore=1030 suspectscore=0 phishscore=0 spamscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABrS2aNxATCOekBfjdaFRZP5xhfk+c5PkoVsy82gYqGuawpPXvkTMtgXLz4tACSBg6PB6m7HDfu6KFlgBPeQM//QlhjJplnyY0UqR5toYtv3vTEYEwx3tBDeFpGVaWDm2Gpt14SncCt051MnzyOZYVaMvh+fTsRaZfNKdHbgLdvP2GDWk3dHnsazQgm18B5x70JTUhhy//RxcNIkTWcO4DUa1GjZs9f6IMJujqZ6UxIrHBQtNbaunMPSiB8TjKVyoPw37B7w/hV5ohzrHKjuqUIcR55B+nogq1md9RwaAf7XBEC+hx+DPX9Y9i2qyh0QTKI6eoNxM6cYobXWHzUpY4sTAQ8W3Af4m84t3vfavLPZbgKl62O/0LSBSkZ1RcGtaE5+xz/cQv6ywoef6GVLrH+8MjIYQRN6v6huPiI2+73f6DV9mAzemCr3MVOWYi4kOhcvdkX7gmkEP/7YOyjOetUjOiX7KWHNf3SDbunRHMxbdalaWUNly0ItI7upShC7DHsoIg4NhDB36Xb3aZDcroRSfwXjt/BZGQJgSv5Akfcc5l31BDpEoeApE+t47EF28S39TScNPOuBITQY6BFryR1OulfQ+Xqd09qEcJVbZ/PxSscUEWdgihyKJkIqRHdj4rjwet0KL+vSi67a1t1q92a4wDprI+y1yewlhWOcH2iWQ0TqbVhlfs9SllR2jM0x5OBrN2F942vQzLSWiSOSTo51a3saEOIdY0T+ddVrjuU5JTAhSVoTD51q5VetMv+LNU+GnL2CMBt1YxQGB1wC0/1n1MJ/LxWl7cO34VmtJ+i0bqB01WPLIClkqSw3A2NBjUR6z/JL8LDzHjvkteZELfoWX3ye1mJD4axDnCz3XG6RoeJRWb72H9/MrVwxfJJvsd5rZENR85cv8FBu10tR69w3EMWOixGMqAkdh6D1liJM/GF/T0dJU7S/MwDBq0/vc0K/YDsFPG1Q== 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.83; 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_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: 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: 1767053675642158500 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 Wed Jan 7 09:26:51 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=1767053457; cv=none; d=zohomail.com; s=zohoarc; b=Z7bgA7uf8Cni7mR2WWuUr2v5wHMMR2v5I/YUYfgZhUORbRy8NNZcgwBBlOE3RYxMMxPtXDlOxjP1RT24ssZTwLESLOBglAULq7SURc/1EJyavXp0ge7uuwnM6hqagAuuLFvmoGSAfEFh37GQWZb1411n9038gY6UO9c+bvJR3kM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053457; 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=OC+4VFe+2hpyeDt89pK2uOTOvxP1qx8TYD2iMCOziwc8DvwiKbn5G02mJTE3MSP0/VZKOuVqGEegNJf8JS5seHPaObsH5sI3Hwx6B2Um3Y42+t6OoiPYGQjr0xjdei2e2vIp2JCNM1gE4ENuf8Y9mdK8CE2rZpPkmxrWYrmaEBc= 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 1767053457823427.50320305828313; Mon, 29 Dec 2025 16:10:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNII-0001kh-1A; Mon, 29 Dec 2025 19:08:59 -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 1vaNFD-000745-8l for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:47 -0500 Received: from p-east2-cluster1-host5-snip4-8.eps.apple.com ([57.103.76.91] 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 1vaNFB-00042E-A9 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:46 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id A1D4618010D5; Tue, 30 Dec 2025 00:05:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 31F4E18010D6; Tue, 30 Dec 2025 00:05:36 +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=ZAQpfL6jFmoH6TJe9ryscWIkEN1tJ9lFOENAskmDm6g/oXtd7vJ8Y+AVBEYu4iw2Gbf4qk66HxGOnR/wmhYuMMCRod7fj3HvN5ixzOSDZ6pKIENJAn3y0H/glTVTRgA/Tx7QgS6vPMz6ncdKScCbrV2yQs3Zi+1f05Fl2YW3Mjh65DA1ofcnh1n7BY9H+QXS9DY9XtveHpdlhiWd1er5FQ+rT/FtKWhIAuf7NVAwDjze2qmVvRoB+CRl5Ecd6vsAffu4RW6fkw9pquqvMDdZl5ogf//rBs7aY8rMr3JYT+XTImmgKHa81ICenYuID+j/yzzETAEaCwZaaxy4WJaaHA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 18/28] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Date: Tue, 30 Dec 2025 01:03:50 +0100 Message-ID: <20251230000401.72124-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX/Vct240fj2eX UMExZjPQkx648rqBQIS0zMbTAkI/fqfXNu1ctGC2tYF26VxylbH3tmhKMYaunyKC+ye1wzJfR+u 9wKxfQu2TeS6+ZRLoZtAOdfiTBXVvlMa7qdVm8Rpx2JJlMNvwoyOd2bAlkF1dnCPTmlf3uVul0d FGcpXIunyBccxHOVPF3oTBQ5NTUEI37JR7q9efoVKMC3Yif0WDXpAfnzqhvM3WMkhpz0ND4ZJIW XWnxKhIA2JiIq2ee0+wLOze9lGR5ECbK9UZcqDCLtXdb4Ct939y4BbbGPpMC+yRTbTKVGbJWzRl P2Io0OsJjLzBFhWe+Ih X-Proofpoint-ORIG-GUID: aZS_OUviAKYJ2vz3KvDNK1EN0xr-1OdT X-Authority-Info: v=2.4 cv=fr/RpV4f c=1 sm=1 tr=0 ts=69531756 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GfoCO2L6IEBdUbzNuv4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: aZS_OUviAKYJ2vz3KvDNK1EN0xr-1OdT 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxlogscore=943 suspectscore=0 malwarescore=0 phishscore=0 spamscore=0 adultscore=0 bulkscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB9y66rQar7KXxsAHfs+4k4iGOdpOjTBtuH6C5PNXWo7vFSZW7azL6a/uYTPzZHmcZ3gaKY/K1om9iXAeZZ5woEWr9YZhl9Mw/Eybd+pc+80WI4ZNo5wTbylwzF6rQGq02yp7zXK9vWmLz9pDeAQ5WQSk99B8APbPyAaoxsK7VxAbcJcsGQAUiRP4POoWkfYG0BLmwE0H98GDmUOhlxX1Pi///NFVM+HDjROjTkZ6u1dCLj5mRwQRe0kxvnrRTGkC3ZOwhGhSgUkH7Hs+xy+7btijJ3j2/xgIaa/c71Z1uZBccGh4jr9O86DF78s+23fpgcNkoTk++b1owiUQR/QD/GzKl74SAMmMkHckLjen3dI2EuCJMf/Bc3ZX3RU6Vj1HnaiIIihLkp95P3ILda83PV5O48zuG3Yt48kyTkTym8qCG9aEpVYdCykWJzn2uMkTXiXkshFrnuKUYFfJHcV5ibeofIVzaaG5qrCPVvbW1Zi/kvoebmmpcgGy6jjKVj553FPFa6FT9KbLKQGXC0AVqTwkzJ2l1MCemcSrr60EZmblzkToKmwdxxYgO5EXEuFfd8Lt6xrsEYOWpOmz1/WQpobfUoYUl0+vsZhtgEXoH96L0XtaieaoYjaiWv1lBMG9yzUmNe49tzC5eM+KrMvohNmKDeyqYfK2tm7Qz2jYB2rKRCwxp5pCoVCsMdyXMpoN58ZPmHxPhgp8x18m3zC97EAcbVLM/G3t4sd+1gVgHn2VLcqSOLgizlO5oPV7SA9bKFgCc/hrdC2MnIchjWybaTv4XSqMCYMQUKcxb28bLl3X1ncw0IyXL249cnzTJ/gAPkaYo+fkhaqWNtodTf0toIxhBBjkKCXUqf6aOatHoxXO2/aJpF308aY7sU2xnd0t9brAw1xir+vitq4cfufP3LpbozflHeSn48YU4o4SbEgW8vBV2D5hK3gOeicziaOPCvAM25LI/hP6KM+TlSolU1DQ SIAluw/IHX7Q= 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.91; 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: 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: 1767053459748158500 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 Wed Jan 7 09:26:51 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=1767053523; cv=none; d=zohomail.com; s=zohoarc; b=EASGu3O9bsD3oenVAu8TnXdzfhSCeNfzYiJh4GJeDlLUblPjbxpnTJJbOtxq3UUrEyxF4HyAVdvhonwapeIC+9O/5NkAVCbvWcb6lw4IHwcTClz4WXE7DWqmfP0n//4Gg6AmtPaz2FY+aKAkxIzb1zhIXUBfK2lXUbJU8aESTrg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053523; 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=3K9IlVyeD+k0Vd5kBLMjDIDGkWQRJk1Cb7obcyivtmA=; b=DHqCbySmYwtPh5+n3oMBu7M8/uH91QVMBR4UwPqhIn/0H8J95J925MYWLweERDuAmCSrnbDDJh0IJOO2Fb2888b2XgBX1mcTCFz+Tn4pXe63KL8zNfMaMjoesPJs8x0fwKOBRulKWX9UCyf4hx6sRLoLxqm+QSZAHiKD6fsOjiA= 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 1767053523864215.49465714935366; Mon, 29 Dec 2025 16:12:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNKM-0003vP-Bp; Mon, 29 Dec 2025 19:11: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 1vaNFU-0007SI-Fl for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:05 -0500 Received: from p-east2-cluster2-host2-snip4-10.eps.apple.com ([57.103.78.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 1vaNFK-00043O-Od for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:05:58 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 6CA94180010E; Tue, 30 Dec 2025 00:05:46 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 5B1201800470; Tue, 30 Dec 2025 00:05:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=3K9IlVyeD+k0Vd5kBLMjDIDGkWQRJk1Cb7obcyivtmA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LQLl9ZMsdXkB3s8X1XoVpn1yDoh+U94HZcHpog1fboz4s0LTTEBV78K+Jiemnu1a5I/e2LrDi5UvGCxASNbJSo4wGlmmD7xK6y026yp9v6S4/JVMuwK/8UD3Ya7RLIzEVkkgPy9KikiV5u68iwMs3xZfJ8lv1+Mk/hZfih5mVrOPR0S7vumqKuY4+LFZQyKdj/ihxZQV1VO+ASA+Rx5JUluthjTVRxZ/APV1BlaX2shth+QhouAa7ywzbQnxfP+N2ipNPAj1bjyTU0pB8ITwAdHFccOsbwAe05tK0OBG6Mk7hfVvCVTHD7uIMIFoTIxQrXt/JffSqpG6vMX8G59N1w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 19/28] whpx: arm64: clamp down IPA size Date: Tue, 30 Dec 2025 01:03:51 +0100 Message-ID: <20251230000401.72124-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX5cEkKX/tnHkf wVHet0C9z0fbqEU/tXXYdbCp0yD5VnNr3FFrBfFnEtWBrkQ9ZqEinGm6KALvYBk2YnO3ATOCE/s 2S93ilwqd1JmETY93DGEY2QYEc6+QiMRxg44cJ0PWC57OFG0NZV2aLb5ApxOAPCBI8ofZHe4oRl Hi+xcDs/jTcRv5j6/0voYN0iLbDv4T+PK0fouH9FjsKcvpkMwCqUgA0Nk2OL2jeN0HTDbX3WTiF WoQIU8XVKuiPWHlLSOEbh8uQGmvBfcTCVlyoV4t6hk402LRQIxUhPC/EjekBPavln2LXI9N/PyH sgZhRe2ncOf6nKCp2Aw X-Proofpoint-ORIG-GUID: Z7BXYmIRQ0pOl168LM_XCGxeuyTwjF7S X-Authority-Info: v=2.4 cv=PfTyRyhd c=1 sm=1 tr=0 ts=6953175d cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=wAo57kR77d7e8uaIccUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: Z7BXYmIRQ0pOl168LM_XCGxeuyTwjF7S 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 clxscore=1030 suspectscore=0 malwarescore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABsujI6vq/qJ9egnrta+35dLgym5oCKnu5TtZLAtdBBuSYZ11si/YrmB9nppT3R2IxoKUrwuSe2qlpslqvGgNfmb3c+T1B69+Zw5sH9NgoHhAsJYkaeNijXOmQsfqhm4k5KvAVR2EvFVJRiEekMimfQJ1/HrUrTVUQFYl3iVaqIYn7iOibXhP1WC+NAxTwppXyYg4LROJI5Zy/EphXuPyDN45tD9gjJeU1vuqUTWY7XymJApNDUZMIkhnlbaZEJa5uFWahqwhgiy2GuurHGoqbcGwuiD4SboEOI6J9FTakCPLohiwcECTX5ffuzwIBZKbzncibS/WhUvWMednLNKrRLofitZ4em2pcB6T08xZu+KRDHbVGV7JKY1jrair3r550ZQNknDoz6zJYpXlEzN7wZ5j0j2Jq46BF+2DxsaAbnsdaF14yYQqBnx3107CnvluUSJcsq/wti+rkHCnXf7pa7LBVxwctR5ImKopWn3YuVkRgw2mx3l3Cb4GzXbIvLbr/01puORuKvypaX5ekCGqvF80o78Ko8gBM57k01aO96LEBCXN0dTbY5q3sZ/oaFoaCM8v/60n8hw7m9rdNTbyPjqhK5NO8ybP4XJEnMyMI8pATWBT6YS7GSxBvoeZJKmrt6IydMw5ve8j70PLOjcylaZAAxG3ef+fRRlOR/UMgUWeYDcVq8sGOrH5HRny71t4enyQhYT2w5czwklW9ooUUERZvBWD7ufn8tlEKUqvYutND8PXJbkIfwqztJ0Lpnw7mevKy/BHCTs+T6usOJeDuAd+DE6dRo/6qiZni28S+1xoxudTBBffSD8yk6xfiNNtiggYeMpuRZL1TAcXhvrRWWD+H8m6kqlZomjyqnq6BjvcHzQJtad4kn62UmRLOj4TfAA1gHOn7Mb3mBvBRgu6A7PozqGGzFDr3mweV+MJhYdrVKAOQ4w== 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.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_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=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: 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: 1767053524672158501 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 | 45 +++++++++++++++++++++++++++++++++++++ target/arm/whpx/whpx-stub.c | 15 +++++++++++++ target/arm/whpx_arm.h | 16 +++++++++++++ 6 files changed, 111 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 01fc1f9ac9..86d725cc76 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" @@ -3315,6 +3316,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. hvf_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); @@ -3414,6 +3445,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 815845207b..0dd9ef2613 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 75b82be4e7..fe58217e46 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 @@ -657,6 +658,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; @@ -735,6 +770,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: @@ -757,6 +793,8 @@ int whpx_accel_init(AccelState *as, MachineState *ms) UINT32 whpx_cap_size; WHV_PARTITION_PROPERTY prop; WHV_CAPABILITY_FEATURES features =3D {0}; + 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 */ @@ -767,6 +805,13 @@ 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) { + return -EINVAL; + } + } + 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 Wed Jan 7 09:26:51 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=1767053766; cv=none; d=zohomail.com; s=zohoarc; b=FZvp5YZTeN/IbS74dvAW1uGyBEm0brkbVRfmmVfxW5TPb6oPmEz7PBaKwYsthm0kX2uRhB+1rgiudCVTFB5LmQWoKGEK0ioMZ6ryBUTazfj+jU/Y5SA0op4QVF5zr/mDcXDOkJuOCOvW07QVTg1khWcqTrQpGAQMktdeqYHd4WE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053766; 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=0VtyqK3uGcqLmYTlFZQqOHtr/MIesG5/lU2Krsk4uvs=; b=LYrQLIzV3efVyB3166DMufu8KqQjVe8DY7uFLdVUGUKoCBXq3c0eIPGOXBD9wqGspur7ROqqWz6CJXFKf+4Hhij/XiNHRX38uf5s37sIousA0HBh162M2ZRGl5It5aGh0XznMnX5Rvk113Zjhyvoi8mtMJx0BCvTPZHVaDQBOMY= 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 1767053766369940.0182666808862; Mon, 29 Dec 2025 16:16:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNHL-000142-7C; Mon, 29 Dec 2025 19:08:04 -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 1vaNFZ-0007Zb-8D for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:14 -0500 Received: from p-east2-cluster2-host3-snip4-7.eps.apple.com ([57.103.78.110] 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 1vaNFU-00043x-6r for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:05 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 08C4F180047A; Tue, 30 Dec 2025 00:05:52 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 01DD91800450; Tue, 30 Dec 2025 00:05:45 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=0VtyqK3uGcqLmYTlFZQqOHtr/MIesG5/lU2Krsk4uvs=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AfI6gmPIUSOkeM0d6q7I49sB3DxZgnxVS/7F+201CkUy0sDo52Utxs/AIgCRskX6Og6a8Vii6Ye165ASsozQshbqojN8YtlHTa33cV5LhK3hjf2UINuV8muxR4ePpvTr1dT+3K4M99GH52O1QhAmzXqc2J2iL39xazn+6e7ferV6JN5P/3nqOm0rENFMOcfB9HMwI+7R9qVI2M69JP6ErAoWjyHQEu/jBQa3VytJAQfBMbSMabh9KNiwlpNTlD/Hx1OTiLUOI5PzzD2AldO2tUJ9q5bEBPZY3txgS5qZwYOVHMm5ny1EUKtrtY/2YDCmxNv8HPun/Poq30CyIxPisw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 20/28] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Date: Tue, 30 Dec 2025 01:03:52 +0100 Message-ID: <20251230000401.72124-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=Wqsm8Nfv c=1 sm=1 tr=0 ts=69531763 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=8f9Dc39nvweVu8kgsNkA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXw25tVp65dOZD THfSkSwYRCtvyOKm9VqzXMLwkyuVn/jUrYL0b5ngny1gtxEvHo9vwThmERZ4CFnP/qrfA21GNgh yEo1LrKA55iellFc4onk5VqhEof2oGJOyzHAugysJlZJZT2jTr/WrIRB/JtKORK1ki/BAodqdfo oMXTdJPmICai4NxjjJDdHbBH2jAU657xmQ4t7a8XfNlc/DAVVKBpIzWThhWhHKe2yQsd8Jp7hse /kzHfLJr67LlvNHDLbl5jH3EpjoP3HY9ZzjHUIv2usW7vPN7OE3vw8lqkwQzqzuqcx8Mo+4rnBB ndvuFIaSD6sGyFwbKJy X-Proofpoint-GUID: k-UaB-93Komac6mh-4nK_igzffBkdYCx X-Proofpoint-ORIG-GUID: k-UaB-93Komac6mh-4nK_igzffBkdYCx 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 clxscore=1030 suspectscore=0 phishscore=0 spamscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABTutaTFYadhsg8I34JQNj01XQNdDv769pog8twBFhVnCcq0zWuOzI0aK0SO3PQ4Nhykr7LqbMHIWM6FThx9YYASgIKRl9NDG8MZYmWKo7UmDu5ZsSfJfqDo9E+gxvKD/tMqlYllo8jaMcbxRDEF7g/Pd2+bufRDdH1VDZwRpnKAy8j8g69kPMYXSnW6Q9O4uZcnCS/nLeiL05GPapy4nYwFYJtkKYIT4KJkuqYxPczsCHGxYRYLJuwQV+ap+s5TjfwqRsvSorPGIVWTaZevEJpV5YgLC7eY+mgojpK/AbGGr74bNS9/oYPQCDrc7PkAlxD+53gS+iP/jWiLyy1nH6Ij+OTm7f2A+S6I0U0/mEXfmHwJDyv0KJmAoWOBQaeRjMtyp/YYZLqeWT+PZcLrzYFG++hmpF7+CkJnVGNyWNotWye+c9JVPyFblqAg6esdYveG3pOq3yYgmGOuVvg3kuO9ZlhYFH+sQTGQYLuDDQGuSQjFZiCq8ozIkWgdzeGnu0BSFymtmdrdohrvUT4+8a/DR1X0suXV8EnFCJWsXdcwbJeyKVmOmWX3u9ZHHhq/65eiVba9U6Cxu3u/8yz+hTNyUHoxTPx/8GY7pIQhbhmvrdaVQnkcyojihpy5V+oXz4tYdw6GRs1Ex+PwANF1XDmwwvC65eBf7f+ambe42eWq9cMkcz0PdlmJpeeoDCf/2yww22WWyS/3dEn9/MdzxrI3xBqq17PvFvRgWadFpnN4hpkMcwaWglz37BGtj432y51w+3sYEFANErR0XibL8Jo0UTP8VkZ0JD845nH2O/eXjKomIRbR5SyKJzAa/r8FZtEd1DlHRLsjP0imWdZNLpf1F3QXoz3BMTXCPYmeXqVxIP9AjkUqxo+7gfo8ANDz83ggSir60O3q5LcUuKrX76OMadNr361o4XaBKXe2fQmNLyxf5LZk8duSLJdDxMYd45h9a6SA/ZewS76dNMZOjIUlg = 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.110; 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: 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: 1767053768522158500 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 | 41 ++++---------------------------------- 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, 33 insertions(+), 70 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 86d725cc76..942efb8eb7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3316,43 +3316,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. hvf_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 @@ -3361,7 +3329,7 @@ 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 + * the maximum. hvf_arch_get_max_ipa_bit_size() conveniently only * returns values that are valid ARM PARange values. */ if (requested_ipa_size <=3D default_ipa_size) { @@ -3444,8 +3412,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 0dd9ef2613..f4e574749a 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 61277a627c..9f2eb91635 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 fe58217e46..4254a8aadb 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -805,8 +805,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) { return -EINVAL; } 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 Wed Jan 7 09:26:51 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=1767053569; cv=none; d=zohomail.com; s=zohoarc; b=CPhhBff7MbSdCNTNADXoTHyVY23iMsVbDfTw+j3NaE4OasgSXztK24HAtynUQpLE+sGi8G3UL5sIrBCQEEfdSDVfO6zP4NRjf9Me6UvqFZIwMfq4i2XR3HzE/Mn5Z6ZwU+cJsJ2Buy3y6T5g/WAJ2vnfcVirydptOdkfNaBrhDc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053569; 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=vIKxdUqmkJfbx59PuPOqxNWNB3HpZRZgAEdMNyICtkQ=; b=P5GGqVT6jZNEtPdaRo05RTaX7gCy8pkKB9Aq2k3hKchr6ZXvDRvZgGDOwe5xfZuwhWH4A+4s51dO3AfPxGIlnVrcMQMZ1f/cMEjrzbIEEHnVfipGx7IaIlPMb1qq93ng7Yna8NzvErEMgXVTt/msZGz1ULPdLDsH+5jklJfjq/A= 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 1767053569825841.4160844215343; Mon, 29 Dec 2025 16:12:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNJA-0002Rl-Ek; Mon, 29 Dec 2025 19:09:54 -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 1vaNFc-0007dI-Qv for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:18 -0500 Received: from p-east2-cluster2-host1-snip4-6.eps.apple.com ([57.103.78.9] 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 1vaNFU-00044E-7I for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:07 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 9688B18010D4; Tue, 30 Dec 2025 00:05:57 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id B03A718010C2; Tue, 30 Dec 2025 00:05:52 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=vIKxdUqmkJfbx59PuPOqxNWNB3HpZRZgAEdMNyICtkQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Qcrrf5/s2lsHypJTBKClPQPIeO4Mv2HUd4YCYAGdOrmY4znP3OWY0fne9l/wP2FR8JSzVTq0u7sa2VICcrydt+JDhgFSFCT/SJK3sxwBQs9iExxiAFD5rA0/INHPKXpW94txMvHtXnN297bNO+IE6lm+C91MbiMqiLqWMq3OmzIKM4h+7mg6FVLSqrJLdrPxlNmbpYRGBmwTIIOPsgjoOOXBuisSBnz42Uz8wtk6mZJJ8lBow38iJueNK0IBxupzsWG39zU/wYuvPyXlHhIRs8wn+5cawLL32Nh6lcKILrZ2s4KbBQuIzIQcL53wB21cld9EmPaphWop952IBjvmfQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 21/28] whpx: arm64: implement -cpu host Date: Tue, 30 Dec 2025 01:03:53 +0100 Message-ID: <20251230000401.72124-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: DJpGKgJPMLHGq2u8IasBzHJYeOt2ah60 X-Proofpoint-ORIG-GUID: DJpGKgJPMLHGq2u8IasBzHJYeOt2ah60 X-Authority-Info: v=2.4 cv=GrpPO01C c=1 sm=1 tr=0 ts=69531767 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A: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: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX0zmaR5nwo7P7 dUSlWcPjYXXFw/YB7tWBHbiJhEROv4UOB9yV7WPAapjNSSibMYX3oA9qBbzA7Gbem+OoFdLM0Mg VudfIsGFce60fYrgKmlJWupnKU0EZE9+GtIR3JeKpFfPQ2ZJenDVpIh6vZxUqhNYfVWemk/PF7k 6lb4VAr49zRL9VMp7yLe6O9dkcFNVBIIlVSWfkrjduxuS8GGYw+vE3WKuNv/0doHxhWBM5tCHgx m3l3Lnq6nksQoqF8BYJlWC0KzgJqUwH7FZ+iV92kYNoWpMIYhf39sbVqD7blFHVlffqaTW+KDGn qf/foeVu8OYX0PcV97f 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 clxscore=1030 bulkscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABp4A2orK8dmXgr2666QJddHH3MUjMqTnkYAzmHzhMOR2VaNzDmU7fTn/zoJLcN40sUeQhKBXLBkP0hgwn8Ixdsq+QREZaK2W9ZQIqn9uX7uuRGRNBYWigdpC7O5Kj2Ph0yfcaICfyo7gOLXZSBSJvY0htfP3j1CS6BMaPnnR3km0dsBtnjRcy4v6B3ZuBTD8acE8HAovlm3BnzBBdV4OPc1sjIlOTJnqQyEjCo/6WeGhi8VMpRkR2oYRQ2bNFMeBf5I93xCwGXqGD2ARRZp3bD6VP4gYI374MHVlOLQlx6IyyLQG+v+govdXbohixpUBV5pjQuOGDIMk2jl8RsIUI1Lqm9w8h1DDIAYGuaWVHkL9HP1OJ3iy7Hkna1uqTyDxRvgi5+fsjMoPluBGoHSYzvSYI2TABHINLeMRvQTsB2g+7lWxyHz2wF/2q8IwgcEqBxy6RMPYZ1074q7QnGLZ0z9c8IJ75OFiVVqMEnkyUm2qmYnvLe6J9Q5onw7Vh6W34Oq1g8WFMZTujqllgpEfgJh+tkNbuHXHHfqvgPdInJKBVk7JTItXh6EdUmGh7mVHXHw98qFsWTE7I3Cr7rMd75kSAzoV70EMt1cQEMGZlSyxW8sfo95MSqxzuDValAWN6lKMuqgEO2dgSstZfpLZaOko28Wj9zOUPy+Lw7duClg/k1xYqEJD5PSXQd6PK1sncRikQZeqjAfaARm8bniXUmAJZS5esfcQkBKz+D8mnxzrj8pXqjHujne1XfsGaMGKTUlCVtTld0MKfmhpDksmzguGnHRmPcWtrKbyHpLB45a15ZYZx1AnpEXYNLoXcSkMurbeq+pegkHtW/bmGgwojKW9XbkYR+MtzIKmd+wtwms8H3ejTgC3B8hA4A7eKeF2uxK+WDakEoNC6yKCgqJGXGDCAsQJFtKpqfoQARx0wqcKrR7smb+evWgDDPgBQJCw38KRYPazPqQ== 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.9; 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: 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: 1767053570545158500 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 4254a8aadb..07bb6fae5d 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; @@ -692,6 +703,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 Wed Jan 7 09:26:51 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=1767053606; cv=none; d=zohomail.com; s=zohoarc; b=mO41+alZyg/vyEryhEBMsz/a9JU8XKSb0nqRtyDS+fkVHOjkxpxS7hELQEtkyz9vO+WtJ0bq9+bafGYylA8+dV3kUzdWjYdV/fhxo99k28dCzcEE5TOgd/d1D9NEF+9Lpn4dJILua2o8KRbOxmaH7dOw98YDi/kBIwk1wNDNNxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053606; 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=+MsdZaXBCYAcv52ZMhpRqZhO9PBpFu3UYyQ8HifZlzo=; b=ERuW2kMzqJve6Jg7P1R4fWN3dYcCWHlLmy1ZTGxL8zBVfq6Wn4+A1ExKBOxVKIMRHY6C6iYTXJ1qNjs0NHgotTcnEYcBC2hcIbvkw9a5wneKzZJ8czVxF2slHv/ss3W4dhlGSoHzNdwDd6dTk/jzCOQK5M/tkn973pJ320P025c= 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 1767053606255277.1591018625969; Mon, 29 Dec 2025 16:13:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNIM-00020N-9u; Mon, 29 Dec 2025 19:09:02 -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 1vaNFc-0007dJ-RR for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:18 -0500 Received: from p-east2-cluster2-host4-snip4-1.eps.apple.com ([57.103.78.114] 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 1vaNFW-00044m-Eg for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:10 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 9E4B218010DD; Tue, 30 Dec 2025 00:06:01 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 518C418010C3; Tue, 30 Dec 2025 00:05:57 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=+MsdZaXBCYAcv52ZMhpRqZhO9PBpFu3UYyQ8HifZlzo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=M15zqNQXqfGtNAuoOgV3/UVtuwKy5FV9kiXetV3gjH3dzWZl3HvcGkzx0e3JtmiNxCzWzGT+rjJftFBrXqlTs2vsmbsVVFwNzsRoGrTpf+wbygGCjvxjIrxOU2T4j3rtP30EsHyES9TPeevFQgDHm2gYcYzFf6+/iUz172mILukgxS+SdkxosyBLs0bjBjf+8LPyXmDx9tBLhFtmwg+ydEpiCmyCGuWX1gLWF6jDencBFSxjJ+044iofNszi7EQkvx6nEyY7wZFlvPDF5w/oru10Z8dICyRyjTuW14Gaxan67B/cjgEOOmnIuM75N0Kaao5H9CWABdRXdjqKTzgyFA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 22/28] target/arm: whpx: instantiate GIC early Date: Tue, 30 Dec 2025 01:03:54 +0100 Message-ID: <20251230000401.72124-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ic1pj_-3NS7-XbO85S11Mb3Z9WmFkN1J X-Proofpoint-ORIG-GUID: ic1pj_-3NS7-XbO85S11Mb3Z9WmFkN1J X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXx/mIAEv+WB2+ 9BWtlinZtlT9b4aCJ4q1Irir5hhyI58K8BYA5k4t2Y+lXpsEnFbji7HMfSQ2x4tDCzkKkPslke0 ckCqufmEU/2FAUCBmABbKdoKOJXHxtd9rj3KpG2ydE6L/mjFZ9umIiX+lMNgUWk9jMUG4NXq8Uc NflhMEIstmTXhsWuf3JANB/U3IJSamD+lQUA1qkOcBangEfS/VQxUJwzMVLTw7JESt93JTYf/R4 +fqu1kOKKpsgB0oakEk3ej7ljt1CSnDDOIjZBLUGmjMiPcpoKnE3TnoeyCXT3V2DVZT0i7knrba syTyZApQ6Vmy3QaeY9n X-Authority-Info: v=2.4 cv=SYz6t/Ru c=1 sm=1 tr=0 ts=6953176b cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=EYz79TNVRTG0waESW9UA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 malwarescore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 mlxlogscore=731 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABt8zchQicPg8swT8o3lt0r7xSk8VIKLVxABu8jp4+Ob8U6puJmrFy4l0tcXYJjS0ucFEFEWuIer+S2EDJk9nyI5SaI5134jhQlRVkGQnn/9kDRf4zcKBXwL2z9qq2PzWX8YmALEvY+NHMzRIE1HI9TR5BK2jqJOL0iGc2VnQ2OV2Q4FyBfg5PwNrhO8DHMtODdcpAuAfwnYQ3zofDyxY6GS0Yf/cbV5FmzeKqHRB0aU1ySZJCSNiVMJTl8dTEUaQ3GCMBrrn+31FbPbspmG/pHkyhkxf0AwbqK9g4DLuVm+1ZuMmEgnWD3L8qcjVfjmHio4QIDg9ADI4YJxKydaEnTG9yJbIaArAB3BFcgN7phFzVsi/nnPKrumAMdw+bHk+P/sdFjWlyV9ojDPTXldIccSJ8XqH0p3ogozIrx/dFzM+qu0kaMCayuIBG2DgLC/wMpf1j3O1Ei6XPabOpRdzX8ohBwV3vvmZpwXX959HwIRIqZr2R4d1x7/MuCItQ31WKMsZRRc8lP7zkKwUkBSJcPNr0MMwcbD1VX9lJzxOCGGZ20S4/uWumpy/zNM7n/DVgcUYpbWZZyuiAketRTrMm6g8s7aipZdMXC1m+IgtvdC2qArGpYdDzULmcCAleOCtLxuDFwOYc8SojRozgDn2fhhYAj7F9UYjwr9GszpHu1kmEgsiQLDWu4fLo+kc7nwWS/IyMQpW/y8IMCNnrhSS4x3YICB+zJxzjRieAhDAKq5nAP45gkFB7K+3OG6VPFFxIYrFVaRGG9BHZqS/u+66ELP3rEIUcaQMvg61KE1/XCnj1L8ag40Q2irEpRi4UYKu5dXxolD4d/Oky1WbyoZsL6f7DslDF428xzw/ATWVDN4Da4QXzE7Yqja5BcV2RuWlbr4ij7XVKUYrACDh72dOgA+EtzjrRfVXMWBrTXyUk+zRq1KW9FtPAQg== 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.114; 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: 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: 1767053608638158500 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 07bb6fae5d..eea20f5e5e 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -973,6 +973,29 @@ int whpx_accel_init(AccelState *as, MachineState *ms) =20 memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); =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(WHV_PARTITION_PROPERTY)); + 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 Wed Jan 7 09:26:51 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=1767053634; cv=none; d=zohomail.com; s=zohoarc; b=h3BcxDIjB6qyKdKNNhJdJg+czEBcdhfXKv0nV8HbBI4VlP1u4hsfvNylvdfKMyRxg6Vapaj+qqY0Hyp2Yfw4vkJSFI5k3bTIzQ6QR75ZfGfPS0u0kucEBg7Py4/R8Ncw+86wzFIWqALR/5cJ9ghXX9tUmNRUBr5y3Iw6gF4BOf4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053634; 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=kLQA6rv7sDQAG6jrMiTsp6VgPXcx5wZdDjsp3PZWbuo=; b=JVLZnXb7WRTBWVQ/0Y06+za0McfNWb+yVM5n6MDH++0mnZQeWsN5Z6eRsI7WP61ISa56tLzafiUZawGijSixPLTI6DKye8N2qB7ue63yJd047iEvEvtHHPuhGBWiojFd+wkEKYCXnw2i5b5D9HldnPgWhFU1oDRGAn/n0TSAeKs= 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 1767053634064292.2485268152441; Mon, 29 Dec 2025 16:13:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNL8-0004XI-H1; Mon, 29 Dec 2025 19:11:56 -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 1vaNFg-0007fH-Or for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:22 -0500 Received: from p-east2-cluster2-host6-snip4-10.eps.apple.com ([57.103.78.43] 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 1vaNFc-00045N-Jx for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:13 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id A02831800457; Tue, 30 Dec 2025 00:06:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 5BD181800101; Tue, 30 Dec 2025 00:06:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=kLQA6rv7sDQAG6jrMiTsp6VgPXcx5wZdDjsp3PZWbuo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Hjbz4Yu5rfzbCAxL4fAhmch5WH1TTSED9qK2kpzcawe0usgBVNxNju6vuODk2R+OEStAA2W+APYwz6WM4K8IIdog2XJ9RNwsXO98pmM2+UFcEiB4YjArwxCG9SM41BHg9a7Jf5L0/7qu9l/QupHYq7rSyKKX9CmyIInJc53XLNfJ7PK5fWalgEjx4xz+HlhZX+R1b0qoQ58qG56DjstQYXN2sD9KEe6VAjNto/qtruUOic1a0JEsqUW5dXEHMsFuyJVsRjuVm50imqBAsfWrWOti6tseJ7pnNcQvnHZr8mDLUnrhkenQP1Z2Y5b2Dn9vw8pvNaqdPKCmUg4xQFbzxA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 23/28] whpx: arm64: gicv3: add migration blocker Date: Tue, 30 Dec 2025 01:03:55 +0100 Message-ID: <20251230000401.72124-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: d6LOBbJu109QhCq6ZqylizmOFlNDTjOL X-Proofpoint-ORIG-GUID: d6LOBbJu109QhCq6ZqylizmOFlNDTjOL X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX3zcN4hxdnsKZ 0G63sFATLLZy+ulRoBjjsHJq1OUITX3NgZG+CsyM6Mqv/llWPuR5YLYgN1C+b0ZmlR/K7HogI1v NXv0lScGp+slMR5nqbxOv4myEvGs0JDbh1mZ8j0htzRPoLm11tAp1NLU+8ovDgITf6xqA0y+7fB 9KoMDRoMIjXI7KwtTiNwa1w9iL2BXDvlAzOrwVA8xtyPRTE2hq8jRAIbPlVZ7VHnvQX5YEsDYp6 15bHf53XVzyKalQyH2rVAxq32wGd6ShLoiyRHvnT30Fipucumm/oMZoyMWAh+tYIdmdiJ9bp9Cv fTXwqMVAaFuLwsjc9QG X-Authority-Info: v=2.4 cv=bpZBxUai c=1 sm=1 tr=0 ts=69531771 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ZsnAEJ0dk2gu5naU1fIA: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxlogscore=999 clxscore=1030 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABwOXzddytEomqzqT5iG+Le8wtQNp9eSnU7SyYetyjnqjWmnI1lvS2JIGOns/vN9ZTW1y/zFxrM8vK0qZIqJ5pk0bXfTqAeNetcHsrBP6iqWLlpLx+YugAF/8D11DWyIQSb5dr2c7WxthdsLr/kSppnMKmOk6tF2N9f71ZXr2lUKKpsJ1+HZ5kxfo/DyPXB/2sufM6iQWUuOSY8tRG/55xPU+8WRwty3Tt81QuH85nmA5H3Ej3xkyz2lcUTprCH7t55HM6Uk5K5k9/5in2kJuTrU7rBo6Z5K4eWDbjC4viQW8w3PNpiQstUAbAVecDwm5sg/4NMn6x9PjiWPJbVzYSfzaSDUBU0eZE1bf5cCHjr7+FgWkKzXG/cCMxwOnBoXdZjgVNg8s4kJ0cijWrxj0VHirZny2NqV8rwsN+zcUMzX91aFiIUvLh5Iwz3Hn2t+rgKqtnh2qaGVbCzFYRoIvLWUvLf4/JmCt7/pbrncbo8qY5G7vWNYnQBdkmZ2BZRZKFoMWf7KzJ/cIPkDRYtnu5WNuVzwWXq8/7/eIeWGyu+ni7uUf2vijC6jmNu8PEPKxaowIzhSvj6z6EYTJEeVZEO47McY5NlGZRZBtDm03Niw0KDvDumIILMgP1Z+wndxukzL26TAtOwB53ANehd9ArtOPfwi1rz6zMhGaOXYeg1XIqMXHPzC+d7iFcaKnQ/F4LtL0gs7IAtS/A7qnxNDH3x3Gqh4ri5Ir9l5+uR/imGPk1Fc5QJ5NwCr3Q1j66oCNO5FGoYg27FmQunpa4hkltblVvw24k8XJ+XD9XBWlt0Qugvw6ZKetH2A7DVvKFHFdAyE5a9pQMxUGrN5UIqtklFdEXSJkrvo26bvlfjCTIrysqWgk2344ncyKxQI0IVtI89cdDbYpAFDxlUPkgfKFRMgac3wsM+GhCtccFxegLMIi39r4EhXtK72fFGQEEwldGM3EEp0NytLI= 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.43; 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_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: 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: 1767053634762158500 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 4fe6305c89..3aa3b8bb6b 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 Wed Jan 7 09:26:51 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=1767053676; cv=none; d=zohomail.com; s=zohoarc; b=dL7QDmcQJY/LRjhBsPsY+K6L/4Zp5L8ZMyedWKoivHMYInvL+lRo0impEVyT79m7WqHrxGx0Bw8lHXvtyyZx0YId/tHaerScmhByBdtA/BLKUiIISjaGgeNItOaWl1nJGQky/jWRqpKCjHXhcTVSrho5r13GLUu01/ZRKzpL4d0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053676; 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=KNda2FnGVdB+1PuvMJJo6JwnL0/5/2Oo7u+nyBw0Jtc=; b=UulS3m0zVtwt2NfYP1MSXIX4N1RvdKh52uqu54nYAC7YA+pfKNIAEGnyw/DIZy0VNGSdvSefBny6iI3txii9g8cg8/D4EFrOpqu3KsxWnM58Ks5+z5TtSx9hIge1pKZWGYS70hsgDDzzuusnBt3TsoBhM7iXcBgZqd3puuimgQ0= 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 1767053676359305.8934892839884; Mon, 29 Dec 2025 16:14:36 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNK8-0003V3-Ht; Mon, 29 Dec 2025 19:10:56 -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 1vaNFp-0007oQ-KP for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:26 -0500 Received: from p-east2-cluster1-host4-snip4-2.eps.apple.com ([57.103.76.15] 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 1vaNFm-00046A-8o for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:25 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 0AB6C1800109; Tue, 30 Dec 2025 00:06:13 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id A4D7A1800476; Tue, 30 Dec 2025 00:06:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=KNda2FnGVdB+1PuvMJJo6JwnL0/5/2Oo7u+nyBw0Jtc=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=awrvnds6IEwOk0HyMSeh7+sEDoTzrdbtDoEXDbAQAJu50Q9X+8Kmscco0Dx7nfb3CdWILDptvYs63IcL2yIGOAhHzZBZuPEk5xJQA7uQ7TlgsDpb1GOepridLoxjCAfqQDKH0ELJKMCV7imYl7xSPQPz5y39c6Sx7VQvsGJ3MGu/XI+HB0E7SdezURujyAijWgwYWqbh1Snd8lPA6lBas+JvjHRPz5e6uimSsPBIXdmX1dZZwrp6lZH+bmeIk7g8s3Hm+G7rdLlbp5L0rwAXRR5fLAtd+F5Xk0Arqlm9znhh7FnprdfrtooPzsrc4NS1BeAVfqTUMQLl8Nwk/rmnoA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 24/28] whpx: enable arm64 builds Date: Tue, 30 Dec 2025 01:03:56 +0100 Message-ID: <20251230000401.72124-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX2mnlKykaMPme YQEPteqQdO6+U7PpqRFyDPFCbJvArrn5OVbX0hLCFon/Wx0h7JRPeKo4rxoIXnbwBh9t1iT+7ge mVdMrI9RHUY3/UaH4dzXR1ZPHhuwCDOLrO0OsY2940oODsmmu9ZaRxid7PWdC5j+nAbMuk2kgKR 4JGPfqMYeeAJe5IWPIqs/O2RJ6fDzWG2lNnFwKX+E/AxfW5wB3Lh3l/iHaB/aI+6mCXUB7op/Z5 Eh2eoAYTjRQ8RM+C4bWNwlCDjT6V+kTwAZ49/j/ZinQCiuNbE+Xox/xxQnoyaPXyD2/zK1frOFE 96ESGBO+HbLSrTXF5L0 X-Proofpoint-ORIG-GUID: WnOG1Vsu-o_DW8mL4lYuu7QpdTdZJFY1 X-Proofpoint-GUID: WnOG1Vsu-o_DW8mL4lYuu7QpdTdZJFY1 X-Authority-Info: v=2.4 cv=d/r4CBjE c=1 sm=1 tr=0 ts=69531778 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Ck9h3XeVBPDugYI9Na4A: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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 mlxlogscore=849 malwarescore=0 clxscore=1030 phishscore=0 spamscore=0 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABW/OlLP15Xo68fHyTNMCU4z8WqNgraFKKilsXDonoOyWPg0r1QWGzwriL077aCJrcY1ML/ynldOUzqDsV+PmHuV8yzujfqzBbeNl+oeYSJvJoQ3FXJMVnWND/T2/O0XoETQN+cevegCY/afFTWymOx2Gzbe/SYVTgiiZFQlhOm6By2Yl4fyozmjfZ3i5RHj6b6pS8FyqtolxG3wV3G49ihgBx01ensQDDhMt/+f2Jxc5nF9M371n3e1cbGmGG7WByKEyhrAiFIQ0FjkpHQkqVxXpFfyfxCfSY/8kTmhun/ngLMRAvMIkC09vYAT51ZGRSSME35LHhWcmnZj/Dk9VCnJ1AnVsH7nT9wXOvLeQTEo0gKqN03XGzTkaonTfo0txkVxBl0i+asyNJIOlHlfwT30yECm65jcNfFBUnSsvMTnwm2MlGQBv5M0iTgTaReub8XLQLlSR/xaJisAoA1Qd2uiu1PU7HYPICbtFmBwWBA9OTu6USeF9dZXU6D5Mrk/4kgMLP4G27jq5hsWnh78/o3zVmo020gaBWLT8TOyOuXBFuf1qhUF2oOpNHnYfCZrC3H42jJpzPUzVQS/K1/qus800cOxEjCzHBisBGpdi8EgO3TjaB4mkKdmcAYjcqZJaZoq6QeuMx8s/AKPNJOB62CIkwke7K2m+8J56Yc2vNVdKditATisQEqmAKo3R42ZbTlqVeNMAGrQ208b5OvZgLERc2EljBTcxgz4WqYyreoYoU2VY/+wRsppxqna/yRX82qNo/pYH4IO1aFNB/iNwmoFDdFS5H6dUiBtrwxf2bei1GgcJ683k/Dv96SFI6h3MMiBpCEa+CSX8v3h5yzFvVNl/T0CGTcxAIWIN9nmlMAQgrqdmlFugZRNrEFP1/HQMiJIcceGZ1CVs60p6LbwexM2Tu7UQahJFGFnBu9G8= 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.15; 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: 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: 1767053677233158500 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 14b1160c15..7421ead19e 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 { @@ -883,13 +884,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 Wed Jan 7 09:26:51 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=1767053570; cv=none; d=zohomail.com; s=zohoarc; b=agQ/x3dwiZjrhL5ka2BjB6KORwWuudhUY7+D74CO7vBVPwnu9ZGU+PLINHhhnymz0eq5PiKtClXFMmWYeRFg5xfVHBkWNMj3I+SFPV4s9B1ceI4gIsPxU4EFh4WnJTBETpXXSOYzpWe3+EX9c//YemQwnT4sKztnpOLxniVObPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053570; 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=ikn0HzDDxg3hSGfBkyUa/ql2C2gbLWDqs4VNlGZIV7w=; b=lWSGRJDufpBhH2d5btdOu1UdzRguKKvCf1VusCO2vCNyw/YuwFR5idKDdjkwEgVz1C1nbJlIhpuL11ZlxqquAPNZc6uqxfk4xxYOmudG7uxY0kki67gPTWQbc9qu+XpRn0bqYZZ48d3D+AsgU1uNqt/n+rPjN66SFbz9eJfwWNQ= 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 1767053570047794.8957758766486; Mon, 29 Dec 2025 16:12:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNLf-0005GA-NN; Mon, 29 Dec 2025 19:12: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 1vaNFr-0007rP-2N for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:30 -0500 Received: from p-east2-cluster1-host9-snip4-10.eps.apple.com ([57.103.76.113] 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 1vaNFo-00046Q-PB for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:26 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 1CFD718010C9; Tue, 30 Dec 2025 00:06:18 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id BECEE1800479; Tue, 30 Dec 2025 00:06:13 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ikn0HzDDxg3hSGfBkyUa/ql2C2gbLWDqs4VNlGZIV7w=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=g+9XCp/U55N+eWCp+HNwSET7HOO74/r+cqf9a6GUSZaIrHmYf4HYHGEUGOv6Ny2dCuCzSBOgCOrJgS0ktM6HPucaDC9+r+NyA810luDBZldtvDqyhqsRKXYAqC0zXjQviuCIQd5jjAnyJL0vhoIBUtEbqvzqk6wTz+np+uMR3FJXC6f5lFjEM7eXThS6kz4NiAIdhuxszEsOIl9s4Z6jiENNtiaebUZ/9AGN6N+KXdqJ1h9pHzH+C2dmBVpRAYOwTVoNzqi/OhjTvKaZi/UiDJjM1VwENa2eElg62ie8xp4YUWzqYYu13nM64qCEAuu8JvgnVZzhqGZiL2eJSfW/Jg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 25/28] whpx: apic: use non-deprecated APIs to control interrupt controller state Date: Tue, 30 Dec 2025 01:03:57 +0100 Message-ID: <20251230000401.72124-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: vmpQQAt2xnlk7uMwHFjNfF6-GSBNQiIM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX7ITmP0IOYR3t RLB332kjU6IVeHbZT/OEcoVN4I8wxXwLEH+mMxjG00ogKx57huTAWixIDPkpS+jrGdjGk1rChJ6 Qku7N48CosZ05i5wjJndORGYIkH3XQbP5lVyb0n5cw/girFxNRlZ5uzoa4Hsm4LDUuubqnjtOmn SRgJfK+4aWDXk/LlTmmi7o8vvtwjcAck5e1pDPTj/+Qk5Rkayg703N1gAP80EfjR0jDPlGyPstJ Ccyjm3lMWQYsUoLOeBOWOPgjI67enGoq28Wi78/SCm/yZSrGt1MRzSFYe00xf9a/EUTbtNY9Xpc S/BjzzRmshPQZ71UGBL X-Authority-Info: v=2.4 cv=EJ0LElZC c=1 sm=1 tr=0 ts=6953177b cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Zj7cAsCNdc2pAJP8fGYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: vmpQQAt2xnlk7uMwHFjNfF6-GSBNQiIM 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=873 mlxscore=0 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 phishscore=0 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABR1RI/lv0++ynqMnDJEKbJWNKA9hGNl/lQrnPymcjstDxZnzPyULmLVVBfFO0Q69qiiCPhYo6S2PD/ocVqnfigzPM/gNHTt5WEZvw14S3d+jjCZAw96afZM3Y97ojU+qla8relHA1m6gJ5mHbyGT8eAV9HHVltGBO89mIwkUSIzjO5Hbs8v5nBXxXpHbQG2kESsCxWVY+mUIVU8Hb1OU28SUYtPwzcZiY8re1jHecSL6A9+IGQBzKSXmI0WYjRQYz14Du8bJUxUlW+7gCITagyRz1yKz2kf/E1dW32mHLLfYQqOypZKQXcqTr41dap4EZYvqb0JoRrkh/ptTl0q2hQeDnuKfFCvI5A5D10wXaivefBAKnFaBWDUouMDB1vdDIZSqqcbRFHtocwWhUZg4IuUi/eHcBVgZ5lFFEwfIlhFLUDa0TMLUk1qpFbYiZS6kQOjlgOPEeIrWRKVEwYFOmxqvTQxXXdCrYHvs/suUS4LLl9VRDymqvyPjG/pN+3CIJk0lVytq0uR47VmHg6Ax9+DilIduVG5jNB6Hc4jGWvoVKqULB0xiKAHNgRbTrsxlSoMUv7XoJMCiVHDe3UBCFuCwWuYY9VJ9wKe8Uwn5tzgavlU+kPpHDZTUl6KfnQ3cIXzUQrgxME/XSC6/yB+VPR6EfxsC6Y6qvu1oYyklkrqxyR0eD6pEYrJKx3TTJdH3EU56OQpvYGud+jZhbwxbbwkx1XO3/aDghwNvKyqyr7vpfiz2F7hH7lXrmO8NgXAo1vZesTP2qE+b5mShzsUALg6qhbDn8P0YbVk3lG9IVpZxlCWAszSV+f93xta0tM4R62jCm0UUSakwwMIuxMRXKgYD/WUan3t0hu4w3XkpChQqtiOLtwoSxEO7vBDADFJEwl5LRZfoUxGOI8itJcOaEJLt2n4YiELxjU2p2uYxYRF/Jm/qjU4SOhuj2OqXFPW3hH1O2pg== 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.113; 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: 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: 1767053570399158500 Content-Type: text/plain; charset="utf-8" WHvGetVirtualProcessorInterruptControllerState2 and WHvSetVirtualProcessorInterruptControllerState2 are deprecated since Windows 10 version 2004. Use the non-deprecated WHvGetVirtualProcessorState and WHvSetVirtualProcessorState when available. Signed-off-by: Mohamed Mediouni Reviewed-by: Pierrick Bouvier --- include/system/whpx-internal.h | 9 +++++++ target/i386/whpx/whpx-apic.c | 46 +++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 8ded54a39b..9e872e5f56 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -86,6 +86,15 @@ void whpx_apic_get(APICCommonState *s); X(HRESULT, WHvSetVirtualProcessorInterruptControllerState2, \ (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, PVOID State, \ UINT32 StateSize)) \ + X(HRESULT, WHvGetVirtualProcessorState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, PVOID Buffer, \ + UINT32 BufferSizeInBytes, UINT32 *BytesWritten)) \ + X(HRESULT, WHvSetVirtualProcessorState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, PVOID Buffer, \ + UINT32 BufferSizeInBytes)) \ + =20 #define LIST_WINHVEMULATION_FUNCTIONS(X) \ X(HRESULT, WHvEmulatorCreateEmulator, (const WHV_EMULATOR_CALLBACKS* Cal= lbacks, WHV_EMULATOR_HANDLE* Emulator)) \ diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c index b934fdcbe1..fa45a64b21 100644 --- a/target/i386/whpx/whpx-apic.c +++ b/target/i386/whpx/whpx-apic.c @@ -137,11 +137,21 @@ static void whpx_apic_put(CPUState *cs, run_on_cpu_da= ta data) whpx_put_apic_base(CPU(s->cpu), s->apicbase); whpx_put_apic_state(s, &kapic); =20 - hr =3D whp_dispatch.WHvSetVirtualProcessorInterruptControllerState2( - whpx_global.partition, - cs->cpu_index, - &kapic, - sizeof(kapic)); + if (whp_dispatch.WHvSetVirtualProcessorState) { + hr =3D whp_dispatch.WHvSetVirtualProcessorState( + whpx_global.partition, + cs->cpu_index, + WHvVirtualProcessorStateTypeInterruptControllerState2, + &kapic, + sizeof(kapic)); + } else { + hr =3D whp_dispatch.WHvSetVirtualProcessorInterruptControllerState= 2( + whpx_global.partition, + cs->cpu_index, + &kapic, + sizeof(kapic)); + } + if (FAILED(hr)) { fprintf(stderr, "WHvSetVirtualProcessorInterruptControllerState failed: %08lx\= n", @@ -155,16 +165,28 @@ void whpx_apic_get(APICCommonState *s) { CPUState *cpu =3D CPU(s->cpu); struct whpx_lapic_state kapic; + HRESULT hr; + + if (whp_dispatch.WHvGetVirtualProcessorState) { + hr =3D whp_dispatch.WHvGetVirtualProcessorState( + whpx_global.partition, + cpu->cpu_index, + WHvVirtualProcessorStateTypeInterruptControllerState2, + &kapic, + sizeof(kapic), + NULL); + } else { + hr =3D whp_dispatch.WHvGetVirtualProcessorInterruptControllerState= 2( + whpx_global.partition, + cpu->cpu_index, + &kapic, + sizeof(kapic), + NULL); + } =20 - HRESULT hr =3D whp_dispatch.WHvGetVirtualProcessorInterruptControllerS= tate2( - whpx_global.partition, - cpu->cpu_index, - &kapic, - sizeof(kapic), - NULL); if (FAILED(hr)) { fprintf(stderr, - "WHvSetVirtualProcessorInterruptControllerState failed: %08lx\= n", + "WHvGetVirtualProcessorInterruptControllerState failed: %08lx\= n", hr); =20 abort(); --=20 2.50.1 (Apple Git-155) From nobody Wed Jan 7 09:26:51 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=1767053517; cv=none; d=zohomail.com; s=zohoarc; b=ThfwxKGzJ4FWRhYDHhGikX5KUuJ+yBRkYi0gjYGozttjVZVZ9wxllhnFOxz/72QeFDuiHLP4WmleDCRNvv6nZ49t+JpGuQEV6y0oKnj39++FxfYXhpnYIf8H1QIPmM3j2O6XVaEe2uEwT7llHXCrAZetkmfW/kCphQ52ZeO72A0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053517; 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=biA5GQB+MtXtFsJVC9XWBKO9XV75Ppx9LVI2WhigwCY=; b=MsC4fsBCeqHt4s579v/kj6ybwAUiAc4qyU+mRBvMH93t0QCsI1v//Vge2wNwVgYkyDwQfnT4SxN9+Zb2zgAodYdvzwNSgbGhyOQX9OoK3reomPzyMEe7M4CSKECPNpW9jzhVSL3fGrJzdYD9pXnGaBOoXk7xioZzCG2+p/a6Z4k= 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 1767053517252345.6925663440354; Mon, 29 Dec 2025 16:11:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNJv-0003J8-Ni; Mon, 29 Dec 2025 19:10:43 -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 1vaNFs-0007tQ-Rp for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:30 -0500 Received: from p-east2-cluster1-host4-snip4-4.eps.apple.com ([57.103.76.17] 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 1vaNFr-00047T-Aj for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:28 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id A139118010DD; Tue, 30 Dec 2025 00:06:22 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id F30CB18010C4; Tue, 30 Dec 2025 00:06:17 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=biA5GQB+MtXtFsJVC9XWBKO9XV75Ppx9LVI2WhigwCY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CLKqLONIL+0z0TpmmjT0xRy1rhuYlD2JtpG3cEc5OEf7ZwCgiDh0w+OhySk26JXR7YzdtlR8XBBQG9fyslbwnjPz7msdqL9yYECsHRqJ/OT7GNT9if3zUxJusUtuotISjk7Crco/PFTjwMV4XYBqkrGJgt7ZH3r1IllNwYEUzqRXPmRdv2vzq+vX2QlyctgYpK7KZPbDp00BMXs/Pr5/RqpV6/tuDK0+iF6rpjwbnze55hpvGXmR9IHw5a6rOBPe9v++8+vSHF5GiaTVpkwiVwsKXX8MqwuYYn2fDF+AYtomHYq+ncD5WaVXi/I0t7bmyQ/jeVx17QGPtWAXRCwBhw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 26/28] whpx: arm64: check for physical address width after WHPX availability Date: Tue, 30 Dec 2025 01:03:58 +0100 Message-ID: <20251230000401.72124-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: ztUozClcA4vnGCk6YXB4BV9gQ2_vYxNO X-Proofpoint-ORIG-GUID: ztUozClcA4vnGCk6YXB4BV9gQ2_vYxNO X-Authority-Info: v=2.4 cv=GrpPO01C c=1 sm=1 tr=0 ts=69531780 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GePjjIfFpqe_pMnJkREA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX9kV8XmXROEq4 WlZhnwwzrOLZCxMCCoW5BVRxxtFKB9S92lqWENS5eZ49w04daieCXBmQ6e4eDq8zW0Em6cQccCc lNpuw8Nte7+ANx09nO/ZsNPxC2LUg2REe1ynlDqcWvJzOfQjV5jTjbJ/ZitHb4gowDGGL/qaWch swmGAR3WNSzlMDA6PRUNtLGstGdE/okAqLNxjmyjhfhBXXTlOpTib66ms9/k4b0gn+2vvCL2KAx aO+iT8dQ8PRKVi8W8uBQYXA77eQCQGzSjSIMyxk1aZFF/4JZIShDZEq0xaIUORbhHKOvG9u3eZd Yio9pHHykc4BzuYBqPH 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 clxscore=1030 bulkscore=0 suspectscore=0 phishscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAAB+O883FZWVbIxXsU+HJgPQxWBmBsHw0MqOfRgv8iLEfJM7yOqibhCQwFZaq4fmq7VPTooKZB/KGJCgEQ1HvUANLZkjWScl+BCmf9iJvWgBAG75PFatUm9Pp9KduAh8joh4vKphg2zK+UBoMP2bLi/x8BG0TLc54gSII16jRnnt9XumNZRCng2Edq0kgcaRiX/KP4qmDt7dnCJm3ljIsZrD0Z9quElrUGmHxEhtE2L/4kPsqhetO++rlgNp5MWPEtQY4ZdE5z9VWTJ/y9oPVmmehxpX4VMq6YFRWj6AQLiAhxYg9LS/pcDtlvyvASJCnMTdABDCqukSXtS3jRlwrfC90gRoL1rm8F6VPfQNWqa/IVux0SoTrvDssc0/PP5Q5PiA3IpoZt+yxlIXWP6YmZZpKf9Plw44ICiMuh8lSVvBY1uWVLJmovN7xKIInoEvR9/8fmTEO1Ng6VmiRNKnuoKmd7bNgpKeUm501GlEy9HooJGe/oBiddsAs3x3rsKmTaY6WlzLTzGbYXfM+iWTVmbUqMbpCy41DjR3qDLw/E/yRyxgY/ait6BhUfl6TLE5ir3P6PFzGsoxgY3jocxc1TbZmr6uk22P4a1d1K99WW5rMncRkDbANRTqk+r7Wl+h484pjNpUAfalCfrQ/ddZY8qHa281p1RAM00S/IEZwBqKjrYeFpME+lU62qbhoI5VMFvLqHXe6DcJGXxjc/Fben5h3aJa9KLTBYAT+hTK3a92/1mCXvwdam7YsiMXUnZfr7+v7kSeVuA/lAz3oDvWRtKelCDhkZaXxodPAFAZI9aq5MopCP5/7vK0FH+0RD4STxNFiwKfGt3XrwyOKjsF84cZ+AaMmbZFAzcLlWr26Q5L0mFXM8eyEMPgJzF2ozFDkHAk3/epjaCxOhMjgqCFgoHkgOGzmn5ppWShlJXNlQV/I+f1wku5y21cxJD8Afg8HbmGZoYrZ43fiSVbkknBxo= 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.17; 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: 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: 1767053518567158500 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 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index eea20f5e5e..2e5ece45ea 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -678,7 +678,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 @@ -909,14 +909,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) { - return -EINVAL; - } - } - whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( @@ -943,6 +935,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 Wed Jan 7 09:26:51 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=1767053637; cv=none; d=zohomail.com; s=zohoarc; b=QQwI22z/8JnYgjjEiv0cN0mlv4o0Do5cmNrhA2a44/qMP8l7GubOmHyqQz4xQTgQFJlQ9Z9ZWXVtGvqS4XtWYOrkY4Ysa4U9zQR+naYnWfDSSdH1Efn4pzdhmCBK7BMNjOQftTSpGIMiXIYscEmcnsLQrZ2WP7DyhrkUdg07WcI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053637; 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=wiU+HKhv0NxXO8z8GjCO8FE/mL3g0nXT19I99VvdiXI=; b=oH1aEbmPZIUw6qEKCyTGdPAvKlmRzXyc6Ateksvnq4JOdT4wL3Cwu3pLyWNQpOV1u6GHXjhh60BiugWGMZq5sdl0ihUWol3jDtcYhimF5MnVxehgCXtBdSDpX2eJa1TJcfLnIo89Y+FejjWDdn8CKCxt25LbR6PE1+RTRlJkqYo= 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 1767053637231609.7935338017214; Mon, 29 Dec 2025 16:13:57 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNMa-0006GU-KG; Mon, 29 Dec 2025 19:13:24 -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 1vaNFw-0007yd-TV for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:34 -0500 Received: from p-east2-cluster1-host7-snip4-10.eps.apple.com ([57.103.76.73] 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 1vaNFu-00048N-GX for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:31 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id C781A18010C2; Tue, 30 Dec 2025 00:06:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id 6771E1800101; Tue, 30 Dec 2025 00:06:22 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=wiU+HKhv0NxXO8z8GjCO8FE/mL3g0nXT19I99VvdiXI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=hC2VAfW9fB1bk1TdlDsIfinbNJSs0a/tdul7UKRo9bbR8f6KZmNUzpZYrBg0MEvAF+h0SON8r8WnAAA1NYeCOOCobfVP8txdyF3HvJ/fYZpu5MtHZab5vicaZt708WIqdPznZtE5ULL1hIiEFZbBNMvajK3jURI2ytyU7RkikMs51FhvZB/2/21Joo686+7M/R9qc8lgoDGFck8ZI1v0yvVqaSgf1VKDDp+E3/QrwNSEis/b1sxWthhKtMfSys60bGHq/IxoAFPUEjzveMCFIMZtPnWCS/JXo0ZunYgx+0Yr0mh/OPsFzXKbyVnkwKhL36cO2UhNhEfuX22kUU9oLg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 27/28] whpx: arm64: add partition-wide reset on the reboot path Date: Tue, 30 Dec 2025 01:03:59 +0100 Message-ID: <20251230000401.72124-28-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: h8BJLb8lvuiHd-jAxB195h5MGXafy5EQ X-Proofpoint-ORIG-GUID: h8BJLb8lvuiHd-jAxB195h5MGXafy5EQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfXzqKwyY/1iDuS V22xOHPdURX1sI6uZmJBx3X4iaa9AsqgfV7YgwZD9EkR4Huki/HllgK+AV04MnRu9For3dIe6LA MVSYf2tc3iiuteKk7VutEAELt48RajLCkm8AmW/2154CoVVTJWPk89AAQMnAWznHsyE377Pk4+G Qz2vLhA5x6VY/2Hr1V2nrtWGVHangBfAo8t+yUkB6fdObEiwViiaEE8Nlhm2hlswpG9poEZ7lh9 2+m3W2ZTFk4NkYZvnr9AxqQM6wxS2dMoaEpvkXcUDyowcQRO/eWYY4KhAFBxODlkMd/E5kmNdV/ 5RA8zGJ5MNTE9dXEQuc X-Authority-Info: v=2.4 cv=SYz6t/Ru c=1 sm=1 tr=0 ts=69531784 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=h5GvOLqLgfJ3vAEETv4A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 malwarescore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 mlxlogscore=879 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABpJQanFl5y+kOZHG/UPcbxbka5hMigAbpRnMpiyLsHkLHvgjz3RNLH4+csh1AmPgsOF2TWCItinnhORnBd4cHrtdIkPr1xT4+KfXEKsUPRwjDJjtmR/vmhxVwBS67MRrGAIOg2V37PpA0WKY9UkEjJ3e/kedxkagJRyyw4VoTEjeZl/1jfNU+xqb1ps9F7XCLpS9A5xcFxBbMylVnVSrWvO7dmhT3rXncKjI4gV03z/PNnXocpphYBNdYsISr3HZi2lBgaMEpSBXwCxYoD6enENbzImrO/HKRqj2pO1b4HmrFDUGOFCfYLnq7ajRyXQi35v1CbaEC+5fFiza9Br+QhCDsGs2BSUuSIob8AvDMK3Mvsltiva3m7rP7nnyOiJFggxINMFBp+itQTsEt2aia7cXBoBuSByiAKApaGYPmb/bA0bH2TEaH7N3c9c+qzJG4QXvns1DJWwqYr7SBUktfrvrFsuVJPoMmq/qQZ96tF1RGycW1hLWJNtnNcVAVKellfhq4e8DUwGLmPQgRmVl44AHw6cTfoim4WrB1IFaK/h97OXEgZFh3XOaxrr9lQwbN/pBjg8Ae4cW8K1D0Il6W4mUbrOiBbROIuynNOz9gnw4kVV+OZReS/p7WaDZrj7GFetXwxSoTTKYfOsEPFzsc523XFyOPO+m2TTNKTgDYKx7GR6Ya0GhchTgT16wb6pGznWQq48RLR7BFV9PTksMo6DyMX0XCkYJK/MKTEBb7K7UYfWZHb5KUQFt2k1pvUOZIcOV6FXmbbhWfp4xZJzz4/CTKq9fez/OBhRaD339uOUXmy14AjwnLmLUEOWA0gjHzTrRatLShG8RtCXP+UbYpvRwGasxoMj3YCTyzTzw7O0ceT6dDjCF6Uzf00Y6HFAgZzTDW15qtE9o2/KkGrr0UOngSA+0RB+mAA0BdjHGcQb4O1ueZJbweDENnm75LEQ== 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.73; 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: 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: 1767053639025158500 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 9e872e5f56..802fa87765 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -94,6 +94,8 @@ void whpx_apic_get(APICCommonState *s); (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, PVOID Buffer, \ UINT32 BufferSizeInBytes)) \ + X(HRESULT, WHvResetPartition, \ + (WHV_PARTITION_HANDLE Partition)) \ =20 =20 #define LIST_WINHVEMULATION_FUNCTIONS(X) \ diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 2e5ece45ea..0e80ef771c 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 Wed Jan 7 09:26:51 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=1767053558; cv=none; d=zohomail.com; s=zohoarc; b=PZrGcEbuEiCgDOoy/bSWV4RvKL/W124CzQnVe0TskaDR64rHR9EvbgHJaej29hT4Zow9mFrTtSVRgCgqxSOVdss6igrJPYYPRLuSNT/lWkM0RbRa2SHe7S6ds6QM6O+Z0XSb4AxSPDB4EB+TKU7ZOJZ+UOfG7kNx36mPf49N3fQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767053558; 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=HvfpbIRIHkux3GwMoa81UjW64yTUwu8WPNZESmVNycM=; b=eTvvpNtbZaY+uriqc8gIMAjms+PxwvE+a7gRxaZ2sszbXm9LA3tct36tMXPUJmiOAP2N2hu3JgRNv49loUbXcKlTacK9Mo8wfiwDvG9x2/YRVFzJpkbJTmdMRuNkFHSBPjJMMCL1dUeRzbJOt59LRCGMi3jFC03AIbPIMbDw6Go= 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 1767053558844692.7275772766509; Mon, 29 Dec 2025 16:12:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaNKW-000435-Gl; Mon, 29 Dec 2025 19:11: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 1vaNFy-00081s-39 for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:34 -0500 Received: from p-east2-cluster1-host9-snip4-10.eps.apple.com ([57.103.76.113] 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 1vaNFw-00048f-MJ for qemu-devel@nongnu.org; Mon, 29 Dec 2025 19:06:33 -0500 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPS id 7D2121800475; Tue, 30 Dec 2025 00:06:30 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-9 (Postfix) with ESMTPSA id A5A1318010C3; Tue, 30 Dec 2025 00:06:26 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=HvfpbIRIHkux3GwMoa81UjW64yTUwu8WPNZESmVNycM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=G3RmAwKapFR1oElMGkW6feKRDlJZoLgKQsf54dYMxDIVRuqU5HBwgZMRN2RFaeNMar6YO8pamAw4Cd+DLSdNL23hFVf/ql2Se5X+/Ng4gk5AvhJEEiwOIBJb1FFSK+5zIsLiqcee+6ND2+hug/bSMUR3roCKFfF+8WIrLc7MYKuG1oh9EdvMuG9K7FN7awyIyIWA82loKCAeJWFlJS0pvbLM4O1iQUK83lA8uJJ65RjzGBh80xe9KWJvlOUbfhpjRq3eSLCwrgL+rhnQVpcDDt9wnTspZLF4vxD9+p1+27oLFZYNSEQTtJrzMQ5gbtyHw5b3Zs4/tsreFAAovVrmtw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: mohamed@unpredictable.fr, qemu-devel@nongnu.org Cc: Yanan Wang , =?UTF-8?q?Alex=20Benn=C3=A9e?= , "Michael S. Tsirkin" , Akihiko Odaki , Eduardo Habkost , Mads Ynddal , Roman Bolshakov , Peter Xu , Shannon Zhao , Pedro Barbuda , Peter Maydell , Cameron Esfahani , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Igor Mammedov , Zhao Liu , Phil Dennis-Jordan , qemu-arm@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Ani Sinha , Paolo Bonzini , Alexander Graf , Marcel Apfelbaum , Richard Henderson , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Pierrick Bouvier Subject: [PATCH v13 28/28] MAINTAINERS: update the list of maintained files for WHPX Date: Tue, 30 Dec 2025 01:04:00 +0100 Message-ID: <20251230000401.72124-29-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251230000401.72124-1-mohamed@unpredictable.fr> References: <20251230000401.72124-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=NdXrFmD4 c=1 sm=1 tr=0 ts=69531786 cx=c_apl:c_pps a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=t-S863UTctjxRPX8:21 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=hdCJvu6vi-O6ykQZt0QA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI5MDIyMiBTYWx0ZWRfX8RYxNZmFulY4 orx86ryqet9Cridc6VzJa1z76p2TPv78WcZ9n1I0QdsYyWWXksAYAbHwNs/ueEmfk0TbGmknxCG eWehe3FUG3+myzDJosf3MnM93F+mkRnik92qkOsOhv5P3bJ/YhgT3q65k9qKtWAmB8x1Hc5oNwz K0vq3Ss2V8JA5eJQhXMkkRZ/m7smAfPLm2xxc7KKCmkuDeSxXruc43cr0KKYm2WpXVlSvE2Jxe6 QIH32VzHUb+n1Vf9ENbItjfCRfg15xQJtacPLIkpytzy7fMI3OJL3TmQW3ukyZn9kwFwr2SDVIH U0VORBP+rcHIM+phfpS X-Proofpoint-ORIG-GUID: NHOVVDnK-iPcUFZzjqKY2mjSEVgEgdAl X-Proofpoint-GUID: NHOVVDnK-iPcUFZzjqKY2mjSEVgEgdAl 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=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 phishscore=0 spamscore=0 adultscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 mlxscore=0 malwarescore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512290222 X-JNJ: AAAAAAABVh6ISKBKxx4e1RLQ1oDVSKVBANGY3Q7HZjg+UCNxJ05VplWYSzZSk1lUzfyygnu4uRV0B57leNsTO6l+7fE3vrXkinKXfnF8mfRGX8NkDv35unNziJICaLccMgx2lw0oW87iUyOpqmhJ1yDR886DVcCftT7f/YhQknJiMj5Vt/q+ujQs90RXfIIEn2zt2VohpFopY3gK+utgWRjTtyJ/oGWipB9p002ZdEJQhgI/V5lrpHkDZLs+RSC+qYMntQeXeqpr+k134ENo8Wm40tXKvNV1nNvocgbQyluL+5S8oZSWkBfZw25B55TSZEU/IBW43YUS+xAM1mQYhHV94rUaXT6BVJS/Z5lkOSYhQ1/Nce2JorPKP3QOVxBt02MvLRbMCHLi8u6NYE4iXNX0rxY+wct9xNsf9Pp30u9L0pPRtBxAjD0c3vFHRGBLCWIawZEUIiCirYfMk2i9DratEBRv0zQJmfmBaSuxeafJQIUfASX8jXyrPzAjCBzajZoHwa2RPxRGmpYMeC0TiiNdOhNIsxKaApq6piFdNk9K5EfRUcJnxD+2t2plvLSGFz4jEE49lrJ+WdDOusTiQi6i8nlbwqQDkqtzoGRIny/YT1yYgVJfd1NoaWyG9vIVa85JtexgyqawzafFjoPa/M2Ua0OKEQ9OdkWgGytgdl5SWxWf/ZczJS3yUtiglsVK21QshO6IG4iudX9fobuNEdaZYo8IgSNWEwswpJe0c8UrVtTIYRTqVEeTy75hMYKaEvtd5BIl0bMsRVpS89nEURU24tlisq3LbeQtc8JuwhNkroiQ/ff46fjeESYHaGuiVCjPRDXllQT6OvzMOKFkrpfD/juyRYUOK2n7AFJ55enyFvGjnmiE3XxM2+6YLQ9hPvWBiYVfz0Lcskjz9ktp9MZ1ksK8re+8YgEJE4uATGlt3IYXVSyKUGuQnEw/I6nwNet+DBsVvBCLLdnsOUlI 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.113; 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: 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: 1767053560370158500 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 8d84f141cc..7ac1efd904 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -552,6 +552,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)