From nobody Sun Feb 8 13:52:41 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=1763719520; cv=none; d=zohomail.com; s=zohoarc; b=nf85GEj+WRTmWtGz4tY+B4xTSWblmfqIHUmn7278BnZb3P1f0cTRFMA83fblMd8MKGC+lnQZvBkZJSgwYBIO45wNOVoaUwSlKY5KB+Gx2q/LTrpAAIZUTKvltzXw6YUTO4PLJeCLZ/FFl9JCH09nVLes/Lp4NLaeSf3nqrBVvro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719520; 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=RjF/+r+aa85nl2VOWroWhZT1FnOeVBxBwRKeSc5T7kH6kTFmFscUaWBedTxw+VxClY3J0LL7uYqJhJte0jMXnFSa0LXyUXCBcA74W34GxKygwcktC3Ro0jlE0xEWKQ5Z1+hJOJpxNO1LYkBhb9HqWqeE3Ih1zb0+a+WCsDK8ON4= 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 1763719520550585.2444981436909; Fri, 21 Nov 2025 02:05:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzA-0004aw-8G; Fri, 21 Nov 2025 05:03:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNz5-0004Yz-8l for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:19 -0500 Received: from p-east3-cluster7-host2-snip4-5.eps.apple.com ([57.103.84.146] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNys-0007rF-GM for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:15 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id AB20018010EB; Fri, 21 Nov 2025 10:02:46 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 7507D18000A6; Fri, 21 Nov 2025 10:02:44 +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=TpWSNx4s5gIlbKztRQPrKco/S1MuRTtTUFvqm8LLhlLtVcL7FHcfGU3hQAGYBo4C+KiZqMaJpokw0D6eDubLPpWd3g81G0O25rWY/92ir/rDLH/YZv+lvaTFkoHSgc7EAzzMinAMRZEH2G5+9DX/aGUxO5+wlkEYT7Zqgj6i35W60TY+d/sCge9B42EqhDvUhkXdNJSXW7zROu54zesJKeGD9jdfZhV10auchED6A6TGXBp85V0fn3E0fNZ3tO4YVIUWBxRtOWowG/ZcOAZW5Z+xdeyXgEcQopi1c98XqMRniNCGMiBoUSFQLXB66UOLr9xy6BxlZqX2k78v8565Kw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Sebastian Ott , Pierrick Bouvier Subject: [PATCH v11 01/28] target/arm/kvm: add constants for new PSCI versions Date: Fri, 21 Nov 2025 11:02:13 +0100 Message-ID: <20251121100240.89117-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: jUpG7bmBWYPtbOGUzmWrAjOfj4JT4tNR X-Proofpoint-GUID: jUpG7bmBWYPtbOGUzmWrAjOfj4JT4tNR X-Authority-Info: v=2.4 cv=ZdMQ98VA c=1 sm=1 tr=0 ts=692038c7 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=KKAkSRfTAAAA:8 a=DAm2dGrMCKCYv6Tpj9cA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX5zi0LuepaGoI Vc8rqwV38fQJeXhxzY/GrACyF315RXg7g1xLeggnsIqxvCoS41JtPbirIzxgv+xN/R7hCv8zx48 jEbj7YiRdNFKdV/DTiGwMztyC95ruGSF+mdq0na1ysdmXAF/LBExVT73Et0PjZ+lydLve1Snw4j FlRWs8L/gQxz+Gy1sKK8KKWipYcJ/2uaWiJ63zEO4+MJ0SO/Ma9r2u2MY34V6mlkXIjc3MwTjK1 SgP6YUrBLixFM7fBjqNkaug6jtPdddfEPU9y6HlJe4hCRAf3M8RZeBsvsTcIU5Nk0Xln51Yotc4 dIJVE6TY43cr7U9qVkS 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1030 mlxscore=0 mlxlogscore=919 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABuZBPNeSdoDy4/Kd1GR6CvyjHJLRHl4KLz704tyS7KNTOjR+tR8BSuxvOd7IbcseLFL2Bwh7zHyxyRQKzUvANiCxLG+GCm30PSnAKcGhxBCny3c75wx6+JFytId1AvhraEq4DS7leZ8eOkYjjPABHE6JyMACyb9pV4H+/Oo8/c2J3yOkwuJoRHjMqKKIAXKZxSD/7s9cwpldPfpD1QZsJJVxNYcOnfRM1fbml7zg6GT4DhMdDb4ZsDcsffTKtF1MjgO0n5VB/Jgr/ZzUJpfqPBlZ9guYvFLelgIQqWJkNQJROsoRGxKYt8shJLhZH2k1hwhHLneyUwYxgDA+8rhxRaoN9a8JzT5dcFvN9je9juu6Ry6YCVfrx9LlXbveP1rF3zfV0wa62C/ABE/qeKuILtZfh1ByTyZA4axnrsTbQzXzYYMfuxwJWc494hlvjd1LLkuHY4iKOUHQkiJGCxNjZDISrRsoCwBEjqVRq9yc1WWKIaVWWTlt+kqb4BNMvQRe4JezkDDUSTiYSNrB1ZD1oTpUGg5nncV7t7JfDlBuX8KPz5dbd39l0YfLPIiaL0g3a0PZ+BPN/UlCyM+GR70uHmLgxZ6JnQWkvUkR+OjE8mzZqINQGP/huDelpE5k/mHpJmgxuQdbX3x/PQYu8bbAIByCHHemU1zo1e1IwWwjko3AtDgDUdNZJhwNmCPR7WEdzdKmS+cw5vqIDQcNpFSbV5UG1pTpSWV2R0MHgQcBD6Afo2YuAKKeYGGQ2RqcMJD8H 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.84.146; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521800018900 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 Sun Feb 8 13:52:41 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=1763719710; cv=none; d=zohomail.com; s=zohoarc; b=HWAEGBw4yz25a0OnVJbUYClTnPz/+XnZN+BHXg3GiWiyFN+y651ewAP+wC02dJg+TG1Akzf1+wOFDd/awiULjv6lxLZ1ELj9evTo/IL+wH0XQHlH5U5iSiWtP2qNn1VQ57YrftFmOglyi7ncgWHclgfLj/GV/alioZsv3C/TkJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719710; 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=aRq3YU5535mG5uSPAFBSlmsbBJkL1R5+IAqIsTf/zZw=; b=EB1fSqQt6ShVEuFn4t1P9FC8YRpIwaS3aDHJaEElDtWAY2uMhIQi59UPuvEE/hA3cWBZJ/aHOg15u2HcfJXPnNUP3C4qguOidzvdjRJQI22XhzCkndlPVjwGb7r3mpeqvCN1G/va3b1wkaltwmY8tMzgBKwbWOQw+Cus/urkwDs= 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 1763719710264634.1396185948465; Fri, 21 Nov 2025 02:08:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzP-0004eE-59; Fri, 21 Nov 2025 05:03: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 1vMNz4-0004Yr-9O for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:18 -0500 Received: from p-east3-cluster7-host5-snip4-10.eps.apple.com ([57.103.84.181] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNys-0007rN-6x for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:15 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 8A7AF18010CE; Fri, 21 Nov 2025 10:02:48 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 4E49D18010C1; Fri, 21 Nov 2025 10:02:46 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=aRq3YU5535mG5uSPAFBSlmsbBJkL1R5+IAqIsTf/zZw=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=Vz1JZUk2fQzPWntCmktLG03tGBVAJIo+cN0LRiBjZSZtUJj7GX1Ca1BP3Yn8WzTOvDoAjXc79RURdTOCFNYqYL1VtYIt5E9xmpYqkT2KDQhi1HdRn5oZ3OoqMuLfbtSpohMkYaWHLeKshurrgpa/9amyevOc5Pu0sAHvSX7MuWPn0NYOkgM4BslDdh9o4Og49NuzdWU6ebjlUruYbPtNHJ5/CbW1DI+LcqEe3lJ+ei2SO5DYqCHkQ5lWl9yBxaMqwEU5UwwlHB2QQgatDhkS44BkLjcxVlUsyASnq+FF3UgH8t4YDXsTmWgYEDti0EZymOBnLomKHPgbXsbjCxKr4g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Richard Henderson Subject: [PATCH v11 02/28] accel/system: Introduce hwaccel_enabled() helper Date: Fri, 21 Nov 2025 11:02:14 +0100 Message-ID: <20251121100240.89117-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-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: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX+PLJkgR1pqNF G0uJ2gnDMrOSWg9cHko1OtsgAHVK98g8BmtLk9UB3/BL9k+RLJahUcVnUEO3eUDPVDHznn8a6Mx 6Q5gqRnI8HWc160Tns4zyXhKs4X3h/VfWKlIBixWo54fbcWVo9wwpm/d9udlRlJ/nHkA0QgpghV AiLravkk5YNFAeEmwPPFOcwFUI3UhS0rkJY6vJVTxa4IHEm5JHX4OBMC4ApvFwX52/TlM4TEy66 aYlhfsfNtrFEerU1+cCqkuIYhy4EgPH6UUl+D7dwtlummRVxiT73Kpfmwwv5JJb4aXtmStXmFvV S0tIDQP6gYPYODU+kWS X-Proofpoint-GUID: 8yv3uJwL7aBx02O25_5XxI0UMP55hlp0 X-Proofpoint-ORIG-GUID: 8yv3uJwL7aBx02O25_5XxI0UMP55hlp0 X-Authority-Info: v=2.4 cv=DLWCIiNb c=1 sm=1 tr=0 ts=692038c9 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=IkcTkHD0fZMA:10 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=e3h0T9cBdxntahtQdW8A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 suspectscore=0 spamscore=0 phishscore=0 bulkscore=0 mlxscore=0 clxscore=1030 malwarescore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABL05m112SAuVGao9pjfBgCmjj+oZATzNjXYYNErUdKy9oFbxdOyf8qkBb+vASQGmIyE1ksmKzhLcS0jTjNBRCugyojlG1NmQIbTSZYPKuQTMTNfXBFXteCCiPkaz/Zu6Sqn1d8CS4ABOHKC3ojXdN4oioNmouhhRncL/nR8YYrkHDP7V4N6mpvKPgXqRj6dn6mC15iKdyi9XVGbS2dcZy6dq4mmhOuWMm9RdNOlG5a4ebqlVTvBKHplJgAeufpjP2UOOV3fZY2nDGDH+0dSNvCaKSy6788uM4fGqTgtLnQhiaD/SzHqPJrF7PjUcYvVEtQIdzrz/thTyjkt/whcjQH5IK0CM3Ky6cns+vWakZqyuxIit9qCd2Oudqamf8pK+v+F7kEtNh6oVThxdIYQ631vbgeLjCtcdMp69yAHkLfRFoT5Jhl1wRqKzTtVmuu36SC99akn0+d5ZS4gtiHHSCir4ZaIthlJwoo+zVnYrZtKrygJaFacjkkCxgvYB7+KiGMNMXNtw8NuK9BIx88D33TChmlCcX3+QKTD2kHY9CiRfg4U6rovN5OYGQqUCLNKYiM8TzbD2AWnXpkaluDQrkbUNFOhkyYGUso874GjHXQCxb8G4x96EMYHjXPhG+PwAx2DOgSPcpk2fa1de3uwEhaojtFIW5SnRK4AR9xCjzGmDN/mj4ThqHxEP/7swoIy1f33Ne6t5FbsLei1b4MJNENeYw8yK3HcqMAn7sf7q6PZYaNdLbwIxhvEPj7TL9CjJPtpjpfNp6Ok0JLS7wpeg= 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.84.181; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719712631018900 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 --- 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 Sun Feb 8 13:52:41 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=1763719517; cv=none; d=zohomail.com; s=zohoarc; b=OqNJQM/fzGXeH2grgKx8Cel6I5b0bLiexmhO8Xj3tlY7qZo/kv3c9Najg2e4MDi5dY9GvERXvAAovBtoztEA8nrOjhnDQDi+g3rF3/kiiYuBzJI3xr5PKQjoVyZmQ3OSG7ArvCzrkfolq/8aXXfFX3g5pkaoLW19zkGLkBjiS78= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719517; 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=Jt4/Sfy37WGW/65ic2GwiQVIsF/dZedy/8sTho9nDf6UdZ18dEZy7lzYcjjBZb79cp03AMQmpxSXdrhTianWQkiIp+9W1EIh8GdqFOXyh2qwueT8OVuWFHIefh0wgryBdvcpbIDCWIj6hst+gDV78hnS9nO0fcdENjouWKN/uc0= 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 176371951733956.25900653301767; Fri, 21 Nov 2025 02:05:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzh-0004oG-MR; Fri, 21 Nov 2025 05:03:58 -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 1vMNz7-0004aJ-Bk for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:23 -0500 Received: from p-east3-cluster7-host6-snip4-1.eps.apple.com ([57.103.84.182] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNyu-0007rV-SG for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:19 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 4D8421800175; Fri, 21 Nov 2025 10:02:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 100A81800130; Fri, 21 Nov 2025 10:02:47 +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=OyPc0UCqAZJLzQzaf5ad2Y12VKcK/dCSe4xe+oXuY2cPJgZvx5xXOF5Qi5qY4gU+83T3fSyJToSa/qL+ZFWuaZ13IIz8VEBFwZNctthHsNIaX7KYgEoqabbu/XyOsuJL+3Q6mgnMNyVcLdsk/eOuYYipAvKELuX4Er3AOgibKUF8MjSXJeSinExYJKNPJfY//7/N9cuJXKCjr+TnPtXFmBChZJZCx/C5tyikxWC7AkETE5CD3yeI96UKYu8Af0EDH3u2ea1In9NRucHqlz+Vy37mp6ay5OCF37cabGP84JK8pvUODDCnMSIU872WNuyEhH6snBiRhd64OiaMDHbr2Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 03/28] qtest: hw/arm: virt: skip ACPI test for ITS off Date: Fri, 21 Nov 2025 11:02:15 +0100 Message-ID: <20251121100240.89117-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=P4c3RyAu c=1 sm=1 tr=0 ts=692038cb cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=1t8nasy7xzbR8br5Zw8A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: IowDia7XAf8QSFgdabAG7Nye8ETo8hIJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX1VXs/d2MPE2Z lC8xcbgwgxQmmZXl1U6JJuxUNTWJdwWVkpXQzjvC+OOtjgdPmmsPGOHm5lBlBNXN3FXMqWOEiQe zm/CwZhenxNfYIG/RfEuzhp/UkO+r6XnC0T8mdFy9A7MWhxZthqqUaa2bf8VWaSiCMifJFHDQ2E YWKHPkzyI957j+S2uuIfL1k3NHcvbeawZVZQbUCcaAk4F/fWG0eoX/cci6i2h4rA+3Czr7tCNN3 Fym1I3JC0E1b2gs0WF++vMiohEmTXf/E9lmgnxrUAAs9BO6DadONJDeTPXLsIszPeTstWc3DyCB NxVK7udkJ6MRJ/khZe1 X-Proofpoint-GUID: IowDia7XAf8QSFgdabAG7Nye8ETo8hIJ 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=910 mlxscore=0 clxscore=1030 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB+hdFq3Gaph8aooWwmAd3R+SRnBCTHWbi0n1959RZ5sM4WOYW9IDwzJ8Ck3FYWTTP2/nagJBOt6eY2avFD6KJy8BYS1XtnM1B+RiCzU5tRTN03D/34CeFy5Rz/jQZnY+yvC+ap04UFoz+7T5YTyiclnhNcI2BAV4VWns/TRaIb9bR/YbMy9JFLE4DXxgG5u5uZKCipzb7SN7I8863hNoaTFCw/dd1qk6ICPQqcDilNh6MGDl2NcFqwOhQB0G3g0OLfsy/IyI8hlIc65A+/j99AQhh6lzCwgmyod4OEeF/jeQfwHRcKLuUSVnNS5WsZyhygPcLdTZxmhKN/kizBECLZFRLwSVwoNkhStueqNRCu5Wsr7Yy/PMU0nnRvNFGrlkiLdj7hpiaMC33XsE7l9ktOCJYInfDA9t2MDcylOS7R8NXLppEPfKecfc/0/72MsPJHOI/Fa8y1PtfOhoZQxZVqLINIJZDl5iF2gO6p62r9Yv0a5NFwCPBuO6MeN9ARaBs/eeYDFXhjLRUHoiZpCM+Z9O1WJ/5l9vNos1n3Ts5cUrQXMwc2wf1mXi+Y586uuy5i7H08qktLpQ8JPCIIsUKRw4q5LfX8BGe5D882g7quDBZZ1oX5VAHWvszJclpaS92sc8Za7GEg5nACUE3JVd9lmxoxGQJtOVd/4s85fzjSOQM9xlGmy0owGVXTTAF+unG6Lr50t1gTUzKlNrYs+O4gLroTRXcI1wpDP4AU7vUSZzjhxLqH/dwpuGFh2FbcZH97Q== 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.84.182; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521240018900 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 Sun Feb 8 13:52:41 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=1763719627; cv=none; d=zohomail.com; s=zohoarc; b=nJTdhzs3LmU0VIIfwgUN1PAo5fP6nkgOVDnUqw3Rm1PUsVnDUbsMZ0w8O5WQJR5j1cCIfj0YgeKiXXMYr25YgK/LvHQTCFwHGbD/Rs9Ms5dZTB6Q2EdXUaVOXor+e9pWVj1LuHE8hAv556TTPIBHl/9PIb5rzsImDR8Z0wFCzLw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719627; 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=yK01o8HRlEMgJwN1XFW8wiCifxBApUAIOdAGAAykBMs=; b=Adu0Yx2FQcMk1Oa1LFvxjZl+IMNYeEbXw4xGJNAcZHJ29zf4uSV2sUAG6ZvF4H+70ui3q301Rd9tuCFkgHTFA4kBUd3K0oSdxpFWnWnbMbjvrVdigruSlEmbXaxk48OlsdD0Oo2TSxFLGl1XK9NAVzm18liYj+C15GpFPauwNjQ= 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 1763719627607114.51047725490685; Fri, 21 Nov 2025 02:07:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNza-0004jZ-NY; Fri, 21 Nov 2025 05:03: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 1vMNz7-0004aS-JK for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:23 -0500 Received: from p-east3-cluster7-host11-snip4-6.eps.apple.com ([57.103.84.237] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNyw-0007rb-Og for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:19 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 17F9218010C1; Fri, 21 Nov 2025 10:02:51 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id CCCCD18006F6; Fri, 21 Nov 2025 10:02:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=yK01o8HRlEMgJwN1XFW8wiCifxBApUAIOdAGAAykBMs=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=cE0SEtHNz7JFFqGJwEaVBUFU/P+qi2xDN1bx+wAw8tT25m+4qVniYVwGZ6yvJsiNWJ1/ftvwMHiZOqyHRUT24y99ptnSxXh+iyUscfBV9Ef3+U4ODDGRuQXVQtK1ygxuLnP1U/9XcwkIBOSGW25SZHY7yiW7pLVeQ4VliX5ICOmBShrztb2aG3+7My10cRQyuQiDnEzlZ2mkwXAISTxHf19jgC1rUqGbVfFfmsSqoB1rDkwxjfl0DbTznnBgQYGAr6l1rnpAlhqsUoo9Tb8shwFHy2DfTAmzBaRz4k1nxhXGB5XubXbwR06Gmd0TXoB7ok22d8RkOnjxPwMxgY9CrA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 04/28] hw/arm: virt: add GICv2m for the case when ITS is not available Date: Fri, 21 Nov 2025 11:02:16 +0100 Message-ID: <20251121100240.89117-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: lID6AEQXTmSw2ienvvi-jxL2ilp_4wf3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfXz73u8971axel lI6l6NB4xy+v/Y8oqhhTzUpWtQ9i1F7usQYUpXkzo5lQtQv6DAthLP+LW5GQEI2NHvX7734Ivyq VNGxn+0h0xKKhJnM8uQxDxJL8lqFnYJ4kf2YBzjeHjym5AGVfEhC/vWV++cvNlatKCZ0N0hprCU YagYFrRmEJqsYEs6xOA38VgSGHBL8oUKnOVr/0t1baehnkx1das3jrO1W5XbG94xDw5QAV441Bo SYJCM31h6d7rTjONRnVJx1W4u2OUGTrwXsGTnQFSI7XO/udZj8Sqh5N1BFopdZJyS8c07K/05nJ dud1s4JHCKk9vFrmL+f X-Authority-Info: v=2.4 cv=O9E0fR9W c=1 sm=1 tr=0 ts=692038cd cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=8tVNtdTugjW4QW2w:21 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=QSz9yoqgGQbeUTWI9AcA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: lID6AEQXTmSw2ienvvi-jxL2ilp_4wf3 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 suspectscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABukzAyAbibCn7/XJtQxVRV0BWSmAezANpo8rmOjnOusjSO8kpU/HFhUN+Flx92UtykFDuzFZKnzfqhk6cX1+Ls3n+bWTB5rCnABUnn0v6KdMElNGmqCVd3dtRB5LXhJrO4PDqrCETdxHG7oV4X9ztVW46QCZh1hwzfk6X3zFkkJvO7TOOMxzX3uXO+zlLBzdjoAsPyFtsK1YeaBVURqyub6guawGe9nBV/tMvXh+pObe8UXfQqjgA8TlfPqrzitcnnOW1Wr6hpw8ELPG68LkO+Pic9YdDiV/bsYkzfc3YUl2bGy7Q1KgBbIXfOdznzb6ppbIBrd+NHAsHGPd/Wl634sO06F4dg6zCRNmz+28fevvlWTNoiVaStg2lI8X/IlpYSL1zjxPlTIk7TWuxTAacciR5vd6o3wjDQYgcw6skq2j+JGxLJn1U8Ehum9KMxkRbWhCsW2nyk/K5mp7RAOY5YXqLD5u5nlM79fPG5CQT7cScCdFuKMxPDU3T8fKxQs0Ab9Z9Oh85PwV0Fv5Wy/Nhy53FbL0uSe8B8Vq73kr1LiHVTIX8ZHkrkkoegYNRfPh/s5LNeb91J4C2u9Zq7gtTLVBzoq+8yQAsnux0NGUtjK7Z62I5NNomEY/6hU+C2Yj4UPMb/9KJ9Wx1B1HIYvtIiFjHdyLYxg3wvopH3L55DPYOrd/3RRaeHEKLxxGOg+E3gH/btJvhV6xSZkS1YcxdenAJ8+LuBZRLPgK60cTDfzY+n0e4l7bUv4mEdbtRpPgPp/NmOsQ7o53aM2l0TFQv349s4pa6 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.84.237; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719628816018900 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 | 4 +++- hw/arm/virt.c | 8 ++++++++ include/hw/arm/virt.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 200e2a1da7..e2062f5d21 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -960,7 +960,9 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *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->n= o_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 25fb2bab56..f2a924ed26 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -959,6 +959,8 @@ static void create_gic(VirtMachineState *vms, MemoryReg= ion *mem) =20 if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) { create_its(vms); + } else if (vms->gic_version !=3D VIRT_GIC_VERSION_2 && !vms->no_gicv3_= with_gicv2m) { + create_v2m(vms); } else if (vms->gic_version =3D=3D VIRT_GIC_VERSION_2) { create_v2m(vms); } @@ -2444,6 +2446,8 @@ static void machvirt_init(MachineState *machine) vms->ns_el2_virt_timer_irq =3D ns_el2_virt_timer_present() && !vmc->no_ns_el2_virt_timer_irq; =20 + vms->no_gicv3_with_gicv2m =3D vmc->no_gicv3_with_gicv2m; + fdt_add_timer_nodes(vms); fdt_add_cpu_nodes(vms); =20 @@ -3488,6 +3492,7 @@ static void virt_instance_init(Object *obj) vms->its =3D true; /* Allow ITS emulation if the machine version supports it */ vms->tcg_its =3D !vmc->no_tcg_its; + vms->no_gicv3_with_gicv2m =3D false; =20 /* Default disallows iommu instantiation */ vms->iommu =3D VIRT_IOMMU_NONE; @@ -3540,9 +3545,12 @@ DEFINE_VIRT_MACHINE_AS_LATEST(10, 2) =20 static void virt_machine_10_1_options(MachineClass *mc) { + VirtMachineClass *vmc =3D VIRT_MACHINE_CLASS(OBJECT_CLASS(mc)); + virt_machine_10_2_options(mc); mc->smbios_memory_device_size =3D 2047 * TiB; compat_props_add(mc->compat_props, hw_compat_10_1, hw_compat_10_1_len); + vmc->no_gicv3_with_gicv2m =3D true; } DEFINE_VIRT_MACHINE(10, 1) =20 diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index c77a33f6df..3ff83aaabe 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 Sun Feb 8 13:52:41 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=1763719841; cv=none; d=zohomail.com; s=zohoarc; b=I83GzzYMuEsYQDEC4fig9zw9oMcaij+LXZrlLdbL+rBWKUl1As2dJ7FFv26eqXZ7jE1n3YOMCY8koT4DmfdXidTMLE19QwJZBOBmJa6rCM4cEWsudI6Ju1nEZjXZlTYNsFPJRBp5C3rrYcyY1jZFkj2hxevi/q15LdJW5z5GATM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719841; 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=9vYko/DI2RK+OqhuWK0dyFWYB5OCgm45PuZW5dC4nJ8=; b=PxwJgXVPigIE1I9UNsAYd/wEOEv8UAEfnsJDZ0wMOD5qEvDuCkJeCyt4k5lPuy/Emv2Zwp9ECDNpkkO+FyrhbNwGnQ6xnmGcG2wXRq2zXSwJjbctP2kgR0nwkKhy+G31wwEcFxHjSNXb+PRG+pORFyu4gjMvapbi3MZWKf2zlrs= 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 1763719841843200.7983524074798; Fri, 21 Nov 2025 02:10:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzj-0004os-37; Fri, 21 Nov 2025 05:04:00 -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 1vMNzR-0004f1-50 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:41 -0500 Received: from p-east3-cluster3-host9-snip4-10.eps.apple.com ([57.103.86.93] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzE-0007tJ-Kg for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:37 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 9EA281800130; Fri, 21 Nov 2025 10:02:53 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 8DFEB180016B; Fri, 21 Nov 2025 10:02:51 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=9vYko/DI2RK+OqhuWK0dyFWYB5OCgm45PuZW5dC4nJ8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=IKbLvtpf/69TQS/thfNx7P8PYguBkRl9l4/90vQj6Qksjzfo0d8e1hJiyW4zALeW7YCdFXOGSK/lCV+i5pnirx2P5OZoHicnvq0XcB5yg6A2omHci1HYqTnT2k6yGU4yMTD4N9oFo1fJNKCTA+yTFAqnpcKQDsGUfXSwatrdQt/at58w4zjgjflOVuYaqMzLSApLxSHMSdZCVQ3jBwVcwKKXG/bQStXfYiauCpU5vxlk1Ie6Gr8Sjc0mE8gmtPSST4B5nFi+Fc5s5Yh3kVEWk7KHxF+1UYmal9+mEJfUk+7JwjGMZXRrvbOKBipLvbyWt5isC877QGVAjXu3fkPbBw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 05/28] tests: data: update AArch64 ACPI tables Date: Fri, 21 Nov 2025 11:02:17 +0100 Message-ID: <20251121100240.89117-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: _jx-qDq8BsZ5bjzz4wfRj-bgPMTgf_y8 X-Proofpoint-GUID: _jx-qDq8BsZ5bjzz4wfRj-bgPMTgf_y8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX7REoM0sqYaUv D9Mq/2qdjimcckA2XJXEDJF2YOu19reGc3GHvWfRwNyZj99DRJXTuGHval4fKKOSHEGBkHrdnfJ pNwO8hqMuaMyvaZWk3vsxSeYOLKvwiwF0uy3v0jASxTvkDIGzzuT8RZn170TptbIvqUXPeOP1DH nmEAlfjCwlsctt6GhzurCv7puuO58Hrw6815Sitnv9yAGHLaG44wjUhaMyukc+bF3fm5FBzc2jZ 9uinDm63zKol9ceDKQ9zavSxxnSvj+RDDNs27W67fkDgT5rPGwACjOZ/NFDUbdf5ei2HiISyPLS 1daSz7hxQi93gbhcdA9 X-Authority-Info: v=2.4 cv=Oa6VzxTY c=1 sm=1 tr=0 ts=692038ce cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=CvHhVyPyXxbOnLnphYAA:9 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 clxscore=1030 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=931 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABZ0AUPOmFM1o3Yr4ylplYGmtZMMCJNYE3W+29wUcdLpHbyMsOuJLzJqB7OptlM3VewR07+Ai+JQa0TNXyd1HIt8bi7BiSKd1rSy98ECIxDFb98mHh7ySmRd4fpky+Kx4o5NSKI3Oc8wbNmoiJu+2hlpZODslo5UdMOrqdQBoTTiItmw004Lu0QRUVrWGwshkYilKfn9E/M7OD3K1VpcXFtV3gGJE54UMFVL9azwsKCsapau6LPbHCwJtDEmp06cmjgLhFUwZjzUKsjmzXwNJxI/VJiN2tAKm28f3nU1jMDcILmR5vxgmu1rVslabxKyrQFhExfRMyb/kbv17PHr6Gi9mNEX+bcc+7II1vJkDCUP7V0P3zk3MNY9uEwL/HKw6XGhE8d43wsuIGczjso3GrGpfOg6LGgGxInBhy5BM1XwPhRYIcSFx55bogyucmSTIcaWHHnSNthE462l816me9ZdYcJrOtp8sXkk1Tf8of7yEOUgTtGUaA0WBR9s+EVJqxv+odCm2Q0oOyjjl/MEP+JdIzbFFQ6YESGvTO53mxXtQjzZwkH7lycRrf6u7TJu6ctQPQ6CaIkDY81RiTFnq235CzppULQFjNovvgMnrFkfMKBxs4Leq7y4wA2/cdxhnPq/8dVlxFbutYjSDt3wjLcX8Bwc3yrx2cvoHoztU7AhLmRQ8GPy6BKRWjKchXUnhBg7lt6D+Wzw74565trnXmjVanAD/OcvGa4j93AqlIQr2CvkcYEzGC3ak/mHE= 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.86.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719843331018901 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 --- 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 Sun Feb 8 13:52:41 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=1763719517; cv=none; d=zohomail.com; s=zohoarc; b=GMVk2kkAFapFfl7W8Wqx8AlSD86CLNtq5RdQzAcPk78YqGBQjgMc7Ntujzcg5zzT5nQqIyvjOawI3VuiKAoCpjXdpyE7fFTBbMXXKxdKl/pc28HSupcBA2Pmby+ykqoHsalVf0IQdOsB1aothnTLlSoI211veMxZfQAiVB/CNro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719517; 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=jLqXoGrEPi7v9+7vHj1kBJ+bh5oPPLtWhi+tTvECrR8=; b=Gxf91R+nLL5JP4SdfqY8ZStY2X8OHqmw9fht7NZyOMU+h0z3Sdg33MNrw55V/TC/v6FqZEoriZt7XxKbyh3WByUQdLFqB6+Fs1SO2Q7SHB2yPxotjYujzc277LupQ2DLRcvaNDEKDQvFhUvg7JxslVnxDegreZ8TeuAdWEh0Ip8= 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 1763719517080970.108767409865; Fri, 21 Nov 2025 02:05:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzq-0004sy-4r; Fri, 21 Nov 2025 05:04: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 1vMNzQ-0004fA-BZ for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:41 -0500 Received: from p-east3-cluster3-host8-snip4-4.eps.apple.com ([57.103.86.77] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzE-0007tK-GY for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:38 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 8051C1800124; Fri, 21 Nov 2025 10:02:55 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 349571800117; Fri, 21 Nov 2025 10:02:53 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=jLqXoGrEPi7v9+7vHj1kBJ+bh5oPPLtWhi+tTvECrR8=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:x-icloud-hme; b=FJI92PWup5AtPPhA+ZTUzEAwhkfehybvt+6GTzsSq5hpJD/GCmufoYclUm9mHVAOqyjcKQk6bIkJbxgL3Qiv9uDODcPLjhxxDj3UhYSJvMerCEYo/Ne3CvmQiPfbYUXdlyfxedMiIgBueWsCqSfb9vN27hKVRxDC+EDqDOwrzJYdFed45jYf9S3BldB8QiGZhT66x8yBa3MGETM6pX/xs6F6LgBxU4MFYLzMzfQNdeeLZSjV5q4Ave8v+PMjpvFMxpHO+HXVBioE0HTYHJ6F2q8x312F1ZmsYXD7Wky3BIht1H5fE4QDmENqshVBDOOP47Www2ZNMwxtb6VFUDofGQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Richard Henderson , Pierrick Bouvier Subject: [PATCH v11 06/28] whpx: Move around files before introducing AArch64 support Date: Fri, 21 Nov 2025 11:02:18 +0100 Message-ID: <20251121100240.89117-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-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: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX5jhQ2NHzyEYg XyWWewwJmWR09Irh0Z/f7ruM15YbSvPC/tyVuGfuqE6tISPgwVc4rN4MlhZa6vst2RUSeUn7mho 5l8h0VQQlxSuTmjbRFMOINIAJc/gJJw1APqTy0LOaevEO7vGv6/8/yAgeNSwGezYeUpbCL4m+Nh ZCoAmZdGshdy/lwZNQWirB6fys3WwCSRVQAmXSs6vsIJ3BJu14lRZh+M/LKDCtES9Z1eyIMWm9N Nl/o65uydYkH9MslX9MnoprbyfIyGGMraHq+M20ZgAs9VpWkeMSEBBNgwCoyxTyyB0xmq+Tr3Rh vwqAeWRmg4l8OHClNne X-Authority-Info: v=2.4 cv=dMqrWeZb c=1 sm=1 tr=0 ts=692038d0 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=IkcTkHD0fZMA:10 a=6UeiqGixMTsA: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: CVzIocsIm6Z96PMwKqdDQ6QP7-60aL8w X-Proofpoint-ORIG-GUID: CVzIocsIm6Z96PMwKqdDQ6QP7-60aL8w 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 clxscore=1030 mlxlogscore=999 spamscore=0 adultscore=0 phishscore=0 suspectscore=0 mlxscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABSeGiIV21PP3QIJPaE+FDF+hN8Me+zEaaQU/0v34hb3sJR1TQswlZs91+VCxWnHMIW2l5a5mb4l7fhfceoKw4qAeNixMoLD4u1y8vjPx9ECy4hhDep+xfcgNNZFZdby03R/mBO7N2xB7xwKSzHdlD2JQnFq/CKHshNxBHgOJY7RVcy32wJ/dWCBahArmbnmrxA1FgDVwBgWHaeP4NY9coqKrzXUW9CJJ/nUedWKr1kNHhKR4wBlDBhJbp2bu1WgTCVHWFI1CU6P/e6Fr6Q01i5RUCJgSWln6fdoQY6rPLgJT/53J18kcJ6IBINfLr2hMAqUodvAIbjBbWGuiUotJ1YPVXmsy+x8MNj0oIALl0hUthVlQ5L0ZBUMkyo9hKQMjQT6f2lyRvZElOvPX0yCsoIXfzbU7UZppmB6/cRZ37fZ37zXsJZLz4i36I5pzsR17EEUQxg6Cow55jQvZdowKtlfh/g1a47PWuWCP6A+qEn8Zz1gXARM12/JXBrdKjCsxp3oePizsfqWbcrShXJs3DljlM3rWqnGuf7RfuzTXt+uw36bJR0Hx5zR/WXm6gK6egzPteojXRhBExFw7zd6LNspKLxhSw6fe3RNi8KW0SlBA5rmjPWOIgW7ktdKDyBMjuWzd0Idw3EG4up8qRY9NiA8FMApCo5iNAjkerT3Fc1zpbWsH9ncEY/qEiLvNwk3hMEKLr5eSpYQMeBiF5nRDdOpvcQ8eRJ3xUQow+TfbXMb2MG/7SB4K+FkvakZlUqS9qGmyhbUeWO+Ks0XZd0vlpuwIDkzps 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.86.77; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521371018900 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 | 5 +++-- target/i386/whpx/meson.build | 1 - target/i386/whpx/whpx-all.c | 4 ++-- target/i386/whpx/whpx-apic.c | 2 +- 9 files changed, 19 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 (98%) diff --git a/MAINTAINERS b/MAINTAINERS index d1c5080e50..7fdd1401f0 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 98% rename from target/i386/whpx/whpx-internal.h rename to include/system/whpx-internal.h index 2dcad1f565..c59f9de091 100644 --- a/target/i386/whpx/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -1,5 +1,6 @@ -#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 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 6bf8d5f4bb..c0bd429d19 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 Sun Feb 8 13:52:41 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=1763719633; cv=none; d=zohomail.com; s=zohoarc; b=AQJaJqYyt6i3KzgwlaG+Qw6PItPMQZiXzH5AfzbYCXDc3zRZFkeCYJTN0yFEe2JOS8lj6qiXrmugCTe5k4xr8BCrAs2oHn/F7Cf1bVf9ofJIG2wz5vp2Ki9XVSs6Ms1SFPtD3j2JNWfK5EyYFb/BThbi8Vpx7/UG1EU5yWUnASE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719633; 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=ib4mNqe0dQAGQ3Xwgh234JlvMvgAmSzb+oH8FW78gws=; b=UjlCsR64AdeB28N0aRtdXm//lrEwHqbD84NxKl419ph2XjGuLsfa58Cby7X5TFp0LpciiQswcuz+U33/SaduGJisTZFs/XGVXHMetnGdTZcmTGuC9gXHh3724r1PJNdDdA8UCox7BDrMTXs1SECFzTsN/Zs7VAWb5UYzRAp01NI= 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 1763719633743330.2138011963684; Fri, 21 Nov 2025 02:07:13 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzx-0004wL-02; Fri, 21 Nov 2025 05:04:14 -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 1vMNzT-0004gn-7V for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:44 -0500 Received: from p-east3-cluster3-host7-snip4-8.eps.apple.com ([57.103.86.71] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzF-0007te-P7 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:40 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 8618118000A3; Fri, 21 Nov 2025 10:02:57 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 1358818000B1; Fri, 21 Nov 2025 10:02:54 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=ib4mNqe0dQAGQ3Xwgh234JlvMvgAmSzb+oH8FW78gws=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=buB7e0hSAr1ojcMwMM6QeLEG69wDSW06QBQJ1xEkhUnQwEVKaqWF9dOulRm3wORXIiHBcGNV2tseONrt0pvxVa+x/POy5cnxZ0GgrOxMwPPEIvk8fpUrcdr0WXgQXYD/AYNGYDp59yxrZmtxTi1e3x18fSBQY/v31Lc+q2bVInAsm9XXlknO5x4qQZCwGrvbSSJD37wMB4xZn660mJVoJS2ksaUNXF/CPL0gYJoPMaTxwVbFJxJAel4BRTeG4e59ODc9E9LzXpGioBg6OMbpmPUwGJJq1/U79c2BNWJmVWfBnSrc1Q0E7oC6IcfMvAz1aY5GfJ5MOW15znhQttkAfA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 07/28] whpx: reshuffle common code Date: Fri, 21 Nov 2025 11:02:19 +0100 Message-ID: <20251121100240.89117-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX66onAmNv3pWo x7fcTMSj+DFai8J/p/bTHnI6uQ/dBXNv7APR0I2lrlOlMQmAIuJflxwHJrigRsEuV5Wb+Bm8Ta7 QlufsaYp8nyKLNnLN6Oym4l4TymMtN3Nhp4dnLIAOOuYsGwqwrSNOP2bQUH7u9rG5lrAnUrSgvv VmNb2l1Id9e1Ps9/czLpyenS0X8Ems9I8Dz5R7pWvFhfzeNKPHdeS6F5Ts3m9A6BmBgU+CkVyNa xjOwaIS8Za8y89Vkf8M5Nde6K9PszCFd6dDGoKIaHp38ImX9ulBfkkOZE1KnPv5TL3Ca4ZgvTym TtlPce/LEDV7TLjOgSR X-Proofpoint-ORIG-GUID: JzGZpbUlFfPb9seSUiTNvs42f0z9q6UH X-Authority-Info: v=2.4 cv=fMg0HJae c=1 sm=1 tr=0 ts=692038d3 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=yMhMjlubAAAA:8 a=XtnWhMvHLvoGx0dyWtYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: JzGZpbUlFfPb9seSUiTNvs42f0z9q6UH 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 mlxscore=0 clxscore=1030 phishscore=0 adultscore=0 spamscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABUkknclyKDXJU+Ox61zVpz1sqmM0gmN8rpEkJwDax0n+goff9ZWISombnQ8p5qMFNN5SSMlENj91J+Lxjm9TrnPSpLb0vHwb80koVs279jx+ZcjVUGtI0LW3EI2AjMuun0r4mM6tF4f8OdqPHgiCNePri4fGWelBtr+tId1ivb+u56nIrP9lRfLbdnVkctW+H4UNoC1SawpoEEF6hIYYqf8lqPSilVplrxZHVwyu4DgqD1GQrsvofBqOLBXMRZV+Lymb1nuQhX6IjaX1r/hH9RPT0V2k9fKCfcHcDOhW2990zMl7IaiHf+9TmJtH1xbuzF7nTW9tV9qR6EOnM0t723CKOtGNdUmM2eqBHKXH3Fgzu48b0yeJaWUOs5bbpVcQfxdqQc1zBXPpJcj/FleBLqjghmxRY7ruN6p75m8e5Kim3VZ1M74WuTQW0jR5WYCCQnhIkceDPFKdXYpYTB/t7BYCzzskg6GKYi3dnCPPJHFzU6SNfAojBGfQxXeYCFQNfqps3S8wrJvl5NHA98/G4tYEi+DlZ516X33evtYakg4zsmULPb9GVY7SboLcUhZy3+p1d18sac3Ti04nAZ2R5UEq/6Vh5xSxOShW6kkh3Y2fwNcGGf8871hnm7+ok290YlTgvLpmb2+E69wgrPpPe2v0wwwQhr0N2BofcH6EvF7ZmDnyUFhNYKhfVq+OnfwAZlAXtXnG1Co4nqG7mTjmAYUhkA1n3Ucc= 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.86.71; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719634761018900 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 | 562 +++++++++++++++++++++++++++++++++++ include/system/whpx-all.h | 20 ++ include/system/whpx-common.h | 21 ++ target/i386/whpx/whpx-all.c | 551 +--------------------------------- 6 files changed, 616 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 7fdd1401f0..8a9df6b283 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..66c9238586 --- /dev/null +++ b/accel/whpx/whpx-common.c @@ -0,0 +1,562 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * QEMU Windows Hypervisor Platform accelerator (WHPX) + * + * Copyright Microsoft Corp. 2017 + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#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/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 c0bd429d19..c63bb28b20 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 Sun Feb 8 13:52:41 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=1763719596; cv=none; d=zohomail.com; s=zohoarc; b=m8tuzZMNS8TxSkmHEz66A7HlVllZrv5ZtDDveZBHhNfi+Edkg7BVTGDo6EzsgARuXkEH+smBXe9btJh2Oi+d7RsD0WBAavfe0H6lU92ajPWy5DyVvkGcdTGw4hKw4UbC6nueffLG5ycnVCBF+EHRE00azAIWlmaB4yYN/PMNl98= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719596; 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=1HDLl+vsTco3N+tEGqvISSZb2bm2NYHKpsf2pCMBzc0=; b=PxsjlH7chbpdG/NS5DDyniQEtEKHxwI2uhcZXZ5nGXQtnKfODo3y18uJJQSP0YRngaOf5JnEbflPSRjloEkTpnLXqnjYSkCg7MPjsG8p/IfYksmvdMv1s4eck6ce0VZIC3Sr/S/Npps9L+yHiEBd9JZJCiz/6L+sUIBShcdcOsk= 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 1763719596340254.5174174083296; Fri, 21 Nov 2025 02:06:36 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzZ-0004ic-Gq; Fri, 21 Nov 2025 05:03:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzQ-0004fB-CT for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:41 -0500 Received: from p-east3-cluster3-host2-snip4-8.eps.apple.com ([57.103.86.21] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzG-0007tf-Pz for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:38 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 92C7918010C3; Fri, 21 Nov 2025 10:02:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id C71D718000A6; Fri, 21 Nov 2025 10:02:56 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=1HDLl+vsTco3N+tEGqvISSZb2bm2NYHKpsf2pCMBzc0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KEHLuVr86nRpO4/BwUC75p23yPe2ohoVy3fp4icjRVg5kJsDwnapfPXDahq6JmBt69C6c+QyqfMI6m/ZweYWHRK64TM6pL90AfYwmnPh4b5C3hq/rvOZGTizwlKzuwKrlZBPSWVKHfmzUUzbQmipj6qBMUGTiDdYQBe4vabCKLlLxlu4ElpxA/fMO+M5z4rW0TETV3G7hPEsA61cYwU69IRFPdG05yB8EyHoYjUmwjDuQ6N3WnThQMvnZrGDw0I3g9vXikVuL3TgmB24eEzviFJnN+E8iUycn6+on8WpGMLtnTCyzFEnqChi6e0z2i4cZEKL0M8+OZJiNT8Czr09HA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 08/28] whpx: ifdef out winhvemulation on non-x86_64 Date: Fri, 21 Nov 2025 11:02:20 +0100 Message-ID: <20251121100240.89117-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 8am2yJNSNirpzvJW9nazTpRAj3k-vLTK X-Proofpoint-GUID: 8am2yJNSNirpzvJW9nazTpRAj3k-vLTK X-Authority-Info: v=2.4 cv=eOMeTXp1 c=1 sm=1 tr=0 ts=692038d2 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=VExx-Oqz_yhFp4n2Ql0A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfXwnFJVhRUyOi9 F9Zo6Y98yggMtrJqi8rUEatAnG28XRuBIEjtV2EQ7wWhiI16il7Iya+8GK6feS2aPaQ79c3oH2B 3vuttViTwiDVsXXrKp1NxnCx+f3f80rHMVEtap++K2GhdSHjoNuaMsbKsMIpE9n6m6kqaLC1sou gwJ+dB0557kssmFINUe1+9pKkE1ZkI0VJOKB71x2FHLsXjQQMwf1dNf0m00txi8VzWf018EWL9b 48c4+NebWqqpTcyGshbzLBbF1tn9092al4QC08FGslSN8J/NlfoYSHjor++/GIvMUYher9Svv9A rQFDH87K8CqH3raYLly 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=770 clxscore=1030 mlxscore=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB8r1G76cND0K5hFiJBhvNjC7BgVE0OQG6Uw34ddj2FeXFKSxWnV4xnadKeDwXzsKhoBYX7T+v5v7O8eBmzIdrHULGuOpSLfgUtbI8ClkTVsJiMGjWu5MTexiO1iKGydMEcWhQVRJ6Ak5A3J1b+AgykCyIblGOpF89BQb11hLlr8YXdhsDT3Hxx8hWGkPj5zxyHEjed+aBaBdnVC+14qtnobuvrbpfSBrTnHIWhi6bsTxfdc/nkkE8mvU7L3enZdd/vSf+x6fZ3YwYXNlTPAuOz+hvbqSUO6jq7CuROvBIZV46q5uNDfOkj4B5p46lA48qcBextBpboM6eQWLLTEqyHcOXV6NEEc258D62gvrMcqe8SoTP7KNoe8/fWwRlcM89/K115SyyhjiyL/fKCOwl9F0nJdGMd2p34rCGuDypmZE6Ih2y9h7xVmlzWmf+J5C0ux1Dx3qj5NTVZDMrEZ48pzpW0K9KsnCC5H3j0fuCtcaPVXlFwIdLGzSH6WWR0Zi4UWAEfctfDjdu5N4ot3KYcJtDRMgezryASrFtBkdM2gZx+19Gtn1fhEF8O7rxmJkZ+/VeIFKzKNgFnIgAkwJECo54TvuVBPrzwWRqNqpY3lMDl70jmrAnoIqDonKEXoo/N49Am5J81KCXFWPig8V21Fvsv0ojcHU/CAAa9vmzropv1UflXhTJT9wjjGZ4NA1J6zaRiWQkUgMysx+M/z2eZAX7IWcpUDUbqTCZauyPa5nyG1dkmJuth578ajqrudcbsQw= 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.86.21; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719600160018900 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 66c9238586..95664a1df7 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -41,7 +41,9 @@ bool whpx_allowed; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; +#ifdef __x86_64__ static HMODULE hWinHvEmulation; +#endif =20 struct whpx_state whpx_global; struct WHPDispatch whp_dispatch; @@ -236,8 +238,10 @@ void whpx_destroy_vcpu(CPUState *cpu) struct whpx_state *whpx =3D &whpx_global; =20 whp_dispatch.WHvDeleteVirtualProcessor(whpx->partition, cpu->cpu_index= ); +#ifdef __x86_64__ AccelCPUState *vcpu =3D cpu->accel; whp_dispatch.WHvEmulatorDestroyEmulator(vcpu->emulator); +#endif g_free(cpu->accel); } =20 @@ -412,8 +416,12 @@ static bool load_whp_dispatch_fns(HMODULE *handle, LIST_WINHVPLATFORM_FUNCTIONS(WHP_LOAD_FIELD) break; case WINHV_EMULATION_FNS_DEFAULT: +#ifdef __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) @@ -539,11 +547,11 @@ bool init_whp_dispatch(void) if (!load_whp_dispatch_fns(&hWinHvPlatform, WINHV_PLATFORM_FNS_DEFAULT= )) { goto error; } - +#ifdef __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; @@ -553,9 +561,11 @@ error: if (hWinHvPlatform) { FreeLibrary(hWinHvPlatform); } +#ifdef __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..7a7c607e0a 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 __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 c59f9de091..4565436682 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -4,8 +4,9 @@ =20 #include #include +#ifdef __x86_64__ #include - +#endif #include "hw/i386/apic.h" =20 typedef enum WhpxBreakpointState { @@ -100,12 +101,16 @@ void whpx_apic_get(APICCommonState *s); =20 /* Define function typedef */ LIST_WINHVPLATFORM_FUNCTIONS(WHP_DEFINE_TYPE) +#ifdef __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 __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 Sun Feb 8 13:52:41 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=1763719653; cv=none; d=zohomail.com; s=zohoarc; b=H1HGN9UeFedNCn5uE42M2mEjcUs5i1/QOsKKz9mYvhPwq/WRRw9iBmyKsMmiqdMIe9V52MoLY2X0BcileSDJRIaoQU1C3FwbH68iu8x7bEpy9cW/MREnojqD8UEW6mzPS24XmZrrc0KHic/M18EfHL4aO2a7w1zExeHDj63VKIo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719653; 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=zNv66cYWOjcoM4iD8mPZ0d3N5D4+2q07Wwy2NtrQNPs=; b=EtHQ+CSMRpkBKbC3J6zyGEpZV6hAEh2LHkC1LrH9ZLdc45daF+6vd/fe8ZXeL+umAAgQi2o0e2iPPLDL6OszSMlWVl3/Q8+vGqFCDjmy8NhYjlIt/5o8hjyXMSeojJ09mcJFqyu5TBxmbkBbghD5fTuagOaL4I4bJHbg/GAaj40= 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 1763719653966454.21200919988087; Fri, 21 Nov 2025 02:07:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzp-0004sx-Tp; Fri, 21 Nov 2025 05:04: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 1vMNzU-0004hY-Jf for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:45 -0500 Received: from p-east3-cluster3-host4-snip4-2.eps.apple.com ([57.103.86.35] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzG-0007tp-Q4 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:42 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 631F218010F8; Fri, 21 Nov 2025 10:03:00 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 85FEF18006EB; Fri, 21 Nov 2025 10:02:58 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=zNv66cYWOjcoM4iD8mPZ0d3N5D4+2q07Wwy2NtrQNPs=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=B7d+8HQSgmiqoR7nsrbtjnxxlmSzNIcrSX/ugClggBKtfEgYPuacwDNpaVbtDwCz4Z9jpWiiBCppWOEVcGQSMMLtDiQZvkbZjWbOiULMPlKLDhqa5m5vtFdo2B+BqhelIlT2xB6Ejk1AnokUaFfF66qka5UBEz1oAY2iiPUnM1g5vf0qX+Z2GGrs0xqIIy0YG6Y2EdRjXuIPlVESUFSyMetf/djL57yHklaMDazzXf3ObXWQ9U/jG6YvsLl/eO0B25SarnFN+Mcm0AvP1SStfB0WWITXYA4ATDqrMFj3+SV9vNsyt/NM5XYo6e+qTqQ9nNzTsl+kko4PCus9S3suTQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 09/28] whpx: common: add WHPX_INTERCEPT_DEBUG_TRAPS define Date: Fri, 21 Nov 2025 11:02:21 +0100 Message-ID: <20251121100240.89117-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=GNQF0+NK c=1 sm=1 tr=0 ts=692038d4 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=2psWIPzlEfUqwKpUe20A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: kX4eJg4C0mLl03m3KkajKk3Y2ciQ2VF1 X-Proofpoint-ORIG-GUID: kX4eJg4C0mLl03m3KkajKk3Y2ciQ2VF1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX78n6xLxKIYVh zbEQOl7IrqUan20vUu/o3JXh3a8FHHmPNCpohp5P3mmwa/kHHW28hYLEHym8tIj7O0qzUnsYsJq evYqWuvevPNC5L6gawEFSTNrCqVT/N+4T4FGhidv9yU0YxVwSt3EDHcjjpda/Y7QmrkHQD1JnjX n7zO7vcaK9tqzknHi5LK9va5kttkRFldZdbOzqn043V3qvv5GmEj0AMi/0RYkxzFUJh5pksPGtz epl4h97d1tKXB/ONOc3RCx2cXBrzeSCMmwl8xYzulnMTghu0zJYkd9vSns3PNX757UFy/TutDLe 0IBZZ8o5kU9YApoXWHr 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 malwarescore=0 mlxscore=0 spamscore=0 adultscore=0 suspectscore=0 mlxlogscore=988 bulkscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB4dMvDnaWZLDlgyfRQm7CMxQf0xcFRnkiZ9fUm3bRUfN5wsEqbKORBmMVT9MNXVfIwohh3dgkg/eZLdKvnpxIjSdxvli+IidilBvLYM/O7Nnis65ZEedvID0IwH9p9lE+V22an999rs897X0DqaHBLcwhD+RnYYeJ20AXsChAqVI1lmW9DRallgJlyh46GglJPBV28n3jEhHWQxK2BBs8OW4CL2en0w0pD+CnORzTQO9Gwb2fp02b/CVH4uRmwFvyoptm/rGTvC5vL5E7hXBjRKPFWdUUZp28D5EemrWzpDm8PLmZGoZ2xzluMAcUzh2+ncBdmUO9RY3ZnTeneXKlI0vJX+qbkBgWfw2BUDT8yx6ppB56puBGgF7rhscMRRRe55BuUsMfcsbOvHBDfm031tPqoZA+oQ0zV7nlnQ/flA03O0XAqjgIEcIBy6uNr2aTR8clqMgbY9Sj2Vo6WUR/R9m8f3qaVAlEoObKSDKa7SKuK+bJF5I1dtt1ASSJVnHpVdGRaH+/VoNiHUGpbA/zwf9zlu79NMRwI9EkVfCuIaxk18Kc4iD7Rsozme1R3VSH7/It/h+8EmskZyNhw3GM6oy87j2OkLgWFmhS39EV/4Aznue2wQwNw8b/gRByrsLFLOETg9ah/PRZO2lBrtyCqd+kEwcvHGgLhyxjG3sUl7RZH+NHWLsGPBHixoZ2K+aP+ZmTIw/RHScX4hDX5jlGvJeLt6C1I5QVL6jiTfzmCeOImy8oVoM6py6afNMvF4s+Swqgifkb5A== 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.86.35; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719654425018900 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 95664a1df7..c0ff6cacb8 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -123,7 +123,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 7a7c607e0a..73b9f7c119 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 Sun Feb 8 13:52:41 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=1763719703; cv=none; d=zohomail.com; s=zohoarc; b=VfCdgguQriK5hSGU3vXRZx63lkVjLf3zG4SQZ7VF//sfn5DtkfPRHI99X5Uke7J6D/Kf6Ye62zeHv7vI1c9fJIOByAWQvhoj2LX6Ilw/Tlwp9bRp1zw3hTmKCI8+GCFWjTjuerJNGY4AKXGglr7uQ4/aAHlvfe4ms5TU9b3Da4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719703; 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=7XXwlHQPk/SKyuEJ63acz+SZiCgkqqjnl8cfroXHjPg=; b=TypcrTdmidTd0umYCVsiekG9pFAnpjQ5x6ku8bTeqNWbq3gzkV4p/gXnUrs+ipnbkU0k17BgOSyEs8Uf9BRm9GIH7xhVhMiMe7bpmWXZASXFtgL8klJBfgKakE2eYlcqMs8r5Pai1wqs1UmbYosSu95D+8WQotg8C51n4WipDm8= 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 1763719703781207.01093803288484; Fri, 21 Nov 2025 02:08:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMNzi-0004or-3B; Fri, 21 Nov 2025 05:03: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 1vMNzS-0004gG-Ly for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:44 -0500 Received: from p-east3-cluster3-host2-snip4-4.eps.apple.com ([57.103.86.17] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzG-0007to-L7 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:40 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 18A0118000A9; Fri, 21 Nov 2025 10:03:02 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 44BFB18010F4; Fri, 21 Nov 2025 10:03:00 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=7XXwlHQPk/SKyuEJ63acz+SZiCgkqqjnl8cfroXHjPg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VCN+W8G+xiIKiq1HjPLGcZq16mpKVk/A0VsQTzkeQkJ81Y+fqp3SyTXpJWhotIvwxixG1N1XtT/uvb3bvuLaNt8ifmHbgVvPb6EWjEc1LFouXrpF2xVhUfQjMcMiMFqdJPFS2gNfEDn6RfOkD9J6lZt29dbw/Ro8QXCiWrbduYpSuu9HULj8mHXPmNpK1VCHUYrZ9CwVBNMB48cQfJQyojfAlbnoqmzEZoNCfnejLtZsqa1cahyGTcGAQLMpzsr3ltxqQj/LUByipozOR2cdgWXvoaVw9RejhskMiqpnAuV6GzVKnv5znTXe8LaJLpB33GijJFtGy/qs1jrgbMmrxA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Richard Henderson , Pierrick Bouvier Subject: [PATCH v11 10/28] hw, target, accel: whpx: change apic_in_platform to kernel_irqchip Date: Fri, 21 Nov 2025 11:02:22 +0100 Message-ID: <20251121100240.89117-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfXxGQaRkVd6fV0 FGUynPb4hfBd06Se7bGsfZqvq79jR5Oxv4d3fYg8qeG/UgxZe73bwLbdHKD/m3MjEC70/cQ7cRS f8PANl5+ruTS+8KS6YoAgqLkpNqlY2k1l7sU+m4iEet3kSVAwy652iyZ8laIj+Kwo4Vx/l40S1a dxdRpDC/jVbsMdKBmHc7Ht8ny/mgbJZkjgLuRG8m0XCRkacshxHyiTq3vQ+oyzvZZWMviA8RUF0 DpRdGJ8JczfGuNKSn8SgaKIq6ptSuLyvna7LLog/oTFD5og/wqGueLFE1RTtErf4/sA/NcHKS4p /YCgohgO6GgfQWyIC82 X-Authority-Info: v=2.4 cv=Gt1PO01C c=1 sm=1 tr=0 ts=692038d9 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=ogbMO5OAvhA2mBZm2BUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: VKk6s9yJcW_xCEBBcQEgdkAFNcFHoNHV X-Proofpoint-ORIG-GUID: VKk6s9yJcW_xCEBBcQEgdkAFNcFHoNHV 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 mlxlogscore=965 adultscore=0 spamscore=0 clxscore=1030 mlxscore=0 suspectscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB2AUjxSXRPtNcUVnRGV6Pbs5wNoUYbWNDk8o+hAa7g03geCmmvT9ft6gEkc85IyFmMreARWFlDAvRbi9aYlBKwsFCpiCcA1N8WZzAZnXK/8pGjxyP9b0wkFODm+febXcZ5Sax+Kgkd5jYdhcgzNDFa+EI5ZpMSjchBBeDcSPEKaVfajQ60g+OmiP/FoAMQwBAqSR0bYV2IXJSx/wMsbQYvM+nj2tsYNBDYZZ6+X+n+hNt53gzQ/VajDCUr3kA8sLd2yBltq1lwewIT6Fg0azwABLaF4SO7JyWKR8zOPt4OpfKzcYpESBiE+9JjsG1Rm42qxc+gVN6xL8si0VMPOmxzsQhLY109cZ3r48FRKGGSJ0MyJP/xWCz+qxx3zzoXAGmM/N/CUDdKoWLlSsVL/5EXMDVskDZLaUx6E7S3rhQoiS1p6+5UeN4za4Ev446+2a1me7gUpYsWdYRD3YTU94jNkTG8lUqk6dJ1VKtgHKkZaT68ZjWM0qWe1j7wbRi9F/VUX7zH+2uuZZFCZ1a7kGXaGaGKV4XVPmpAYRQ7y9KX7/JGDjrmaI6ZyfUEJD602HYuSp+/pBcUYGk5lkyDVIlVvtWkjy/O0eR8mdBc+PrhgyDwJ95fEVE4TcImQfDAKpleJbtinHnIg8gRGg8MbUh5ry9M/1OQL1Hh6zln72RffASUC+d4HxIQZFjDXcuDlJ1dP7ixy6G3119GpJRAfUoONChlmmtfh3TMQ5AK5rEifilbqKcf5om1RcVKK37YSOZiaFzjhIsw6e1uZshsA== 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.86.17; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719704539018900 Content-Type: text/plain; charset="utf-8" Change terminology to match the KVM one, as APIC is x86-specific. Signed-off-by: Mohamed Mediouni Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- accel/whpx/whpx-accel-ops.c | 2 +- accel/whpx/whpx-common.c | 4 ++-- hw/i386/x86-cpu.c | 4 ++-- include/system/whpx-internal.h | 2 +- include/system/whpx.h | 4 ++-- target/i386/cpu-apic.c | 2 +- target/i386/whpx/whpx-all.c | 14 +++++++------- 7 files changed, 16 insertions(+), 16 deletions(-) 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 c0ff6cacb8..18d93225c1 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -496,9 +496,9 @@ static const TypeInfo whpx_cpu_accel_type =3D { * Partition support */ =20 -bool whpx_apic_in_platform(void) +bool whpx_irqchip_in_kernel(void) { - return whpx_global.apic_in_platform; + return whpx_global.kernel_irqchip; } =20 static void whpx_accel_class_init(ObjectClass *oc, const void *data) diff --git a/hw/i386/x86-cpu.c b/hw/i386/x86-cpu.c index 1a86a853d5..aee7fc76f5 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 4565436682..81c0c1819f 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -44,7 +44,7 @@ struct whpx_state { =20 bool kernel_irqchip_allowed; bool kernel_irqchip_required; - bool apic_in_platform; + bool kernel_irqchip; }; =20 extern struct whpx_state whpx_global; diff --git a/include/system/whpx.h b/include/system/whpx.h index 00f6a3e523..98fe045ba1 100644 --- a/include/system/whpx.h +++ b/include/system/whpx.h @@ -26,10 +26,10 @@ #ifdef CONFIG_WHPX_IS_POSSIBLE extern bool whpx_allowed; #define whpx_enabled() (whpx_allowed) -bool whpx_apic_in_platform(void); +bool whpx_irqchip_in_kernel(void); #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 564c1288e4..c0492035b8 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 c63bb28b20..d778e358f6 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->kernel_irqchip =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 Sun Feb 8 13:52:41 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=1763719517; cv=none; d=zohomail.com; s=zohoarc; b=bJMQjVtalpmvKd82ncW17wLUcoOqxpinX+nQ2s/p/75xCv2XERRSUOexHbAJQQ4ni2Riurj1G9VwgCvfp/S7mpwIRIbkUgAJIQflfM4763LELu/jBI5Iw0itZUTIFv0cOh/qXLu+xPY2PxFaXFI6ntHje4ZWdxZ65hKvIfxdxVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719517; 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=9W3/gkmYU0HZ8GpjnhrSzifwyhYfOKRgBYQL7/6vYH8=; b=JG43waWRPV95p6HBE98YyK20hsePkp5rUSC/EvAzJbe5aRsXPIZHwxAwaWxrUTqH/D7Frifs1qHv7ElGoFWgR1J5G0SsH+4hxow+K86y5SlfrHxb41BYTLmg1fdUv9JfN20QYIU57VpJWPlzc9HBZlDvc2vLRwT5cG2EQpf/CfY= 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 1763719517488671.4562133246552; Fri, 21 Nov 2025 02:05:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO09-00052s-5I; Fri, 21 Nov 2025 05:04: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 1vMNzX-0004jC-Sw for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:49 -0500 Received: from p-east3-cluster3-host7-snip4-4.eps.apple.com ([57.103.86.67] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzJ-0007uh-Ki for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:45 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 3B63818010CD; Fri, 21 Nov 2025 10:03:04 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 1CFB118000B8; Fri, 21 Nov 2025 10:03:02 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=9W3/gkmYU0HZ8GpjnhrSzifwyhYfOKRgBYQL7/6vYH8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=MkbBFEpfaZi2+YKKTYd6wL//DHezAVUixdbVUkwnRon+Zf/sw/+s1S3ageK8cUndtcFP/MdgOcavWftvVCD5PaOAvRc6LvDAq220Ak9DKN1KMUknf3mNc6dpRUYyXUje08g9Lk/o2xWrRXs0ILYpYUZUiE4GCfwWAbkoTazHTMV288E/oXzzV5hcFzfJkNYEDUiQLEMqSAU++19HGO9USV0qDKvvfo+ajrN8vj1x1yvZ/tXAQIaZPwc8NEv6/VplCNdeTUhKUbziYSkKzRc/h4erPZJinN2wtmSoG8u33H/Pkj4OmEhsu7575a8r2wcj+hgixFGKZ5Z+fAEB8GBWew== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 11/28] whpx: switch irqchip in kernel to a bool outside the struct Date: Fri, 21 Nov 2025 11:02:23 +0100 Message-ID: <20251121100240.89117-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=T/2BjvKQ c=1 sm=1 tr=0 ts=692038d9 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=flQ0qPZ-L44n-5z-kFYA:9 X-Proofpoint-ORIG-GUID: x6puwTrLHKF-I1ad95QrBjx1eu_ecKgt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX1y7Tg/snnMj1 Q2Y+/TDOdQCMjkMSlR56m9vo6BpMmLOAocgXPeM8IMq6KK6ijudJblfMxtNVdCjNocs6wxWa2ct 37Y7mPzLvFhRtKKsxJVoIKEAhnrhNUn6Qv55xQdinTw8FO0+KWeXM3Mug/BfSYIrWPU6JOgVrM0 s1dVLBMtXbXlY8bCvKyRN0yaz75okICdcTMVSK9UCpIzin6puv9D8mz/8mzC2M7v5mDZIHXBu8/ oOoZM4uzhjP+HKgzFJ2DgAL6dRjOCoWOOhmv31591UsCPJCqjOHyxCYhpWDRlt0V+0aY6Ljg4Og o9LWSbMcNCnzW4nXazy X-Proofpoint-GUID: x6puwTrLHKF-I1ad95QrBjx1eu_ecKgt 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 spamscore=0 clxscore=1030 malwarescore=0 mlxlogscore=999 bulkscore=0 phishscore=0 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABsoTDkscOsxybTCIn3m8dBB8sbF1x9cOXnsXgc8c6CP7BRW76p9A+Z+90zPVfAvY3Z7zIrNYvn0MuOAaQUz/l/jLaDWmk+K+oBchjF4IdEsKfk/Jww3s4d9XrHJb0VZ4nJrCETGo9DfISV7gkzqi0mu6EQGbP47Y7V11KOf0Y69QMMn8kMHZM/SB8dGs2NUEVveGBQ7AfEVwCfosL7Z3OoYS5oda2Y7j8Zy/vuIazaLWQjphm6ytlVzGI0j8qMPJr5qPhWFKNbQdxZ63WKyXsz6hkC9v1j/mqTkQOuyiXfHYfF7csM42PiK/e+1rPwV3ykQKHsEEATDI6SkGMuaRUPSc97C3/iNPDZvzacTm4/uBXKYalqx0Fd7C7eWplWbLHzpsoE7XRQCsqzxFlkMSxN0yoApE+haAyW9xvGdfF697QATPGNBOU/LbO4toOR0mGmZga0tQAI7VnXIYLQL5duNwzsNTZH9FiZ1SKciZLoF6uWgEI3w6LovU9DFzibmuultnZboj/o0UTocLhUzkjuPocBgbn0ZdEhGPMklVpzne0HntsbnSuKKLNxe4eVZ0foJ31jFUs2kXWz5ZFs4c9OOCrE697eYmHJ2TPvk9RPdjV2LiOJ98r83QE7YzqnRwAO7m5gjHOZMztq80mKJdraOJV8uiuOyvOAU+Qnr27Iwf8ToaKOc1cfpzD9FCFZ8mgJgybZHCQTzoDLhl4b9P3MjZdXQwO+k7AgjF4LYmwobcslQ== 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.86.67; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521311018900 Content-Type: text/plain; charset="utf-8" Fix buildability on newer Qemu. Signed-off-by: Mohamed Mediouni --- accel/stubs/whpx-stub.c | 1 + accel/whpx/whpx-common.c | 10 +--------- include/system/whpx-internal.h | 1 - include/system/whpx.h | 3 ++- 4 files changed, 4 insertions(+), 11 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-common.c b/accel/whpx/whpx-common.c index 18d93225c1..4dabe3a032 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -39,6 +39,7 @@ #include =20 bool whpx_allowed; +bool whpx_irqchip_in_kernel; static bool whp_dispatch_initialized; static HMODULE hWinHvPlatform; #ifdef __x86_64__ @@ -492,15 +493,6 @@ static const TypeInfo whpx_cpu_accel_type =3D { .abstract =3D true, }; =20 -/* - * Partition support - */ - -bool whpx_irqchip_in_kernel(void) -{ - return whpx_global.kernel_irqchip; -} - static void whpx_accel_class_init(ObjectClass *oc, const void *data) { AccelClass *ac =3D ACCEL_CLASS(oc); diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 81c0c1819f..b1706a2749 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -44,7 +44,6 @@ struct whpx_state { =20 bool kernel_irqchip_allowed; bool kernel_irqchip_required; - bool kernel_irqchip; }; =20 extern struct whpx_state whpx_global; diff --git a/include/system/whpx.h b/include/system/whpx.h index 98fe045ba1..4217a27e91 100644 --- a/include/system/whpx.h +++ b/include/system/whpx.h @@ -25,8 +25,9 @@ =20 #ifdef CONFIG_WHPX_IS_POSSIBLE extern bool whpx_allowed; +extern bool whpx_irqchip_in_kernel; #define whpx_enabled() (whpx_allowed) -bool whpx_irqchip_in_kernel(void); +#define whpx_irqchip_in_kernel() (whpx_irqchip_in_kernel) #else /* !CONFIG_WHPX_IS_POSSIBLE */ #define whpx_enabled() 0 #define whpx_irqchip_in_kernel() (0) --=20 2.50.1 (Apple Git-155) From nobody Sun Feb 8 13:52:41 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=1763719601; cv=none; d=zohomail.com; s=zohoarc; b=aw3dCqmvfaYntTONVO4/GC3YhzxKbp8bZsYireE3DtbemifuCz5e257B72TzEuR0xVRoWsDaTGHt02aNBlbWilYL178XDj/oyGRmbaL7jQ5Vh6byhBXzjBXPnKApUz6OyrhvBpaPX3fHfe+lCRT0v+5uricRF/tasKU54roPcXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719601; 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=/kJ0BaqE7ugwEft4lAxgyDuvWfJMzegtiCQDRUvuUw8=; b=aIXJVtRCmPQrMsZJfNZbRLQehDDiz5aZi2gGBCsf7iRu44jJ4SdiXWSDVJGUGiUwQ3xZMHSi60DYwJi7tpyv5sTzzW/LRvvvB38daPvGJHsoT2p/SEumhU0aZN7mar68nznuSgfifKkB0YDl//7WH2Z5xJh1HhbdqFYoKebZSyo= 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 1763719601938827.1082204735136; Fri, 21 Nov 2025 02: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 1vMO0I-00057e-9X; Fri, 21 Nov 2025 05:04:35 -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 1vMNza-0004kN-HB for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:51 -0500 Received: from p-east3-cluster3-host10-snip4-10.eps.apple.com ([57.103.86.103] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzJ-0007ui-Kg for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:48 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id F0F3318010DF; Fri, 21 Nov 2025 10:03:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id B8C4318006D2; Fri, 21 Nov 2025 10:03:03 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=/kJ0BaqE7ugwEft4lAxgyDuvWfJMzegtiCQDRUvuUw8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ISnAX1in8zK6VVAtDnwa67HxhhxRUhizb6vEYJg37AA7051CoHSZU+GY5Lvx1kJx0woBElwnwzQJbqLw0wEN/9UfC5aJxwHFkvR27zZuCm/aEQmhz9JpDrmTat9+zS9NiGaVZKUq58PUrFvJDpUXp0fTNvYfMQ2KyAKQtCnXxsW2w/qc/bo99W2Sm+dUlyCBC/wuezvpIc3BXdtTfcTt/3dchBVZBkeVgiI9d2YG/nNZwO63naV035+hzauU2x4l31VMdFvurA6rqItcHb0lmHepS/PQPI8Rcn9z7SJYsUcFrNRudQMHE9PYPyjJW4T+x4lOIKf0Ved8D90g8K+jFA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 12/28] whpx: interrupt controller support Date: Fri, 21 Nov 2025 11:02:24 +0100 Message-ID: <20251121100240.89117-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=d/b4CBjE c=1 sm=1 tr=0 ts=692038db cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=flZNgbgI_Ya0FyYah8EA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: J97Ipq5WWMwtkV6SUU7I6Z9NCmE05zUJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX9hZ8OmBCEGOJ VW8oz+itQMPSBuCgdSV3ZABHoZSUuzM6Omp5YjWS3y3NNhuSqZKuj2QqPKIElHwOQUeL0KAATL9 gVO2oaCT6SZjUT0JEhUDnECt3epnRwVY5ALmqumw2nkFG34xHMJevSPCfzwfgjsTq52CC4eaNF0 OlDNwfptLRDjiXH2SrGsXlW+frEsPeMuE0kHYq4wtSiUmO35WM64NlOe4k397SHQc46HWbSomXn W8JkEp05Tbb60o9AHQ+WXqvSoKs+2804m62yOAXeqxhqUFjtHnI4y5He59O1CBTgdeZR/hHSDgR olxZvBAz9xVxjl9vVB1 X-Proofpoint-ORIG-GUID: J97Ipq5WWMwtkV6SUU7I6Z9NCmE05zUJ 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 adultscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABEsMQNJXPFukWuTdV/FoayZGgPG7pYH/+ZosrUZgk03/8yoEmoYAKgrk1sg6scP9MBjE5n90Rr5QhTjASlnKXjr3U/aMytjJrUIASXJPoAi3WDGtfKzUNA8fr7qHzBgmtdno+EDzeV+8Kz+qZyQjo5gzgI8bM2Dt6NKLGHRMQPHhWzS//M8YJU88KHV7V/3j0QBv9wOzkGtl5WHzYRnSJXCLrxLNX9yFkNQjyUZ8AgARmqXCQ0eLqmA7mreAojVPSPsiI6b+DLDmNLOGZVlT3XpeWEoGksL3bvYfz0jmG3NH8yHNBkAF9/BP5/XyWpXTKDn8WkRZhqMpFSmWOia0TWco2cVCVBq6DzGOu5QjFbviXnlJyg/I1vohG7fkMom2aomj0qgKMOzcJ7NetxMnVeBVDxaz0i2XFiYLSxblL/kksR7P4dYljlDyLmyE8SEgvvkegfrAI/zeHb8CmCO6BPOcxNr2Q/Wyk4ROGNib6fn09QLpdUsDdbqgdCnUWtS2AZzLz9EGAnxcM7ce02goUgLIqbExm5LGLxm5lxJCHB2PCSETfZQlsMwyC64FEdiEmDV4VjBp0f9fwvDK+EwOt7ofyIdTtwPXJHc6kB3MUu6qZOyfMXl75PxSvKQd91jr2aUq/0NyMB2dkuPAE8cnZNMIaQuFGaNfQe55W1Il7JgSeCkfdU+Lox46Ld9VgDHaeRi8Hwk4e9J1ULbG8P/onHsg/UTsiDcbw/+YtdtVeR/cGPTWvJxkg69aAPL8YkBvc65O+YB8L3MoPIA== 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.86.103; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719603122018900 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 f2a924ed26..9817299975 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/loader.h" @@ -2108,6 +2109,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 2d0df6da86..1fd1e329e8 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..88a05e5901 --- /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; +}; + +typedef struct WHPXARMGICv3Class WHPXARMGICv3Class; + +/* This is reusing the GICv3State typedef from ARM_GICV3_ITS_COMMON */ +DECLARE_OBJ_CHECKERS(GICv3State, WHPXARMGICv3Class, + WHPX_GICV3, TYPE_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 (GICv3State *)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) +{ + 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 61d51915e0..9fd8b9b858 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 Sun Feb 8 13:52:41 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=1763719634; cv=none; d=zohomail.com; s=zohoarc; b=QZvNx7vrhI/K2/wWbCddMRtA0xxgVpmSaeQbNrI1hUwfBCU/EP/sjGhUo2dDQnkrJIZpRAi03+MW9w0YlJ1OmaoCIIyv4dvt2slcLa/ucvMBelmhBYsg3V6JCk+SagyFPHMAWCVfJUTBWFzg0uAyGpw+fBb5xGXwyo8jXQSkI7Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719634; 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=crpz9Nn5bZ5iogItlPnHg8Px7bSjVzHJrhlpxSGJOeY=; b=P1WDDWhKOQP11tPg25kEZsc7RxuvsYIMgd73xgf1yiYo26dnk9ZmOyKeZQyeoUlGCzMh3zD16rYkfQT7JF2Hiof8S9DVS+WDOov291YPv5xVqiEjqpoaUpjTf7j/4qA3ZSel+hVx8k0YcRHUEeXl3gNtles52U4PDcakMsLm9BU= 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 1763719634919930.0014401801214; Fri, 21 Nov 2025 02:07:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0n-0005WA-Oy; Fri, 21 Nov 2025 05:05: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 1vMNze-0004nf-5J for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:55 -0500 Received: from p-east3-cluster3-host11-snip4-10.eps.apple.com ([57.103.86.113] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzK-0007uo-4D for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:51 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 4494618010EF; Fri, 21 Nov 2025 10:03:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 7AC1F18000B1; Fri, 21 Nov 2025 10:03:05 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=crpz9Nn5bZ5iogItlPnHg8Px7bSjVzHJrhlpxSGJOeY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=WlTIczanuQWF+kblylKhp6W7RZKSsQY5W5xM6UP9a+zI0E6IWqgF24Z5weRyx+KocQFz6HI61wvrBKHiUf4PIYZGfsH3emU8CANfPJ9I3lH0F+khrvfYX9Vj3h6BL+ceVZCYxSApNMTClAfEKxQARgGaZpUXOcBvPT+RP5rrc7mwXQezLq22cgb/Ln6X50kZezfHpzVq9dKCf439we6Witjnb0TbXeoWRANe5iLsVfMocv04EGDUO9gIuMEq8azJKcZCZls+bbhzpcjtKp6LU6+td+WMDnfk5HOyXpyth1MJXGYYqm8VmNnZFBAhHPfjydrb4DNLVrT+x/wv8kkSpQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 13/28] whpx: add arm64 support Date: Fri, 21 Nov 2025 11:02:25 +0100 Message-ID: <20251121100240.89117-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX7wv6v3DFug4P v/dPxcVnRMc2c5+kKHHP3vFi5KKXDW/xC98/preBnFEKb1A9Bs2bA8WFOTSnZ3CI7ERGuqz6StL P+UWXyooPnddy3017bHOZGDEKXlPwVHp3K/r2ZIhr+cCgYjfJRFKBXK1IHLDehDsayLo3SF0wLo yAoo9T9VzVumGFLWB5jE2wgLfLvfz3tOf86czHNk10wu7bjshxdm7KBQbwx+Hr1+yakT+kPst53 NxV1m+3S0xLcbQmBji4jp7cAmo/B2CngRlaGwW9N/Dhqey5gKt+cfHr7eQ5OhK+pzLV3fgKsh/4 GE/ktXJm0Pf4bS3Tzq0 X-Authority-Info: v=2.4 cv=Gt1PO01C c=1 sm=1 tr=0 ts=692038de cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=coTCL0kfoV_fbKzCm0sA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: IAUHEPRSmnUga9cFf5PjjwZqxPBTZUwD X-Proofpoint-ORIG-GUID: IAUHEPRSmnUga9cFf5PjjwZqxPBTZUwD 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 mlxlogscore=999 adultscore=0 spamscore=0 clxscore=1030 mlxscore=0 suspectscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABdX0zpCcShbig+UZQYs7P6TbKt+C3otDBz2xbzlJal0lWfbV03+Ff7gNriWTrbU5XP6MLr55kddpffKS2n+I4LAndodVpg/b4HyPrHVFjX1mZ245xzUtLL81c1xG1Nk8x/bIxUIb2yjyW1SmYPZicy8kNmvEbYttC5hO3zSba9aj/ZY9VFiASmecm9W5gnZ2RHJ39F8tr2YqD7grzSa8WcBKOj+5XtpkrS50H45wBtyet4BdUxl3CL/ZAeVghNamw2Jf/TMx6Y/w/Vex07WamSpaAUd0LCrMR0mT1hCvkg3NA9CS1tV1r5qE4HTsaF3IGPZlBmZZkeFAlD84bQ9m7cxK2VU4LREKAq1VhH0OnsKrbEIWNQ9aqzGHg/qVVubOpQ8XSzQpvGVpevZqPBXdRSAoIq4nd1yNMYxv9WgdpS3Rz6kYEskpPvHVh7elT83LSWYaqKI9DvAmQZGz+dpmSnigpBdB/hAIFyWw4dBmi1e78lQvkqOl8LfOOOzWlG3Fv2fcYruiuD8FrwoY+fuMnvpx82Q/fCv2230YzUt5Sm/aT8dlac3FJuLZD1x3IUWSycK4djMqH2V9mtolI/4705aGhU3wMC2GcQyyKtmOlaPmf9y0waVxcokK3XWVNuNxEqnZWdKKRXxf0hfED4SHkGjcSw3k3j4oFV6M6TMmeEPWysNGdKs0yotnIXbBdtmL4htaXpI4oa7O1j6xgxoLNR5niP4Fnz4c8QoYtTE5spd4S0rxzF+BVnqq6eOh1GLvevzpoILAW+NA= 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.86.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719636278018900 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 4dabe3a032..399cf1914c 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -16,6 +16,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..4eff030c48 --- /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/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 >> 8 & 0x1) { + 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 *)((void *)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 =3D=3D true) { + 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 (NULL !=3D whpx->partition) { + whp_dispatch.WHvDeletePartition(whpx->partition); + whpx->partition =3D NULL; + } + + return ret; +} --=20 2.50.1 (Apple Git-155) From nobody Sun Feb 8 13:52:41 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=1763719517; cv=none; d=zohomail.com; s=zohoarc; b=AbuvqNzWLDjRv15cmjASJ4KXEKVjSAR0H6wKrL6Iz1rFbcptnG9sLNBfHn0CxJnGhmOaTZx+3imph50bKMq7rGgC2Oi0U70Zta1rDrKJZXi5hN9iTTafTf1F+QyitDRNQqx7DlxE4JLxXWFRofVTNll7Yuy2MeukVIG3U1ltwug= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719517; 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=m3T10dAXHppumsAJBbE2xnya72Vhx976XE5zWYABtwg=; b=LkQazwf/cfzAQeHBvdsakb/DOayYzHbXCBI5t6n6Rq9AZnKeSUT4E8lmrZ9Y5GUIQXngxolynUL5CKmYkQrizfjnBbNUsCVgUXvBUNw/uhTTbaKQZPXgw8aqzMq6TLASNrsmXdntxRwEsLYbSnzWQcbAudeeBRynYTeiUvipeBw= 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 176371951763048.291854903963554; Fri, 21 Nov 2025 02:05:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0R-0005HA-Cf; Fri, 21 Nov 2025 05:04:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNza-0004kd-Th for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:51 -0500 Received: from p-east3-cluster3-host5-snip4-6.eps.apple.com ([57.103.86.49] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzK-0007up-2i for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:48 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 515C718010E1; Fri, 21 Nov 2025 10:03:09 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 3FA9518010F4; Fri, 21 Nov 2025 10:03:07 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=m3T10dAXHppumsAJBbE2xnya72Vhx976XE5zWYABtwg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CR78gFJK4TnKiIdKciuxzbNrpeG9V2axKzhhStpVoF7wUJcFehYullUYpR3CvMzSKqIVsFX2SQdnMDKMc92fYfFqe3urhhQVXwfwDWuMVeXGLPruFWfB1qV5sDzL+xNIYeMXrOXQZJjsSw+cmfaw2lpf56aNV4M9Yut72ofAjV8V+Saf5fdXNvEd0BbFRRLxRgpHzA7SceRHFv/9OYkcHy0WE+flM6GvnwNfVUodiQ24wGg0vXV/HbBWGjChKQo7cXwrdgE12tmou4bKA1Fj1X+C1hNl5yUYeVq8OSvjphciedDeLehUc+lshFO7v0lNaNhxJaw8ygptdXmVrxneKQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 14/28] whpx: change memory management logic Date: Fri, 21 Nov 2025 11:02:26 +0100 Message-ID: <20251121100240.89117-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=d/b4CBjE c=1 sm=1 tr=0 ts=692038de cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=-lUDFlMDQ8UY_jOkuTYA:9 X-Proofpoint-GUID: tfEXPYz5CA2P3YJO6WYc-oA2pAX50TCn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX7PoLvJQYE7Mp mR3CFwjEiuo65+RjKQF4pKNsPyFNVEmkm+ifXL9ternv6cEIiUQHCO9ek8peDZK2qtYbro6VAb2 ImQ/gBPYdyvVjAW1xSX9VYlhUvDcuTd8QauK5gfk+zCQskse2eMMg/fPG3nn4phQi13c6BHAg4g yidFp13I1UBjXVxmTqWOCby8xM4+hIfBtya1lCRK+gl2CUwKN7aqFge6HoZJsmUfjSKeEJ2lM+p tPhWjKemQSWoGz0ijYKwejXYCdvKWXmptLTrkM0FxBSFdkLE3LSbLrFdHASvDgLpu2cdDatAaXP qKwL9q2SYX2HbmViPIc X-Proofpoint-ORIG-GUID: tfEXPYz5CA2P3YJO6WYc-oA2pAX50TCn 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 adultscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABtIZLPGWnxHf/aZxCfPOcGa46QIjA+DUU5B6vOhdPv85E2/Vj5POQOOA9i+TL9IfMlTWn4Box4Rn4mpRHWYziGYp3+Xi/xzskgP+ROoCrvD/52taOlwU2udeF1ZbrO9Ga2A9j1pnUeceXGVKeYcnQKfyEDdAtV0fCBca3oGBdBH8jl0YvUaw2f5Q0x6yjTVk4RB1BJmGlBqk6tnQkSXiXodQ0P4ha1+I+OtGL0zrKWodykWcW+wvBloRyrXmQy4aIw3fiCTtEcxe1CDHQd4mfdYyI35jlu5ewePCMAaVgn7pFf89Goam5PQSK3Dl9xD4VZFPuC96//WMvqywjwZl3qTs+IzcBbH+xIXRfG/219IyssSkMgJASk4FSIj7rKpkFnVHCX3bR79s3O/8QMHvfRN2NkdgKaXEhWGwX1gkMHwTWCrnCGQF+2RDFp/LmaTV13iWronTyGMtXfXbtkArvVTjLe3VrjjWLaCR3zVHzF7w6oEaz6ReXhMnHXpIqHVOK5FwrdRMj1ERCZd+SAs55Vi93/9RmiY36zvnPe5bv1vTthbG7uYsFcZX/4SX3nLHaFjXTrLmDtgadJR7kEjad2lhBLuIqTNs288At5+6l7NRmXUboAE1B47jjcyE24kpVTpYgSDGBot/dW1ml7vt73dHK94rWdB7ukVEeB1l2bgxtwdZFngu+GMvuhT0QoOgupis4PnqBkKWWDxk+iBv/odpJXEhdZU09PxQsK7j8VSMbNIIroBvMPlgD 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.86.49; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521321018900 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 --- accel/whpx/whpx-common.c | 101 +++++++++++++++------------------------ 1 file changed, 38 insertions(+), 63 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 399cf1914c..53b8cb06cc 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -259,89 +259,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; - 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); + 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 res; + void *mem; + + 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) { + res =3D whp_dispatch.WHvUnmapGpaRange(whpx->partition, + gva, size); + if (!SUCCEEDED(res)) { + 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); + res =3D whp_dispatch.WHvMapGpaRange(whpx->partition, + mem, gva, size, flags); + if (!SUCCEEDED(res)) { + 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 Sun Feb 8 13:52:41 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=1763719663; cv=none; d=zohomail.com; s=zohoarc; b=VXdlRQi+XABG9Ke/HHUlk3ZIYhkJN57H8pWY4ijk1YXo5/mgTf5Z3NQGt5vN/2sGfjE5g8KJUKLbT4Oy41IJ2TK1x4jhnAwVP+daD3q41UMS5r5wW7ECPzOTbjKOCDldmAQuNfPGQ85RFi3TOEVU46dMO38avSpg5WzDdYM643Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719663; 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=oLdsz5v4xa/tST8knhDRG0xyTMCDKgIhKnyueMWd+yk=; b=EfWCB3DuvOIc60id2O7NpCrCUBDvdLJm3KjjVJspqvqv4BOLcmAUqjyPJ+KzyloerpoYw9v1UbLVmdE8ifo9t7Fa8JjknMA7Wpu+av+fBM16kJwzirB773kAquBqKTdAmm/ZDc5HnZm16JngA78sx5eBh3CwslsY20WSicCZB8o= 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 1763719663395435.25064644606573; Fri, 21 Nov 2025 02:07:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0T-0005NG-O7; Fri, 21 Nov 2025 05:04: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 1vMNzk-0004r3-UH for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:01 -0500 Received: from p-east3-cluster4-host4-snip4-3.eps.apple.com ([57.103.84.36] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzc-0007xX-IW for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:58 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 35E931801105; Fri, 21 Nov 2025 10:03:11 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id DB3EC18006F6; Fri, 21 Nov 2025 10:03:08 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=oLdsz5v4xa/tST8knhDRG0xyTMCDKgIhKnyueMWd+yk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=O6pKyDtG5tEotUjJ957+VSKL8nFarX43fq8e0CPLTVvq1A7bCIP1lOb2ByR0bpejgajHPW26bLlKB2Gsb9kSC3nkc07ETGAzY0Ih16k6DXRrrcBcufM8AG9MjZ0Zjve/y9g7bfMZTF0IUx9EfTAbT8d5ihQ/HrACh6X+5d2d0FfrK87phmJJjTMCaVyykcrLOVYtFarrlVVYKl/73hV65iTNApBassuSPk8xouIwQ9wT9yc/0Z6Bz9AdSCbRcAST8go/PwanRis/0VFBPL+WWvKrHtZWwqawsUIyRVhMr3/+mgOrgv3KORnFjQnorQ6Qcs1/FbktMFK0Va2F1dc3SA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Richard Henderson , Pierrick Bouvier Subject: [PATCH v11 15/28] target/arm: cpu: mark WHPX as supporting PSCI 1.3 Date: Fri, 21 Nov 2025 11:02:27 +0100 Message-ID: <20251121100240.89117-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: hfkkwSoQrIgRvQuYCUzo4s92_Yd8yRqQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX0KDYxfLO6xNn rDGENULSazxlJCU+itB8hZrp6A/KcbFvDuWk6beEZrWJbwdZ59LBwW1M+AwTzNnEmzTvLkFekGw zGsGhdKtAeQ9CHooFShbkwc9cJ0c7L35SxiQLRGHpApvPBcfFCVQ20GyQx3CDq53iPpJvOuj5VP YTnXBM4aiTo+/4/N+5CfPU/AOkd2Gek3wZVe7J5qhOrmZ1Fqi/4YDsdOPQgzBqXGHn/pWfo1VZi jqz81mWGtCCl0/DIUv5I6ZVVyh978XnBLixUSJ6a8MkCHYyxKUg/dxQVZnhSer5dZkYNK8z6AOX AuNGEdHM4YKPFOvS1gA X-Authority-Info: v=2.4 cv=YvUChoYX c=1 sm=1 tr=0 ts=692038e0 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=GfoCO2L6IEBdUbzNuv4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: hfkkwSoQrIgRvQuYCUzo4s92_Yd8yRqQ 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=827 spamscore=0 clxscore=1030 mlxscore=0 phishscore=0 bulkscore=0 malwarescore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABEiYBw7KIpS3CifZYY6CjtJKKthbpKeXLNAdWm8/yRjFXth0m9qsGJR0GonjyBPKSFnaco8dtOqDCLdcidMf6u48ILKRwehOOFlq2UajTdMPBxmLQJd1F2FUOvebOtfADo5YW+B0DTLGwufOXiAgYoZWOPnmeu+QLVBPXuGFXL/IjtcHZNHVaTRB8UN6mDood3gnj+2/rqJDdp11GhN0SRWI0af/yCcyXJDSVOqVU0bT2FPMh4W9Ht6Q0zqeoJ4L9w/JxPEcUZOTCYQvp7sSoxwvjtJhOFxcPLigp0mxEUEyw/zy/RQaHWWslGuZcZPX+Q01grmIsaI22ff218WQqX+4oVyAAYXi1PtOWfaLie07lWkHksKKZQibErop3PPCqo3RXJRRpqbq8r51XtcWC0cLgzin1HVvJWkLyLF1vY/RpyaRcVBjoddpIcl3IaS3G9gIKiSor7Z7+rN+yJzh6YVwrybHelzayqo2SwYfjIAR/AHsDxxQoP785r8ICA/sR8I8SJEzOjFdAz4ilbxr36y2CEFpTbCjyerQ6reP1PMSK/RAjmQMQ0tigLViBbqyOl8ZrOwAUnMXaeya9crVWpIjPQ6AR4ntCkGXgNCSNn8AA6525vsi+mWVTB6d8+vVORjYleN2cy3MdT66pVx6O5+sBfwUiKLY5PCNUxhTpxIB4bH9g9NgeLPlKAWAJxhpHwl5cJ0u1xSpr/QdGOwzYsuV4kss+TIXBol4cjGwdeaxHRhSD79qmA54v3f2TZPCCOmjJL2/d5RtwNro5Gfd4Ctg1mUbh/o9Nv7dkxbJUqx8fqhZ4IVsl2uDrrzX3 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.84.36; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719664378018900 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 39292fb9bc..654f551898 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 Sun Feb 8 13:52:41 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=1763719650; cv=none; d=zohomail.com; s=zohoarc; b=AU2PyLQDN8V2l9qC7UGnYQHFdPf2eYVqgV2Gb/UpTIGlxo4dBsLxXN4qwaw8KjCgdBpPngPU/LkoVJc43Bs10KCyktImHGzxTa4Z7Edh8r7OUjSh1O9ZPaZo1tbBkjkvoE3ZJJ1YrZ6WhzV36CR0wPd0rqGb/fT5UrxIns8LYUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719650; 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=wtcxvFTSbaMjuWwbvanOvh6RbmS7zpwJ+HsSvmiHZ4c=; b=YKjGGq/5huhGsuOGCilIH4ZbaZQTgWDZBdUY36liafNurelZUL65O9dIA8XLSyMPhzxPBciLXku7+lYIgNuYsW22JU3rQFbc+Q+rBK56dkVKXKlg/DjxYWghPWqZW6s3xjoIfbl63K6u7NA6kAx9G6KLtAskYzm6tslpmzxCzj4= 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 1763719650700376.8299084221708; Fri, 21 Nov 2025 02:07:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0a-0005Qh-P8; Fri, 21 Nov 2025 05:04:53 -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 1vMNzm-0004rV-SP for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:02 -0500 Received: from p-east3-cluster4-host1-snip4-3.eps.apple.com ([57.103.84.6] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzc-0007xY-Ji for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:59 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 5610D180016B; Fri, 21 Nov 2025 10:03:13 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id B1BF01801104; Fri, 21 Nov 2025 10:03:10 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=wtcxvFTSbaMjuWwbvanOvh6RbmS7zpwJ+HsSvmiHZ4c=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=PvP9v2eHcgnU8Mx5CdCLHUYLIIAr5ppx+RE30H0b9YDbCw49JsG/B9tqFpGzjIF5wJZklJU22/kwbc93PbqZhqGVGOVk7WQ7m7kmx0K8yvX0vGAg65EjTWD4YzhrB9rnfpsws23ktUEh/udomJmp3ILa2tIbYL8cANlX4pMftV9T8KnCb9GXZITpHINVWhGhg2NbQW0B2RAnHIwaVl26Didb9wyCbdJ84O1aXiUizqKDPz+yx9rMazrzcOmfBgE34v+P/rGwaLVvt934T68KPhK74lrWJwyBccvCCKjLrYo9Ns6EaPelxP0TkYSqs2GUC9QEXobzbWl9Ax++ohZw+w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 16/28] hw/arm: virt: cleanly fail on attempt to use the platform vGIC together with ITS Date: Fri, 21 Nov 2025 11:02:28 +0100 Message-ID: <20251121100240.89117-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX1f/BXqKCrb5E ZRVS0O+BCXqOqLpOon7xZRdYev4DXuZAGTUcLzeL4ZFGfd3wa5GJpvEaZ1voG6bCZ0uKiGxVrGJ 0RypyUy4VtLa3QDfwrNIPrSuWp2yfqvqSHqptcVWtYJAOOfRUDk7x1sd9Tl//HHyJcr6WCx+fAj vmj2hBCZ5DoFhHbltAl9reJQtPJs3BbgdI97sNvxkDx07mXhoVxzKnjKIg1nNafUQZaKXCMdVmW ozyxFzq4nRrrFjmW6gMCYJF49M6EjzLUGo7KuhEz3mqOOMaYSB+at3Zh/Vl36KtT2iKRm1M0/p6 cbY6z80snj9UGUu8ZKI X-Authority-Info: v=2.4 cv=WbkBqkhX c=1 sm=1 tr=0 ts=692038e3 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=065Y4zqepXN3nrMe:21 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=tHnZtBUoIiMOMUCmYmkA:9 X-Proofpoint-GUID: QfpOWxABjlFxI38SroaF_8vJuqaTKR2M X-Proofpoint-ORIG-GUID: QfpOWxABjlFxI38SroaF_8vJuqaTKR2M 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 mlxlogscore=899 bulkscore=0 clxscore=1030 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABHFcz9isLBLuc7YemWrdDiEvEPSkPnMNJKJSHe6Bacv0iOrq6opDscD0MhoGlAYXyb4KjRz2ZTiIeW1h2hKp603JzchUrvtenoZnilK9DV+ryALU0K+ETpNz+9X/ZVVp1Gk/TH0DJywM1zPmamUrch7wpEhD7plnztKfMNT6AwriNmud6TWx4QQa+11EsQv7LcGohNBGvUEnWwOMBNNY4XYRLvBucKKdmF4kS+dOSHeEdvgHC7BVL+3uJFNAUk5ZkT8Pk/DK0soSFSoEZGLKgElfdKxzQn1Ar0lFw0v7ZBClqtvBa7pLyfC+pPA0z6IL482LGyA8Ziy+lznpJMW8OC66492brS1RLTatjl18wYJiy52QHsEUv5z+qFecAByxDpXp6IeZ6iEqvi6emYnqxr5U50bi2mRdeY01AXWATYbLfiieajsGtPdoXAqLIBNbIUOPt2QZGGU2YOoXxHuhKO5qFkm9nulgeRnhB8GOETzajnohVkp0DZ3j1Kurq4H6XKrrDOPadE5ZCZdaJNAsRjRtOwHBA9tq8eF/ogpYpMNjSXnn8Acl7SHTk+6ZshhtwgHoe4QQwTCCAtJ19sL1LPWkIzwc6RHuCqeu3qyAojFIxMOEkwH2Ddv1fAVSutwdSCo/O4+pyf8/QKdeZhwtVBl54OyVePtUCOZQPzCiEBQ0jBlT3mIJ4MaWPXjAU5Avdmb0XQ4nxAUzpEt8Eebnjw1f6woECZb3PbxRd2OwwIx7TeEk= 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.84.6; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719652631018900 Content-Type: text/plain; charset="utf-8" Switch its to a tristate. Windows Hypervisor Platform's vGIC doesn't support ITS. Deal with this by reporting to the user and exiting. Regular configuration: GICv3 + ITS New default configuration with WHPX: GICv3 with GICv2m And its=3Doff explicitly for the newest machine version: GICv3 + GICv2m Signed-off-by: Mohamed Mediouni --- hw/arm/virt-acpi-build.c | 15 +++++++------ hw/arm/virt.c | 46 +++++++++++++++++++++++++++++++--------- include/hw/arm/virt.h | 4 +++- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index e2062f5d21..c8ac58b64e 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,8 @@ build_madt(GArray *table_data, BIOSLinker *linker, Virt= MachineState *vms) } } =20 - if (!(vms->gic_version !=3D VIRT_GIC_VERSION_2 && vms->its) && !vms->n= o_gicv3_with_gicv2m) { + 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 /* 5.2.12.16 GIC MSI Frame Structure */ diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9817299975..ddc6d4d3b1 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -738,7 +738,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 @@ -747,6 +747,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), @@ -958,7 +967,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); @@ -2702,18 +2711,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) @@ -3430,8 +3455,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"); @@ -3491,8 +3517,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 3ff83aaabe..abacc366bf 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 Sun Feb 8 13:52:41 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=1763719650; cv=none; d=zohomail.com; s=zohoarc; b=Mkxgempsiphb3zj/lbo4pVcefwh/jQfg1CsPVCndl+s434Dw/T7QIL0+1rl18usSpx5yEQccnDDbMx1Y6NrPwR/F6rRlmMMVhqleMXl9RKGnolv8ojci2DKNvKYZt49yrE09hqyRZMBMTXLPbed0yEiA+R1zfUPpQtRRTLNLc24= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719650; 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=eNe/xmqtSm1mP0ijoJkzN2BZx4hfdgPJK0YFfGMFMLA=; b=kx/wvA5mlTTJIFekhdY21f/X9nJTrQ5KzNFjma+2Mm3rjzrVOcvUvKmP3wxulWGDmRYSQFRX/5fpeAU+lHg0qtJnUAWn0kZJNzxGstGP9PYb0orvQ6lFjBN3St+ZedtcHIfM8/3fmubf43+AE2aEU8lIvbOnwNV57fnmBodqHhY= 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 1763719650700392.55504681251284; Fri, 21 Nov 2025 02:07:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0k-0005T9-O2; Fri, 21 Nov 2025 05: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 1vMNzl-0004rh-VT for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:03 -0500 Received: from p-east3-cluster4-host3-snip4-1.eps.apple.com ([57.103.84.24] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzd-0007xd-OD for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:03:59 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 86D5218010FE; Fri, 21 Nov 2025 10:03:14 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 5E9591800143; Fri, 21 Nov 2025 10:03:12 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=eNe/xmqtSm1mP0ijoJkzN2BZx4hfdgPJK0YFfGMFMLA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DF1hQALzoWQl5GfN6cexTr+08LL36siT7f3D1AHlzMic3RkNqeKDk/94vouFBAk5BpnUtmLZTLwn673Z3U/ZJ5BDlaVkDSjT82wuxylYGKzQsGweWyJyrJ3fGmi7QX9TZxpLUy1r3FeuZSziEjum9lmlVgpqbWQe7oLXaJM4ryq+tw1TrdYXMzSI/GlYZFHvPL1Ce/UDSmPcQCikZGTSkszb07MpOMiMY7HWQcO7E4yRdf2+JVA30RGaCxYtkyDoOr02DdaZt93yjUwTSx1MN6Aw0QNr7gOPKnlDJ3DX6pxEWMGyXY423m72cZMfH7jxpnZa74AWIHKSlAMGHrKBiQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 17/28] hw: arm: virt: rework MSI-X configuration Date: Fri, 21 Nov 2025 11:02:29 +0100 Message-ID: <20251121100240.89117-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=N6wk1m9B c=1 sm=1 tr=0 ts=692038e3 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=IPYOmMg1pR9sqvhpA7gA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX7/AtHFvPVxUA ci8eGalDVYGrBhtDKb03bFq4mXr3efzwa4yHY5WokviusFAciihNXqIHDD6NJg2RBNrnQ/aY5c5 bMx5Yw07AxboQ483tMgGZ12UNArPeBfh0M6MecTWsRqM6akT3aoBEkMDevZrc2OohQahq5otOH5 zZw2+tgzCpnqq2fjlwQahyZjRSqb6Neswb/Fb6RDNVZ60p0beIPYS64kBRcH7BY/8Sv5wCt3gfy f4NYbfJROSFSHDfvD2p1ksVPBvwjw7AWPDomMh2oSLYkKHc1nymYSHkmRZMSmclSydGUUZGO44h IjD1kV5R9natR8wmU9g X-Proofpoint-GUID: UbdcWihXfV80_F3-8GL-V0cExGidavPJ X-Proofpoint-ORIG-GUID: UbdcWihXfV80_F3-8GL-V0cExGidavPJ 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=878 clxscore=1030 suspectscore=0 malwarescore=0 phishscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABzPVe/yTJuxkHy92uPQkY1r7Wyn9OQvNF9eVxOE0Wu5NvSGf+H4fYoT/8/xXSLYeq7PzEsLHIiIo9/sKdxDBoHpWmmFdy4s3JsGzMK5WH0O6XzhdFJ26kCpkkL+DEbVxwEz60e0DBwB/DONQUz/MMG1P1fZ2y0S2IUIHFaFgt+eU5T3VJtNZjy9vbyY8v2EhxBfXoZrkzRqQWWwzWAvavBUQwmi77oZPj+JqyuR4Fn/otZQrjb7uaoTFxHs5ii18qTv+ILQSCopV2upDXQfyXXH+7tIKK+tI/Zn2Cgf9INl2bE1Pw5wq2kDNsZR15S1hstFYrzxTsLZdfqR8G5uWYdjwNfMZMX5Zsy7h1Pi+6RePMQFTPpkmXngD0j4nNSoyJpEzVfN5li1DVeIfvgytDYQw7k4j0ctk5J4wIHCgvWWaz5atPrn5RDcOTdk0m+goxAoxLn3/Gjx3rN+yiGAtoYFUrHy+T+679lalcObI9Xf7ZiAuOW22OrHI9KruDfqkW1bXFRVzkeMFg3eUG4+hEPdOMIfxOrRbacl1LrVBfgUkAB2CHLzSz7pc8j4IxXkZ+dOduh+s1My7qMNVYUPGgX8HZ8pkOaBnpHS2YTodA/sOfw/1FjUUucbsHH8oT9oLL3fXgYoieZWQN5CpiAssOFhSeSngAfPlFXlKyvKKDv8LZAGzLoaRCHJdlFxDf56q5kkanxvCG+1k+wjDM1odhN9vp2BtGOA== 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.84.24; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719652637018900 Content-Type: text/plain; charset="utf-8" Introduce a -M msi=3D argument to be able to control MSI-X support independ= ently from ITS, as part of supporting GICv3 + GICv2m platforms. Remove vms->its as it's no longer needed after that change. Signed-off-by: Mohamed Mediouni --- hw/arm/virt-acpi-build.c | 3 +- hw/arm/virt.c | 111 +++++++++++++++++++++++++++++++-------- include/hw/arm/virt.h | 4 +- 3 files changed, 94 insertions(+), 24 deletions(-) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index c8ac58b64e..15e6239e5f 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 ddc6d4d3b1..7b776187f8 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -967,12 +967,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 @@ -2713,32 +2713,94 @@ 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) { - return false; + switch (vms->msi_controller) { + case VIRT_MSI_CTRL_NONE: + return false; + 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; } - if (vms->its =3D=3D ON_OFF_AUTO_AUTO) { - if (whpx_enabled()) { +} + +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); } - return true; } =20 -static void virt_get_its(Object *obj, Visitor *v, const char *name, - void *opaque, Error **errp) +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) { VirtMachineState *vms =3D VIRT_MACHINE(obj); =20 - visit_type_OnOffAuto(v, name, &vms->its, errp); + if (!strcmp(value, "auto")) { + vms->msi_controller =3D VIRT_MSI_CTRL_AUTO; /* Will be overriden l= ater */ + } else if (!strcmp(value, "its")) { + vms->msi_controller =3D VIRT_MSI_CTRL_ITS; + } else if (!strcmp(value, "gicv2m")) { + vms->msi_controller =3D VIRT_MSI_CTRL_GICV2M; + } else if (!strcmp(value, "none")) { + vms->msi_controller =3D VIRT_MSI_CTRL_NONE; + } else { + error_setg(errp, "Invalid msi value"); + error_append_hint(errp, "Valid values are auto, gicv2m, its, off\n= "); + } +} + +static bool virt_get_its(Object *obj, Error **errp) +{ + VirtMachineState *vms =3D VIRT_MACHINE(obj); + + 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) @@ -3065,6 +3127,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, @@ -3455,13 +3519,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); @@ -3518,7 +3587,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 abacc366bf..8d6493ae7f 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 Sun Feb 8 13:52:41 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=1763719841; cv=none; d=zohomail.com; s=zohoarc; b=J5Xpx6MwaAR5PmtZRFyZ3auCrhaohBPRbPx139KkknV4qMa1JxYdBO9J7qxJ0YOMvSSJIgj0SJgEPIfWQYL9T8JWKDEUb/P38ccTzp2PQFQoIM2fY72xbbYmiPR6cGKzlxrYaviUxO0zZKVZxG0zqraiLWDfE6gMQdI2FOO+T/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719841; 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=hHqWKswAAt+3frWsas47NH9gPJrZtbs2m+TXuJ34Bpw=; b=bsqUP4nS08KlxsVj/cyaTlg8XmrgywbBvSbBiJy2ZFEbi29RGPGcZZb1YD6tFM/Lk6oWfELygNFfZRlwau7E+JTyn/DOwnRPeX1o/yBk4qzYq7HJT7an54m7o4tf007018gCqYcCELCZGiiseRpz5i5je2TVxzdUn4ZXnOWQ2NU= 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 1763719841849696.8299007389489; Fri, 21 Nov 2025 02:10:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0p-0005Y6-F1; Fri, 21 Nov 2025 05:05:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzo-0004t7-9s for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:05 -0500 Received: from p-east3-cluster4-host5-snip4-5.eps.apple.com ([57.103.84.48] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzc-0007xc-Qu for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:02 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 1B3AA18006C5; Fri, 21 Nov 2025 10:03:15 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 0634118010FD; Fri, 21 Nov 2025 10:03:13 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=hHqWKswAAt+3frWsas47NH9gPJrZtbs2m+TXuJ34Bpw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Vi0hAxwvqvP0yFXx+lTge725ViolqPr0LLQeKeit4O2b/4Bl1Qxb73sp/Ycr/wBp+wVb/rA7d7/dogCXyzHZKC+rS1ZmHVUnvDTMkP+vXiLm5bSgVX+rlhcY4oHhmXnko6dOF7suVccyaVXr5DKHdROdDVQaQSEHhnTTTcT/8jsoJNT54oz2WfU8CKRZVcHfAAYprlwTf7ZZj7LN245WrUvWVYcMKLKM6ZfDHWTx8+93IZGUx4ec5YUEiLEGJiorWK/xO+/7ZKctaKHjvj6QF3E39tiuFfNgiwgN9AXqH+PXMlOPYujpLk2MMjfgZKkCdLxAzWam1ZHAuI+xagk4TA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 18/28] hw: arm: virt-acpi-build: add hack Date: Fri, 21 Nov 2025 11:02:30 +0100 Message-ID: <20251121100240.89117-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=d/b4CBjE c=1 sm=1 tr=0 ts=692038e5 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=rhw6ylMp1rZ08I-IW0sA:9 X-Proofpoint-GUID: c3zaQ7lKzUxQq5U_f20nz04kwCxvO-SB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX0Els786mVlNp 7vonJ4Xi5KvagKCiO+57uYR17bTZm8NGsr2dwCUVLt2sMPlQefC42UaawaRZAItpX0BjItz12lf 61/wGYUJcA6bbunZtWQhDvfjhQZLh1cT6NxxmDQU1gh55nFvW9qvCpDkCw186A8L5H7E4huWhNH oqW+a4+xY2UZ3so3CO3XNrRFG0gGWC35prJiFEsUyhSbIZ5Ftff6nTUHzJBRyFIyT632Af7+0pG b7hUr39t0mYWFWLTt0+Ktswy9RFk5YVsLj0BHzpIxefCzSQ1NY0NVj01yWPyYqIPVxz12VGwKsR inl2o0UL8D6oCRJP5sn X-Proofpoint-ORIG-GUID: c3zaQ7lKzUxQq5U_f20nz04kwCxvO-SB 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 mlxscore=0 adultscore=0 suspectscore=0 mlxlogscore=853 spamscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABN1bKBUKJk/P0DHsw3MLBtDgyFDEVg8DsgHYz08ogRmLpbeJ98QJfU30ZEXIKEYgUh4dRPALk5txUcfkxSUITpI9dEE7/1giqFGel+vCDS0KfrItHeN8Qj6hVCaF99Lc9+Cump/tIqChBgpd3xrwr5jVViu+A2uJaM/eWSxJvbUhPKDEw1AiE6/epYqkUx5v6CR5r0A51HySaTyzHQLAI21yIcZgs1xvwLLRWCxGlE3QCVqrqf7K4GyccRXieNWRo3F1S0YbKu30a/O0AxYQah3xgmzY1D9+ZK248KQrNkqEwgkiXOYNcoIMRjKGudMcpl4FMpVfOORFKPHAgaPKzDOpSmrX/w1hKJ+ijWDh0stFTKBmleXPp3PgGaXVrZ/TGrbsez/Jn1dSsR1T78TmiKHifKn84XwNzibIlu/bmKYY52wbJ1pSPwC8zQfcAqRsPjETiIAACFSPRJt681s7Kis4NLojkVkZOJYwcqbu/ObQtGC7SKti1iVMUEU8W7bkydOGqL9w3tasl+F59bcBszBQTqJ8uTouzprqycqZ+1S2zT5zIVaTDukOA0kMKDXtdM2UeaF1TbqWa6sxSzhK4JagRQYXpXiHYAo6Y5sZtIVS96A0RgBN0Tpkc39mqdZiQ38SeGkHkETh1lOYV/dtqLzPSiUmT1iXPZpfYrAtr8Q5OeCvkrMYGQaTH/atDCueo2gZifZ0dn+V/IGBkt2Pcu4UN47OtF2UXo2tX7xs= 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.84.48; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719843428018900 Content-Type: text/plain; charset="utf-8" Looks like in the prior Qemu ACPI table handling, GICv2 configurations had vms->its=3D1... Match that assumption to not make the test suite fail. Probably not merge-w= orthy... And then maybe see what to do for older releases too? Signed-off-by: Mohamed Mediouni --- 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 15e6239e5f..f7309cb06f 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 Sun Feb 8 13:52:41 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=1763719672; cv=none; d=zohomail.com; s=zohoarc; b=GBA4RnWzaI1ZZ8nMX5qpbvnxuLthQyXNgyQn/IBm6bhwStS349WGGUqDvt+rBdGpFlOPYunAo45WqB9SfxabkW7FTxHWoXkbEuK9ksyx7GaVJjVtmk2HEFBoREoLjsdL82f30Wnx36DRIBefX20pR28ehOoN33eavHMQIVSLQpE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719672; 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=XGaKazcthBegM6ovKXstpN3aPPoKWtMb2v4x7eFc63s=; b=dui9GwYJF0Fpf7DufaM1REaFYmo8BPqXqkGF7SsmEZxfJYC8AyJjsUAaOuKJAoKAgcBFrenGst8/+Uu191vXls4y2hD0+oWuP6GP1D2QuuetEXgItI2LfxFm5jp5pl8dt1Xs1Yy8iFqyanPcKLYZUAHRfhAbV3NLXTYJbX54C3E= 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 1763719672771502.57597722983326; Fri, 21 Nov 2025 02:07:52 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO1e-0006fb-6r; Fri, 21 Nov 2025 05:05:58 -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 1vMNzm-0004rw-GI for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:03 -0500 Received: from p-east3-cluster4-host4-snip4-10.eps.apple.com ([57.103.84.43] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzc-0007xi-Or for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:00 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 1FC6218010F4; Fri, 21 Nov 2025 10:03:17 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id A2E92180110E; Fri, 21 Nov 2025 10:03:15 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=XGaKazcthBegM6ovKXstpN3aPPoKWtMb2v4x7eFc63s=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Q/RRVo/4WKrQal1gI1O2DOaR83cpJOQh7m0u4xj1IdYuofN9/wcwpreVgfz7pe0mxhU9266LcdpTgZYd9BuJfrdEnbpo5WYe01JNv+uGpBZ/JukBmmXqN3UBE/QldeYjDbiZdH+jkyYMArraNk7ELTx/OlhqEoMU0SrAG7dDdqv6kOwwV7d9cDWFMtkgBrqsiggP/eBVqYhLxP8AXCxo+LWuFXR7KlZ+ClnRzuX3DuCR95clyAR/Kxm3N6wOe6nXX+6+sTMan1aV/qW2sq9cRP16QGeIlQVXbhByWQ+e/tWD9rhmFqXpIFTkV+Kq0eGCAo8UbWSNX5uEMHpmGO71aA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 19/28] docs: arm: update virt machine model description Date: Fri, 21 Nov 2025 11:02:31 +0100 Message-ID: <20251121100240.89117-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=YP+SCBGx c=1 sm=1 tr=0 ts=692038e7 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=eeEvEDfxYroLKDhJbXEA:9 X-Proofpoint-GUID: nEqZ9mkwkf-TiJfrD0JDNSnlZPb6uHkV X-Proofpoint-ORIG-GUID: nEqZ9mkwkf-TiJfrD0JDNSnlZPb6uHkV X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX2cdDrSTZ+WC4 yIHXYtclPn4pnzpOZvHtCkzAyyM/CH9cbc33dHFWqUvEeysQCKzcklmeVeReXSA67TnCXYaUHVh /KitLaeGtS4Rv/90ju0yz/aQnwLUixrM/YV3G71qHuTXi4SYdZXxQhXDrsftkHABseFhDnQXzcu gt0FLXYYNuYkPvpHa3p1RFR1gvSXqQ0Fq5SDj2TpKo752IubOP+F+lsuT/W4bVLA2IJwLq3i6o7 4S4Au1gHr6aN0GRk72uawwl5Wcbx9rMYjKrLhKrdB4a33SWd8DGD6DP5cTKRGeryv+bSo2j7Tsi f8/2rfQe2dI9VIMeAXN 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 bulkscore=0 clxscore=1030 phishscore=0 mlxlogscore=984 spamscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABTVdfod3N+vXlmaYnxxll2TTjkO8HLAfslF0Vc/L3WBKU9tW9u2z32Ws7S/ROIAI9m0kmXtKm541vZPiAhRTztNsUWoiMrC0wgMxk1hkGnicw4agduZpbdgeX7zI8qTLDEhSwZ5aWckTn9y/ssyTsBSKLNX/QaVaBFIbYc2LvLcBEqI30Jgb5WKGYB6CYKhy3GZt86hbIORT8aiC4Ojsm6eJEsm+6CCdA+m/855UoFr3Xjt/muNXScxo3evHfNMDYPNu3RvNzSeFma/1maWjcAzpa3IM/Cw8Nbn4a4O1+NvcZe2TfU+l0340lgJ0PkzDx3kck5CQGFTpgp8+wBbtRkKwMNgohuuRzzSpFoxOTQUSIO33oeU3ybv6t6P5QHtLcqBuZ5+xw6OZcZ1/o4DmZ3yMCmShFlTQLBvuf4GCF6pe1ELbJjmfTI3JABioqVFxNlJGVG/2QEIf2d+WruF8jAqVdYwSKqblt2h60+4V4YO+odlwAB0YlAd8gNhQX81lZ51zM4gb6HjINOSojqtK3Vrr4tGmmpFs+D2hK8bKbjLah6FjtKS10fkuyJe8XdDsFT/UQ3aLS78F6ElSUzkmV+yAW68RRTB9ymzt6nAEtTn+qpgYVyI81sFyT+yzBEnOyQT6eUHtds7Wyqj8DQOwz+R0h3NMGhsw1QShy8W40ILj28zNPqceorjIEBQ8NqqM0hkDyf6fKOLbTWJQT1YughdvDp4kUMAtksuqKKld7oPRtgZtx6NL5yc4q 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.84.43; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719674375018900 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 --- docs/system/arm/virt.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst index e5570773ba..7d20f136b1 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, a GICv2m is provided by= default instead. + - Before virt-10.2, a GICv2m is not provided when the ITS is disabled. - 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) @@ -168,8 +169,7 @@ gic-version ``4`` if ``virtualization`` is ``on``, but this may change in future) =20 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 Sun Feb 8 13:52:41 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=1763719518; cv=none; d=zohomail.com; s=zohoarc; b=B17isega1KhYjD2lO8CSWj11LaM8iGhV8kT1cKtq5s/BFQ2A7hoplfHEc9sP1mkiWTAVWtnuvrbv5n0XCBZxVuSbK6xanOQsJVgPjwL0Hv2t6wh8MJ5tl1xuhEEnQz/KU0s9kuzYwjKt2zK2pC7EiY9TiWLZ+3D1FTOWye7zZz0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719518; 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=HdcNySpGweTzPL9ffFAnt9u+74TxF46O0nnFvdY4vL8=; b=S45jI4HR3TIn6Xd2qA+A+J5xFdZ5Si9nauJV2nk11DvAEhqCq1yhkUu1YOLfb2qyvavZmOtd6F/98QWFD8DjOsVdw6kg9CGsi3lPKoOyXKXQy+HU3Fbv80jIEt2eWctPvwxp4et81H0JNDOPU7Z/4qxOVZeuUb1uXVJ9ULEyEWM= 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 1763719518827755.1596292426428; Fri, 21 Nov 2025 02:05:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0o-0005Xm-4R; Fri, 21 Nov 2025 05:05: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 1vMNzq-0004tf-JI for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:07 -0500 Received: from p-east3-cluster4-host9-snip4-9.eps.apple.com ([57.103.84.92] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzd-0007xh-QG for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:03 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id ACA891801115; Fri, 21 Nov 2025 10:03:19 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 4B6781800110; Fri, 21 Nov 2025 10:03:17 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=HdcNySpGweTzPL9ffFAnt9u+74TxF46O0nnFvdY4vL8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OIdUxMiRGI4Iv7M8+EQ9jO8EUP8rG5UkcSj3Uv+k4nR3R1coRLAF1oAy6pZNNR5SmHMggBRRjLhB5mPgfL+BdrEUFCPbeipqwM7oVy2PcTyjs7cN1Vgrqd/tTeRn1lSKOUzr+apbjTNSZOgIKGn6tPdYENnuGMWE6XuLgy3vZ4ufzt2bpV982bZWJI3gpA9V/tzNhYMiBSkFB4GCcrWKtqH0IX+hWuHFCEIsbht5PefiHLHSXcUAhTjIY+VgxjLkhEa9QtSl0jzfm6m/o1bY/mw2oI22R+fXPqsK8gkooOd+9uvtv/NgGaZZC+aPspV+lhEiTvZwVRG5hW3GQSERRQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 20/28] whpx: arm64: clamp down IPA size Date: Fri, 21 Nov 2025 11:02:32 +0100 Message-ID: <20251121100240.89117-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX1naiUCPQ/TDL CyEBvkmGnZAOnsXPFFMjMv3fLZqBjVCgCjCuvT7uG2xEFLys8hJ1sB50kAnBsYZIZy+Ap0JmA7D TTjUdAun5w009oD5mmcvQwQTPS2XW4YCvIolyHPRzKxAhksRsqfsE2G73MBObYqyBhe+xSBMsXa Ue2AhSPHxttT9opzQjsIubjEn8Y6NBKNnd+FInQsw89gEealIJqjW98eR7f/MgvQV3EMyFw9g40 LzcnNBxumLze7bHlLAD7hqpSMG3p3i4rOKYqWy/lRYc1UlLkMelivnr5xwLyIuKPLCMxUHTe0if THopiE/53r1ONi9mOWE X-Proofpoint-GUID: Se7xQy1_xM7SlFdcEoQxmyGRXkHK4kWc X-Authority-Info: v=2.4 cv=K9ov3iWI c=1 sm=1 tr=0 ts=692038e8 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=wAo57kR77d7e8uaIccUA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: Se7xQy1_xM7SlFdcEoQxmyGRXkHK4kWc 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 phishscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB2AnJpGxBl2kYp6YMS1VwT1Kr2j8hGk2xkeJUdIIvaNI/63Ul7/dC+ATtJyEw5s+cSMPpe1ywFzk9Gb+cZtH19E9EjGpRoQQnOxlEBBSgjsIG7hwcpKYg7wiCENK6gW5PlPzKOvNSasdActE//rp9+k8Qj1L45jGAN9YXG3w9onUVOJceToo/HV5RMe615gPVzAylDRkwK9m0a990ohjUvOvbggd3oJfftwOzkEdu96yV/QFUXQkaJxKfpzBH27vEGvJDbTx+DaTFsjrC3jaQjh+9UrToBZ8yy5HhzzTa3W2MVSBgQLMxpby/idmLAgVIiYO3geKj86TF5ltSc/Ibzz1wF1cLKArPs9AdQ6q659dwqGMSRCveMgvJ/kJi78o2Zfl0C0e1DQkrzsSIRN3NUwAmKJ3AippXm05aS4M8PiMpJkhl+mytmfiME1ZXk75/MMcr1IyvyoSVwCn5K2yPIuQ/s9j1pUfrt8ecShiLFl2fC1Qp7almbV6BEFNzw/k2AM9E49dSAZ9oFjFop55Tnr4dk4AfYc/qB3DJ4AvSKU5xHEcPWKFOnjY3KnrK65HsW7NStAgAObIdBGlF0TMdvU3bF3B+nRqOFmBbW/zxj/GmzWBwFVC47zFZaBnNP97+X9Sm6BMSZGq+UmQ7RjCyp/+CsNIWSqfn1pL3LS7ZbLceiIwc8heZiIfyQaHkJ9Z4P9pZdUFHSvwe2SV2ncnV1lNs9t5vd7Y/gxr3sgFGxjT7vw5qC+ry 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.84.92; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719521307018900 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/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 7b776187f8..95383d7e1f 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -72,6 +72,7 @@ #include "hw/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" @@ -3314,6 +3315,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); @@ -3413,6 +3444,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/boards.h b/include/hw/boards.h index a48ed4f86a..fb2c531018 100644 --- a/include/hw/boards.h +++ b/include/hw/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 4eff030c48..efbb3ee3b5 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 Sun Feb 8 13:52:41 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=1763719667; cv=none; d=zohomail.com; s=zohoarc; b=hbJHVt454F1f6I1SQXoFUBeSNw90A8cdPUlmBp6va1QOCWmTi2CoTzPD4ImBXlgopr9Zy4UTTB0XMopf0a2YoMlYAOo1rjbQ4eg5xFqeGBHsW8yF61OnWRF93VLOiDmYfG3j2xHBRyfhIv5NIxSt1NmcPaEfskiqIaClcLP5DKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719667; 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=UhlGkD/vMDZ+9FaxMjsqWZsHIsDVxF0oEAGhaQttsUo=; b=X8MbDk5MsUO5xrSsWf3rT5Jl4lm4rQ2Ac2+UQ/rQ16ophx51QBICk1rGYgMxuKNWH7uBthzMOzB7jpF2wub7IHs1jz4sje/znT/c7a/D2o3QGfxIDWhSddHlIRR758q9dPN7hxwDuVXtQbCFq0esq5Yfd9ba/R0IbGXSS1JlH74= 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 1763719667902642.414960937384; Fri, 21 Nov 2025 02: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 1vMO0k-0005SM-5f; Fri, 21 Nov 2025 05: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 1vMNzq-0004tr-3Y for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:07 -0500 Received: from p-east3-cluster4-host5-snip4-7.eps.apple.com ([57.103.84.50] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzf-0007yK-2H for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:03 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 3C9C618010EA; Fri, 21 Nov 2025 10:03:21 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 101A618010D6; Fri, 21 Nov 2025 10:03:18 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=UhlGkD/vMDZ+9FaxMjsqWZsHIsDVxF0oEAGhaQttsUo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=GCmfr+J4MtDsbBpL/qtXJh1j+I+XzpfIlbiVDu0PqrI5cFCfCIrfLngNJLGd5SqCLI2BvUEs8FMTGu+zqY50roMaGjFJwOa5+ZM9hweeyM0n05bKOAIWcVsjj/tvisCnB9lpMFwjTP/QTSXj009DMuOgIwTYcLwWspnb8XldB+5IQZ6ldU8uwEEJMWLaxKFyoN6lRmXwSCC4H+MwVD/NfVrYwmm5EwDqZcTzyNWS3wTyOp5iXJ6anvGv95cAVKzUCPOmSxYfG7qh/go5Tp+LMr+hS/wJzzE3TXkQ8fn8uqtz/DLJB9BfEQXsG/BRmzV/F1ZJrtkAOuW2jQFOP+S8Vw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 21/28] hw/arm, accel/hvf, whpx: unify get_physical_address_range between WHPX and HVF Date: Fri, 21 Nov 2025 11:02:33 +0100 Message-ID: <20251121100240.89117-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=bulBxUai c=1 sm=1 tr=0 ts=692038ea cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=y_xeX3lDDypgNefUzf0A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 7pCEa-HVX43WgdzIMXs1w-2UE9rJkAqK X-Proofpoint-ORIG-GUID: 7pCEa-HVX43WgdzIMXs1w-2UE9rJkAqK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX93jKXTLF5CVS +/GMzQzANtiTEIk9yp/AjiQoy7JEywKfn/i46TOu+1ISbyB15/qdpz+c1OyiByl+5VBrizlogv4 DK6NjTyQSV2Syjl1c3IXi64TkgAKjYcEvjLWqDqORPiD8dB4YX2nnlJBt3blmh/SeVaYM2JfjOO mqaC06MKHn5UsbwhYFm1m5xtSRGeRdqKLoOkd9PPnKhxDIMZDR7vyM62A4fNA48UIiWFMxEK3a+ FnYnIVCv7XyXz52QdO+NlUWmxdcs2zpPIbrWUpIGp96XzDary1UMoUhW09OrONJlY1fCMCpv96I sA5G7koTzovfKMQq0Ak 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 clxscore=1030 adultscore=0 malwarescore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABzNa/c4Olpj3+JyXB6Olj6r9AJ2uRlu8B1gKXC+LMybvX7AjMqsseFhFq6unLf731jKtWIvsSLlUK0H1c2JqWmdeFd1QJS/O4kqMs5AKl32xTTURaXP70rn/FyBkDh4E/ixX0xqO5QxCePyJqmFMcPilWrOyfBNBECk3e+c6q9lHWYEQDAWg8UqEl70vFbirX1sDQdy/CM2FFkm74Jz2lZG51sVthgUEtCaiTiHaiojZkEIzZo5p9wrt8qqirswmdmaWayOm0OSR+FDOW9kLTdG2wrGVAhWJLon1og3sywtrShQRzwrOIDne+4wyDoix0cTOdsVGvIZH03w2D4ZGFe6DxFZqkIc2wnR1yfTyZ6MvSbRnL8rMxjlujswVESqfp2YUcIKgeT/eqn69uiP7GnoMdW0WC0QAB3/O733wNBz8s0q7LYsV/0apVTYQUdPNPKihyPumN+Vf3CSUSLR5MaMgpuMGiqoo74q4s+S/IFv8Vyd6OWWXYMOvEk3SFm+F9TG/e98kgSZYr5ppgKr5mjX+WocAz6zleH39nyW06x2qVDTD/SeoiB7W9Kr9qzMSR/tzZ0uYqHKn3YM0QDsQqSBtv5y8p//hLBYe/XEGJjRGQgypPLmAlkHSWrJ0oVE4uOMVetgTGTFRyWNdtQRhI0hbYWaQ3CxUWdmUFrH6Os1+Vf5m+4XOJELJdFKPQ5ZNrdqZ8Yx4yOMiPOY6Ms4ACybfAFeU+dBvwfFkyGq6jZ5t/FZ24A/FfXI7xJfS6awTBhTu93FLt4bfKXEeMhOZP/nltFptMEXt/9sre 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.84.50; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719668614018900 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/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 0a4b498e83..8229ad8640 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/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 95383d7e1f..3dc44c46a8 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -3315,43 +3315,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 @@ -3360,7 +3328,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) { @@ -3443,8 +3411,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/boards.h b/include/hw/boards.h index fb2c531018..fa5f71471d 100644 --- a/include/hw/boards.h +++ b/include/hw/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 de1e8fb8a0..5d9f04d628 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 efbb3ee3b5..27938cbaca 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 16febbac48..54181ccb42 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 Sun Feb 8 13:52:41 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=1763719600; cv=none; d=zohomail.com; s=zohoarc; b=B9DmbBM4GCmcWU+SUcmxICTV9rYlWKhen+edxGfGFUvHZiADUHr9ftfn8cBH2kkKYQG6S+xj0b9XoxoQmNpBikUebWUy10xVAy+xIquA4qYhHPLtzRXmz3nyydfWUEud3AYRy/qy/qSgK+wQ7Megb7+1ADC+bF8dx8wWzTbt1RQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719600; 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=YT96KKm/il5ALIsiAb1QgG4GPd2dd3wnPeypFX0vgPg=; b=P4KPM1h/8qTvU+MnTZ2t+oniTbxSconD0TRU3LiRQPBO1x1JudlB4vAFqyaO4F/FBocxRpLrm21SpMeUkZ/sOixFVJozryQDnm4uDUrPwO5AQfZH3CqPfvahiqIkrNuAVQ4DO7hxdBf2x8SqJqdZl/OxPuQHnPM5iOvDVnvfR/g= 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 1763719600435167.76762797425988; Fri, 21 Nov 2025 02:06:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO0x-0005ZO-E6; Fri, 21 Nov 2025 05:05:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzr-0004uH-QY for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:07 -0500 Received: from p-east3-cluster4-host5-snip4-7.eps.apple.com ([57.103.84.50] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzf-0007yL-2H for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:04 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 1FA2E1800110; Fri, 21 Nov 2025 10:03:22 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id C47691800133; Fri, 21 Nov 2025 10:03:20 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=YT96KKm/il5ALIsiAb1QgG4GPd2dd3wnPeypFX0vgPg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Ag1AU5jfE+A5dKvojzkNzkhzei7+1LuIgSzolNAfgU/DxIu/LgpsB0hNK1ke/o3RXZ7zKWPp1uTEy2KHZa04F+Kwnf0Z/tsfte14lOF4JooVNZ6R6e42fMVgpiP0O8rnEfvL56tQ8cG3jQ4nLHnqGx+k0M11L1iGGvaGVw3ZnvQL1zY+5Ol6GLDX1hLNQhNNa/VGw88AXroLLU7ovUXUtX44DIZWxfG2rv+5sP217XJCKqM5S/5HGPpmfiRnmE7j9m/+YQ5PRXW4uwqi3UEOdIQCH1CcWwngIbmHoT0bRLlAVj52fsduM7GHEIFMvaOTtCjzY7ITBMrQtzDrUVspoA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 22/28] whpx: arm64: implement -cpu host Date: Fri, 21 Nov 2025 11:02:34 +0100 Message-ID: <20251121100240.89117-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=P4c3RyAu c=1 sm=1 tr=0 ts=692038ec cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=L6Cw-x9jAAAA:20 a=KKAkSRfTAAAA:8 a=hGuVB2XOhXFvD5HHq_UA:9 a=cvBusfyB2V15izCimMoJ:22 a=bA3UWDv6hWIuX7UZL3qL:22 X-Proofpoint-ORIG-GUID: vfNYmWzPqTGmv5VYKeIfHAWYejwlBxIC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX+U9f5D0rWP8h vjijVSZxgcXCSewK3jDek+tlhDm7S1U2a6kbAdaMtJ/97V+DBUbsVy+cfhdB5AUps3Qzv4Q1csX 6oDPkeOdFqNudwEral9wGRRBF90trY+6AwYHnbD3PGKKUZ+p4mojmZTb80kPhV8W4T3XElgRVv6 OXZLWB5SsVXc5PArUZAdcrJOMdi8XjdgOSPzY1iYsm48yiy2QjMaB9tOoLxwQdg/zK5qZ/RQaxk Q7u0tlzYFCXkqeDelEmhP7Bbm0BAc1FgkL9y2RCuJhBd3Z6G0K6/u/jEUgiF7P1VqZ1qJCCrzal yRG/1hC13QvHWa/RpA4 X-Proofpoint-GUID: vfNYmWzPqTGmv5VYKeIfHAWYejwlBxIC 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 mlxscore=0 clxscore=1030 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABavgLKLOvoH89/KjYZlqRah7W/7kr0oD5HYGXAQgAKCG7SX5HgFBpiMPUDGXybY3qZ9XU/ZzbXFJah7m5WAAe6/9KXkFdxHBtiu3o0Ghm1P24buUi6iLH//VNjLul7Sa9iVHUpnvZMFAlkV8oY2jTHKdRYapCmG5UrlvHNTXYQK70tuYjvfQdYPLHuE39AgFTJIyidjVevcOCjy4H6IaK/+BMNsC0ihm8k2SQ8LIRPu4t/92Mi0O7QEidm8c8BUWjSCP8twBkOzKCNLRLAJb89Ub4ekeqS2jDTGB3NUxggm/QLL+qgn46q3iwiZwW/l8/JEp0/eIXuSumxRvqIKah+3bIYZyp5vZTjD11OlG9nPFvdTOT+gPaHjbYv7vQUPGr7wEuREEx4sByplLhrMeEPVIoiRCeg03Ey1RUTy+RDlN00551LajPDa2U6goPu7bwZUDzHMPoExKlvKK2AWLWLp/KmerL2a2Ayi16/Jfof9lEEAdFP83835bCpPRegapJHd9NHtOyhmcQTTK7VuT6g/7TYoGIE9pHLm2/abKjNOmMzRGIWgeWVawoieFd6EVR5e86QWAGxHS8M6ZYSe7Fp1HK2/bBfGKkUGM5LdAiwj6FnEM2YY6HsO30qSi0V5b9Ihri/hUnlop2ebJJv5QFt1HSCs1sSNRrrf+PxsR9ObitbcUA63WcVK2u2TLqy6MRSvr6GwxcRiX+7JbxXKTTpmR4eSPRnJo3Hh48Hv9G73NC9n1upFj/rcfVYBkFLKxX2rNcKO10VNVEcw== 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.84.50; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719603092018900 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 ae84d8e420..32b6dcbcd7 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/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 27938cbaca..f8a8c06d2f 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 Sun Feb 8 13:52:41 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=1763719615; cv=none; d=zohomail.com; s=zohoarc; b=ktrPfqOJZVrwNM70VRCHM5cKw6kQs7cP/eO/AR69/8J5oLn6MQJ0fvAJAw5nPNKqZxY7jwEFjobgUPEj+lsK8WAzbHOqaSwxPybt2fFNyxqsRjjZJE5lznp89OHH7mcGIbnwcvmWVQsV7atX1i7AQ68+0HRdae/WFUvcLMa34CA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719615; 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=NISfv35M9InW+WYqdgS1TefB8mG3dHrbDfxOShpOZkM=; b=DZzwcNZPMrOs1pqKukjsM2VeLSA1cHwD8BxG4dG2ejQxujZd7ZOM4Ia9XTwVTas7cSIcPzfwP98m5pIEN4gE5pBHfJoU2XXaKN4ZPvgqQt+cFa6NChRp064wT37jgr2pRfE/wU1T56wiQiDTVqpA/pr3/s/oelqvvBHz/KmmJkI= 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 1763719615361846.6969711169199; Fri, 21 Nov 2025 02:06:55 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO1n-0006hp-K7; Fri, 21 Nov 2025 05:06:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzt-0004uj-Gf for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:09 -0500 Received: from p-east3-cluster4-host10-snip4-7.eps.apple.com ([57.103.84.100] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzg-0007yV-I3 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:06 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id E8DA41800115; Fri, 21 Nov 2025 10:03:24 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 84C48180110B; Fri, 21 Nov 2025 10:03:22 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=NISfv35M9InW+WYqdgS1TefB8mG3dHrbDfxOShpOZkM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ZEVEEChHhUa1oRvvXfqh/oImiQ19Leyl6MFF++CMqWaYLv+dnnt6HjEGi4WSwZgbiv70fTnSXdxUOiFzMTRDrDJNMxSTbUm3SX6EgM31zotQGIFZlMC85uF81jzyN/cr+DvH0qlI81xTmnRv8kZZvAGdiMoF1n6M3eqedxgtBGlVacpJdvb3XhJraTW2ulM1hlfOhkPyPb90fgtep2ehnBHPve6reN5HLu+IbKc7w44GtICG94AatRNJuL8KW5azwDwnh/NggD5e99Y9QJqO6VOLN/0mW58pZLSG9GbiKdtEpZ4qPg6rkemXqU+17ffkl/ruTHu007Z1uIGkHqsS+g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 23/28] target/arm: whpx: instantiate GIC early Date: Fri, 21 Nov 2025 11:02:35 +0100 Message-ID: <20251121100240.89117-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX3xvwN7kcz535 21uIHm7+M0uxGrpmFM0jdKtkT/P5N4tHkwD50+tPnplWeUvNwCzCtOweX2M9DMkakQNe7dOl6RV lrUsYXSjKjc7dWgHqRNDMNv8kiweimq28TQ/KG4chA2I1/uznLeZekylzFjaVMHFI5l8CIe3ro8 dIVjKBhxxwShkit9Mg6ohYEuxWyYZwGB+5UIRWdR5d5Or1EjRV7tmddA2CwpNPT+7Lgz0SFnjxt ljUI2EsBCQTzX4haar+rfD5o+nWMObZwr1xrvC3NNo4wE1NS8zh+8IbDi8R8O1OtQOKBJGh9DcE CSbh6QHxQ/pwQsc7Oqe X-Authority-Info: v=2.4 cv=Wr4m8Nfv c=1 sm=1 tr=0 ts=692038ee cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=EYz79TNVRTG0waESW9UA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 32r5HhJO4S2EoCxIfCzorBLQ1lNpfQS4 X-Proofpoint-ORIG-GUID: 32r5HhJO4S2EoCxIfCzorBLQ1lNpfQS4 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 malwarescore=0 clxscore=1030 mlxlogscore=637 phishscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABGHInSqTj8Huo91Lq2b1Ruyqg+d+3X4Dj/oErPOURTSvrB3H1O8Y5QRzlKR+SdpjwvaP1G9h99sC18mWJB1guFUYEgeF2yIGr5K4LoobrVQc23T0T11JV+Ctv/Kd2MaGxBs1Vx+kKx8PLtAQJ4gxzJh6lDVvizkWZY/8fJULYqdvP/Zn7CEAcf3808rd8+Se8yTOsl+7qb5ZkfLc9DLHlyYFi3dF7Sf/PsVxXXSVyT1WfDePzdRO0DElaII7jPonSvN1/TdSXDrNhF/OlpraVEbHi/7vhh3Pn8m8TKr2wGVTe2G3Kzo8tQg5DrvylZPtnd0vnz7AUI/j+R9L7/bB0Q3c1nVNn/hCcbIcjoNQ1sSKqh+hNPwOfIvOgkdwg3tmMm3GrQdcc/dWD6rCYhWQLh34FRUKMRJlWN/iAi6iQQZuwVMDY3lfP7TKcnXU0iFbAtDtcqFmrA6fS2bElDJji0Ian6VK/RA7un9wX0bBFSiATcnbhDndG6uyO6U5mzFxX8Jd9gdYyKunYcnK01gAwLwJux+6DFRn1XkAi51QZx6K6EXv13rgg91lF+rniy8ZPXimtZnlxu7FXA19tG5bIwKl28VS89gO9H/oEviC1tazzBBsvKLeHzOlXMVqVqn0BPoP2eztqKXnS1FTgcxCenJI+BPMuDivHFxloKCl0uUQWcO8N6W67A3XBnlin24imnqQ9IRha6VG0lq0+AsldaX+jg+e4JvUS3cXJL+35I7dBDekF6BRlEZI= 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.84.100; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719616452018900 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 f8a8c06d2f..5be1abcfc5 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 Sun Feb 8 13:52:41 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=1763719840; cv=none; d=zohomail.com; s=zohoarc; b=b6i911Md5rm+9c+MbO744C7dzBGrmEPmhPlx/Z0rd/j6nUHUDGHk85wqUUEBNnmBcKLu3rVDA4mX14LXs3kGuh+CfkeEYnqO8lSpmOllLU3i+r1J/rrwZrVTz8ZOCcpTNgQfZN9kM6qU4nQX3yyXkaLd4yDgbZ1B7uOoX1yEbmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719840; 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=7ELmogO1rP/Q466oRv7Y0E5YhY0QvblNmMS2WwTWd7k=; b=HU1LSZcUkXfXLJDqaRk2kDlzlSDWjqbPU+PUbHmq8KnsNNxbsCH3m5VLPiWgWK4kx2Dehr3HfyC3XdYrrTxwzRURxsncAFfU1M1kXe0MMjsyymMZQfMzhsSNbAzxs5TaVDKpL6PWY3/o3Iq8bcp/IWc61OA3jC+yIrhFfFFL5DI= 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 1763719840890632.2227982825427; Fri, 21 Nov 2025 02:10:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO22-0006zL-S8; Fri, 21 Nov 2025 05:06:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzw-0004wl-Pc for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:12 -0500 Received: from p-east3-cluster4-host8-snip4-10.eps.apple.com ([57.103.84.83] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzh-0007yq-3z for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:09 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 7D5D71801108; Fri, 21 Nov 2025 10:03:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 48F0D1800143; Fri, 21 Nov 2025 10:03:24 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=7ELmogO1rP/Q466oRv7Y0E5YhY0QvblNmMS2WwTWd7k=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BlolwnY2EYQP42CE8VBnwAfAFHRena9kzy36Gqz3kdnXhf4zfVfr3NsbP4c/e8EVEnrxutbeKDcA6+K6HQ3i1Xg25+zHvSAxe/Sl2Pz5tiQ3/cUjDXeYpJMOQamXcZf3TycWxMD44nG6P9j8qjrbxnWvUBHI5Q8RO8aD0sx0YQGkXUz3rwlMLOIHWuDoamEk/bLkgtKpgmNjHtRR9vwbGGg891nlA+8txo0nUesNAuIYLQA6G8moTgADET9shKIBFTtLq+pk+wnp/4jDXFds4wEt8GI5RQu9YJsMvl0ldAMRGMahPzJcjebC9xce4nzQ3yeqtj673I2vWMDMlUVcYQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 24/28] whpx: arm64: gicv3: add migration blocker Date: Fri, 21 Nov 2025 11:02:36 +0100 Message-ID: <20251121100240.89117-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 2Mpt1Z3AeGDGFjN2Lg_pALNYp4_q5Dee X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX3lkwocf8/8Hm rCWRvflikjq6nemf54D0MhJ858Iz8tf/6b5TOZ+xalNmrO9yxC7I5LzOchJh/7A//GjiHuDOLUX Szx+NYnJf/y+BQpD10zVEwzkWAAkKEpovwI/LqmiFmmNStWEj8C1D7W7g2KB29HBy5xfLbOSk7E I2O5CTD4dUrp6rcOnRETcFPUMkypZJrCIoGfGRfCy1h3D1CS5Kyd4epddDzW1ocyxxLHUWcy3VN KfE3JXh9vL++7oAM2Q2l8OKXpRSTPF+PFe2aerhIi/sq42qMRXfkwbejHqVzILexAlaCTMdbSmz mezlAd9u3fdkGwW9dTb X-Proofpoint-ORIG-GUID: 2Mpt1Z3AeGDGFjN2Lg_pALNYp4_q5Dee X-Authority-Info: v=2.4 cv=HYIZjyE8 c=1 sm=1 tr=0 ts=692038ef cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA: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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 malwarescore=0 mlxscore=0 clxscore=1030 suspectscore=0 spamscore=0 adultscore=0 mlxlogscore=898 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB0RQYXcQvQOMmSXamNAkEWO9lh5nNrHftor8gL3oNxxUPBQwzGQlJbysb+Am+ksMIV578EUzfGwcGm0zr8Jb6u6FrtLJLKbXZrF+CpBzueVx+WtAmiklXWoo2Ajn/HePzamiguoRH9kqjAKtn/9IB0pkefLRbktkSreUKpadCsZNO3b8Fkoc5dcLDfwF1CZo0ORG4JPtusCieYNVWZ2or+gTEpJceLGwziVK6m7K5+vTxc0a7kgf9rRmxJxuR5LP58MWNbnnc13jR6UThprmojerI+DeqsnCcas4WbmmYc5mj4l5twe9Cfdl0flv58QPR0dIZ0FdqKnBYKq/Y6X6w5pbnEMnTyyKMrop5nvfkVkfsz+qz+lUZEF6PobTuc857zCYMkduompkLgD+QmioCwJcJH/eSU8kdu7fcJHvnM5TqIBWSPLXcUtjocrlV40uxeG5wmgpGQuzcgDQGA2fxzMQjWfx3Ga22oM4HGJyaXgouTTWancJE1xlrpWijnshyUyPNxePQuXoPHwJQ/6+04dUdM+GSNThMNsVcM2T7gTaimVGv1JMi5/hPu7Uws+eSgLRQzrJlQJLrqkcejmPHcLcKaORYvmiNuifXR2O2VTsjbuT+u4dIjqpOVUDhvEC2Mu1HKao0PNXzHiAo/5pPnCI/kobewnXtN892yE07NVKCBd36hZ3j1hZnqFCoR0FYFQIdw2kiDMveVyWvsg2wSguItueUBN7e8p43UCNlRFOJSMdtAVVafU36QZSKCdzYWxC5A9JupDFWEmGsy5tuaiJc 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.84.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719843397018900 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 88a05e5901..6ceae78483 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 Sun Feb 8 13:52:41 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=1763719595; cv=none; d=zohomail.com; s=zohoarc; b=inutUTzboykoMHeFf28nMRLcjXJx1gULH7/w4tPCZVQ/Z3U4bxuQ85Vo/KMUVpHTFtK/nxaGinhtkACLErJwt7fpp9HMbfQCtaY26+mhgpbT/tnlE9xu3+NGo2qLub9e2L54orqO/VO8hWyKtWVFaWkLXZbfUCiWiWj6cYtX4o4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719595; 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=vkSMVJ9/I3kIZJy6hP9GjaU6J/uHqykQuo1bKtZa9lA=; b=KfKDppsg98QkzEOT6L+TzoWyjFJXjWNz/cm8fhNlQs1XJHgyL7l5pPjw0+X9bW8p/iBoS8eMbW9upwtGvj+6ATxIQAC2rb+U5Yfad5O2Lv5N1YtjiKBFzkVYOrTE3lBkHguP1Ojsf5XtoEqLdpqv726xVy5F2tHQBUMmiZlZ8Bc= 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 1763719595946872.4643634301846; Fri, 21 Nov 2025 02:06:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO1S-0006ab-RK; Fri, 21 Nov 2025 05:05:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzs-0004ut-Ny for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:09 -0500 Received: from p-east3-cluster4-host7-snip4-10.eps.apple.com ([57.103.84.73] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzf-0007yU-L9 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:06 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 00FFC1801104; Fri, 21 Nov 2025 10:03:27 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 094021801103; Fri, 21 Nov 2025 10:03:25 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=vkSMVJ9/I3kIZJy6hP9GjaU6J/uHqykQuo1bKtZa9lA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Iq8DMmxzJPS6OhGPeOLBYleAB/L3Q+AXeoB6oiyvQI6cQcMjw55QYJI3l/kz9lKPcyLKqa61tB/sAtuVB1fJjjxIly/Gjx6KszThyE1s8bxeD2BjbeaiDhceaN8rbrD6GvwO8YjLuTcdU7VXH+A4mSw2aKdSvFUU6Y5RfJN7MU72xT57Ya/VtATsJJqkt7QN2AFpGWeluaIRkhmVeL/IoDCPVZcH6eGrjj9oFgDb0evrKy9UgM57/fx0DlEq2GCrtU3SK2E2Dped3rIZkPPqRtjB0cKjF4YYMuzRq0y41/bkSG2a4moqbfn23a7Hs45wSFKArZ5QDjsRK0YcpStoYg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 25/28] whpx: enable arm64 builds Date: Fri, 21 Nov 2025 11:02:37 +0100 Message-ID: <20251121100240.89117-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info: v=2.4 cv=bulBxUai c=1 sm=1 tr=0 ts=692038f0 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Ck9h3XeVBPDugYI9Na4A:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: mXuD1E5wAzmFnmkZazhi7cdOA9uBEuOu X-Proofpoint-ORIG-GUID: mXuD1E5wAzmFnmkZazhi7cdOA9uBEuOu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfXzUWoH7Q4ZYMd oavcFhSLORgok+yu2EYkSxTQj/2h002JurVCfApGH6GfB+yfLIJoKDs7Js4fAVqfs92+yCdAYlp GragvbpCNLh31MbYCt+YIm3M/b95o5m8uvkLXKInghdRSRfDDWcUXOg035Ga0w3zXO7KCXZAC3L R34uAgzlPmlufsTq+Ayqh5IkB/LlafnemPfV9ulw6PQ/lTB3z7ILCEeDQPJZsnMEW1c0xJg22yY wCk4QKbhCpjHwctYiNDvYqVYmWVBdXbSxCTqda2supm3XXTI7oVq4+fldjMkhYxO0eeY6iAtzTb kqBXYLnp6lpme29QZJz 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 mlxlogscore=753 phishscore=0 bulkscore=0 clxscore=1030 adultscore=0 malwarescore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABiBE9Ey+iL+we2/Dt7MPDoMqNc7DwU7sgPrOFUwgIAOlTUOQjZjAyWeTP8052gWIseBOdiEU5bKfknh75Ds4CFaQumcvCFOMOMZo+odM8vAI9gVKNGi8akoNMqvZt2cRKe7UsJPIT9rAB+0zT+2lDtMK/WAVErA16tk7MNYtJ7M9XFC+q1abWrexNAa3q5Hx/waYxJRww0aHI1mAgtx/6XBi/xMJj3Wu+GEpZoeM5RbN46jdUqTAHm7b4fzJZMvY99pa8pl5OXpwr6lR937ecFZOj2YTCbbw+sI9eslyf4Nu7gFJUy22vztPjiKLvpiy1xK04VqvxILUyfQuqqVCp4zLFs6/zJxvYaR9itHzkBqKJXNF/1bwajOxGadgaL5hnZXGUfaH5vdOhPmwFjgXttaBuK6kFCG/GjoTnG6rajcmY434/46NY1biYgvEujBn5/P5toh+YIlogSxt+s+apBWM9yIbbafC5bbABUz8YqJt/KsFRo0ABs65UxRXd0fnhxpQ0GRetaHiHdp6cKccLiefWFMJhLtXxq8JBtzOlTHdduXqh/AZCPBHCQeULO62MP2sJeTbxREuQQpZHyNEPs7HhcPjYE03rC5cKjKm1S2pdgEw/jh2+R0NfdcMBRtMEcYVjkwwkN0frdwM/yNo/txrrxxCq8naTd8u2hlsO4Pk2ue3Q8Gracn2UDIKS9P6VQsTyzS4p0dBQ57n47agbb/j6yQ8jbcXz18Gdc+g1YONN 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.84.73; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719600083018900 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 d9293294d8..d7181ed458 100644 --- a/meson.build +++ b/meson.build @@ -325,7 +325,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 { @@ -891,13 +892,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 Sun Feb 8 13:52:41 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=1763719841; cv=none; d=zohomail.com; s=zohoarc; b=T9m7kD3fmH4+NoVzdjvsM7ByfxmSZs/g+ps+S9KxaDGd7tK2R6JYMQhVRlzsRiSrVIPm3l5yElhqshUOKclVKnSeUdFJfUsdJN7uj5Mbfz42Y9Qy5AhGLBEciiJlN5qqaSsmiMTmQ9HehZGXWW/38tq0tOuJNj0189yzD+eMkLY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719841; 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=+amF34IhbuSeUQS/nlRshdL28a+sdYqnHhffWBoeRKo=; b=A2oCkpj7xRTrTFVzzkxDHsYgs0qQnX4RQ4HvzpWVlZEtS9wydCRkSJ+UHtirhNI/24UwvntGLP2ZUtR0ZVk3pI2rekLkT1QhphrgPpZZV6uWWHTZPVFi6a/P/+Ayf9kl0QQKvpwQFDZe1gNJpa3jlMq3xBrNz9QpFGYGmTdQcc0= 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 1763719841024223.2424351870094; Fri, 21 Nov 2025 02:10:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO1t-0006mx-IJ; Fri, 21 Nov 2025 05:06:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzt-0004va-Hl for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:10 -0500 Received: from p-east3-cluster4-host8-snip4-7.eps.apple.com ([57.103.84.80] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzi-0007yr-0f for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:07 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 4DE5F1800138; Fri, 21 Nov 2025 10:03:30 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id BD8AA18006D2; Fri, 21 Nov 2025 10:03:27 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=+amF34IhbuSeUQS/nlRshdL28a+sdYqnHhffWBoeRKo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=bde/EWGfZBlEpF2ri1HYImSGKYus8aT81wo0j8Lpw9TCvSmljUywxV3wRE4+MukZKYCNvqT6o1V4iyjmRHJJh5rHun9/zle721dMf3EIXiss69lvBYwjKMFT8Gm1QRh7QAVjPT3xoFu6ZWfF5a0oJfgJZW9SOvZQXJzP28zrrQHkExbliIYhvNnLpi7H+jNOZhzt+Lr8wit7oaBH4R4hSCMjND3zFmZBQDgVZO5iGdSaYE3duXgH75QlmhdJFjNt6dL7iC6jumdn9su1WRbvcXMLpfqsjRspXTSrNUcTVJB6p7hVUssfDKhO64K3JL+gobhyzsioH5GbRNKOUFtwhg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal , Pierrick Bouvier Subject: [PATCH v11 26/28] whpx: apic: use non-deprecated APIs to control interrupt controller state Date: Fri, 21 Nov 2025 11:02:38 +0100 Message-ID: <20251121100240.89117-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: jr7CUPk9U-fAXK9KuAoKwRJIm8tCjClw X-Authority-Info: v=2.4 cv=aqG/yCZV c=1 sm=1 tr=0 ts=692038f4 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=KKAkSRfTAAAA:8 a=Zj7cAsCNdc2pAJP8fGYA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: jr7CUPk9U-fAXK9KuAoKwRJIm8tCjClw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX7ggd+BACFi+0 kc6sA0qxCa1Qmju66PJXNIevuVC27TxpzyJaBxZGag9XnA1yOT9jaMAJZBZl/PFx8B7RHo4hfHf ykvYFrNvwT1VfzZWEwbAhPoFijkiRZLY/6GtL1qqFKL4Ubfus/eYVX/lJP2jETGob+nzjAnlBY7 Avm8g+Yuibuu2yyg1PtWwcHeUx+oBUl4JcjInGPqXBtNUVEl7+j+ksg9R2XBscyF1l18ffunJVU Z06SBEvxh1V/htpNngy2v57dFdPVIYcS+VChGTxXVup9y1/pmoXNvRFqyzH+ku2hf8pTu1J1nvx FfKjovBgKMy1eHuzyah 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 clxscore=1030 mlxlogscore=756 suspectscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABBVLw5IR+0qVSD0OpY4nlcsuCTw4ln+UrzGGmENi3JYxA1kCn59xAvz/Wr3I1CMA9MDIjOixkDEmE+zgf6WRABkkY6o77ut6r08fZUBZdNaBHPVsV5bjxIjK4ukzetG87+zlv2WJW/5pI3P03UibozB1Sz/hOOY33hDBVCpjTGSJCUhCv+PyNLzDvvyqkNEAanwEtse2BDOxnSBgp6yYHyeOu4mHpP8T8L/I7OHkDFQE3wrtDMSGNwaV0HjDCMo+UZ5GM9JzXh+T7y1credzBXwvoCglhM4fffZJ21ehkIfP8lwV9j4k8aZC3VcKXSlB3Ceqkev2a2x9dTm5lmXClvGZFs2Ink3H1EeMHMpbQG32Z8hdtIQ5IA9uq/W22JxL8zXPycCaV7dRQGmwNwLZDAqOTzi7ITI1f7R6MjI2Iv2HGWTULr892FTF1qW1ueSKweXRCruj+pPUBJjOb+jkgI0Cbg3nMnNn+KYJASNPL/Vj6iKPXFvEa9NC/hlEcGfnPS+bSC9yKiVnjWSCBCXkD9DIY4jG5Bnln5VEoUXrohn/3UU2s4wgs91IYp2ImzpY6armNRzfM2kNSdFmRriPjIeKyJ9ThEDvq/OWsnAbi24TWQ4wJ8HMw9BIoGScWnWqTDuyDOw+QQSANArQbHEROVHGTev2NFLNcH1dh7fDHAlK+3Br05hQsR34cWqVvoW+PoGNjO1SjGKxKrvdPBKp9CpFhgO6DZscm//25Km+OpzH/Ey6QqRZE3NgBZFlAH2YHpkmbHWa0j516zru4DSnosnKcZqU= 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.84.80; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719843399018900 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 b1706a2749..0de6568ec2 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -85,6 +85,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 Sun Feb 8 13:52:41 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=1763719658; cv=none; d=zohomail.com; s=zohoarc; b=SAHGwZpKbFo2Bmz+dzplIcsvokCjTg5jmKVcsVeiklnCgKn4+YzhZ1XkI1XpQq4MQ29UGLq9w9YEgpSlBucUk3YMxV8My3NRehJvElwglC56YOZJM8izQGTyEMMaHTeGZUelqIlu2h2zUe/sa9IlHqYXeeQmai+sfOaFRvj6iFQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719658; 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=x8a0KyKqMZqPAjtF/NyOtU9ZDebRbQF6KUUO9/a159w=; b=CeyWZV0DhHURwqXGCMRKXcpiDIMjyN9DizJR+QQ0QempcbRehMncCJUJ3gJH0OHZFD3dt/nbAeGQSXklKQlgtinbYxOzFDs90oBNkw0zUf0rDRYnd5P3dqh/Mb58pMVoKZj0vQH593V1kzMPLX0W+k7flJJDmz16qnSO7ewRR9Q= 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 1763719658371773.6526583604925; Fri, 21 Nov 2025 02:07:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO29-0007LR-Pb; Fri, 21 Nov 2025 05:06:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMO02-0004zm-C9 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:18 -0500 Received: from p-east3-cluster4-host8-snip4-10.eps.apple.com ([57.103.84.83] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzl-000803-8M for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:15 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 05ABB18006E0; Fri, 21 Nov 2025 10:03:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 7E4E31801103; Fri, 21 Nov 2025 10:03:29 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=x8a0KyKqMZqPAjtF/NyOtU9ZDebRbQF6KUUO9/a159w=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=hDM1BDkNYtMkbaKER58+zGsmyxuJCQONtmW0WNhLZ/mJF5ZkonjIqERv3nTIAljx9QH9XGXAz4WOrQL7dMszoCUVWLG+v2ArfokYLl9+oKsRMPl0oaN1Rw1FRRJQ1vNHV1uutsn88NTD0gwlb6ox3Bi1K3m6qGT2VHaIyl/fHh2A8OImgmXZovq5qgS2qXZ9a19t7yns8ltAKRkZgfUKCzItstOpo5E150oxGd/hivM+sNWsXb0oLiIACU8zTvnyH5O23UNcv1ZWBLWnOKFNtaT1f3+zz76fydWXHECdXXik9sXOQGUA/MCWxxbBE4Vn9FwG0+l44kG45TJzBZqRAA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 27/28] whpx: arm64: check for physical address width after WHPX availability Date: Fri, 21 Nov 2025 11:02:39 +0100 Message-ID: <20251121100240.89117-28-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: xcXKJf9B6KPX2WSIuYXuBxGS7bMSizNS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfX/zoJ+ZEO3eLf UELgrfxvyGxZWDTXiZDvo88UsJizs4KSVboQKQ3hzHk3bNVHF67YmoITMzsoLECDuzPI0rz7EEJ J7/5itpYcw7ZGVPbhQ5eHQIkTT7LOBZxazyKeQGER+7BFoQenFPtIWpLf0e3ro3OZGsce4st0z1 mWejK7Z7q0y3fZjwKbOfQJN3S5ekAcNyvlSkGZ0MFWssA4fl8sUmOVo5iIj5kq6jyp4Qxq4EdpP vfTiwn7EmB92tavNEMS4+6YqqoG3aYvrnmZvi4uMzfwMznfeoaei/fnkQ8NXsr188ZPe+7udNAA 4+06fQ7xT3NqnycDXwL X-Authority-Info: v=2.4 cv=b4+/I9Gx c=1 sm=1 tr=0 ts=692038f5 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=GePjjIfFpqe_pMnJkREA:9 X-Proofpoint-GUID: xcXKJf9B6KPX2WSIuYXuBxGS7bMSizNS 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=985 bulkscore=0 phishscore=0 mlxscore=0 malwarescore=0 suspectscore=0 clxscore=1030 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAAB0WhimdujOsfQ+Y5kJhItOewwUL6sgZGyt9FP+ijleww0FM3hiihRTaRqZ21eocKnHoBiE/BuTcUNQgn0/MvxFt7uPwtudTIwsQ/k9DB1jz32Sj+zo7uJ2axG3nEC4sF4AJWR+wYC33gfgt10JvDA3yUF0eOvlRecPSBg9KhClRp4t9bxil+oBSe/Q7UZyg/sP2cYgteEFCdS8KgGhv/1H6e9yQ09bmQGBz/lEneEwwoDuEwKli9T1JaXlMeadAOlEgNLbZWPiz3JYZRMmcaxxrSxH2Z14UfZiIl3sEEzUooW8aPma1jJwDCxJPDpyDmhKqEaAj5o9UE+BeLxAR0plagx3vH0SY/JwSboGLeA4IGRJPy+BMjq2ONIO21MetFVLIusx5tAjJnzgpTxi7BWhRYMKtogeaHPOBR3cykdbajDgHfzl59PtPHSmETRwzh/qXU7fcu/fccfGABld8Qbm0ZesvqAvlG/kPVz0XTwdgkl6ClTSHmD2QDQPvFaI7HBkwVdtq8Anha27N8+8BNBWAnXw9CvrSSTMZ6OqyV++gQtd4/+5kSb1zZPOy+Sum5hNryfIJhRfub5NDf81EEvNFTUhcSvbGYP234KQZ9EYFBUDFyloIe2PgZNSj0gwyisz+4vPEAOtne5yZK05uwh18bYjx/zFPW4Fjl6FXI8ePUD+XydxaYWt3nsQlPySQcrcS+p4KxamQZQVrDvcLS3K5f8juanF268P3otYsMPfKQKVn4YSs4KzqxBl/oK6qtZk6hikRcy 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.84.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719660452018900 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 --- 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 5be1abcfc5..4c8db22e8a 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 Sun Feb 8 13:52:41 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=1763719842; cv=none; d=zohomail.com; s=zohoarc; b=NORxi9P9swmXB8wCKJXwYFpV0fcYHt/RbXOaIBqW1f4Bnm4FQRDI0UdcWDK+mM29t0tkuXdSvHX6Lm6OUGfJcgLGRDA3UKmlcIk2pHmw5hzY/v8ZxrQZUfk/E+PNIfliQz967jjNJHO/CwzwNGboiDKEgX1EN6Gxjfsf6Z4BaMU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763719842; 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=eAmoCvdmeUH7RDmyttUu0uqfe08uF7aiATJn5hX18FU=; b=B/gaFLD/vG+t/A5BmBgU+cOwm/dlX3t9TD1scEO7J+Mdz4lrYn/kZCNSwFsMLpvuYcrDx2sc8dECiHS/f4iHBM+ADK7sYdmfvHQnjF1GBrIZKJ70gqKYz5kE/5WynHwKrfeAwnWzF/KE4fHBH2g37Bca/Aly/NoZvOHjhbzHDTo= 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 1763719842546729.4059409059913; Fri, 21 Nov 2025 02:10:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vMO1l-0006gu-VG; Fri, 21 Nov 2025 05:06: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 1vMO01-0004zp-K6 for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:18 -0500 Received: from p-east3-cluster4-host5-snip4-10.eps.apple.com ([57.103.84.53] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vMNzk-000804-Ai for qemu-devel@nongnu.org; Fri, 21 Nov 2025 05:04:15 -0500 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPS id 5195A180110F; Fri, 21 Nov 2025 10:03:33 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-100-percent-4 (Postfix) with ESMTPSA id 23C661801111; Fri, 21 Nov 2025 10:03:31 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; bh=eAmoCvdmeUH7RDmyttUu0uqfe08uF7aiATJn5hX18FU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=NCnoXYcYxZXbghqQLdUtT62ABCceVENngIoGJYBi57G4bwdfJjSwyLGmISenXVseesV9Lax13oVwwuVqH0deV2H0idus3EUOUY8/Kf54UUlb5UV3h/iCg41iZhy4arFt58ExTKE4I1tJZYbpKvzOhqZT0dpHuo47KZbQ/sX005Zu5rg7a5zguZBPiPpATlrbC+AV8XxhgIkgQZDFmspVZAcdiUsAXdV1SA+msQWHlGAA/1K1yRc88he2iS2jlF8YX4Sy15/2uINR6hwuNP0NkgAoVlHcjT4AckQ4NEf2h38/9N/xktCoNqyp0EPjW1r5I5T1xQeyD8HCu+lvPz1Fkg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org, mohamed@unpredictable.fr Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alexander Graf , Peter Maydell , Phil Dennis-Jordan , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-arm@nongnu.org, Pedro Barbuda , Akihiko Odaki , Peter Xu , Mads Ynddal Subject: [PATCH v11 28/28] whpx: arm64: add partition-wide reset on the reboot path Date: Fri, 21 Nov 2025 11:02:40 +0100 Message-ID: <20251121100240.89117-29-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251121100240.89117-1-mohamed@unpredictable.fr> References: <20251121100240.89117-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTIxMDA3NiBTYWx0ZWRfXywWNvmXxSQie Vb6qBCV5VNEEOMxXUNP3BAqC+Rln+EVI6MLBtG7pY0C8RuSc09LnRoTvrKG6VR44FP+BIiBEwEQ VSWUA+gwKyvqQYEExoeqArHUYTlt4ouFmpxOIdamqmvTLbBBM6/je6W4gV81PeJpI8nUAckOzoV b3jJ5nmWV4SwKF7WXnow4VRWujoGAPzNqf2eZay4jDXRx6MU1Cr//NTWVEdG1/N2fsxxvFvGLju mF2QqPydlRaUzk3QKJ+zlg6cYpOUE/fdoLoHkKaLKg5c7ngqA8MsCatH7z77RQ7elvRt4OYGu6J EtMos0rECB3jsfB1nPS X-Authority-Info: v=2.4 cv=V7twEOni c=1 sm=1 tr=0 ts=692038f6 cx=c_apl:c_pps a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=6UeiqGixMTsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=h5GvOLqLgfJ3vAEETv4A:9 a=NqO74GWdXPXpGKcKHaDJD/ajO6k=:19 X-Proofpoint-GUID: Xfz9P3z8f4Z0h6Ci4Xbytf1YW6m3ApBB X-Proofpoint-ORIG-GUID: Xfz9P3z8f4Z0h6Ci4Xbytf1YW6m3ApBB 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-11-21_03,2025-11-20_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=775 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 mlxscore=0 bulkscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2511210076 X-JNJ: AAAAAAABvleb1oXAyC1D+VJ43Z+yUJUoejr417KljzLJD+y08KtXzFNwFdH3xQrhvD1wzBMvNdiU+nh5GeXW6XJTMpjOQwWI5wxFV8YvoMiQrPIjdaAmWgAvUP5pwHwsFBq9lqqjcC715lPRbwY5lW4XP7hfrBPGXi5Czam7vxxH+F0wsi7qT1HSLfMoT1VAbPrJRf9FVvpPE/yMbPv3IRwx7M3W9xxED2623PZc/tiaoC2MhBEUZKNHgJAqJHWHBCfG6DuPoM8Rrk5i0cshDyGmxycmZHaSULFvx4VAWpzUvgGqfk1uTUsJCOzyORshGc4ltUL5Lqk3CgK3h7b5Et5kyHBgNpktYeyEgfKZuc+An5zeBpcoUnCS+RXHbKFZwI1dLZEB3Q+TTrqAb78aiuQmtdYMatjKZEAToj9y2iuGK0ndT5ivH6/f/xiPB3YSmi7QC/ZG1OCEa3ybpSdoQaUKgpMRF6BT7d7xCSBMETq4u2kqyhlhfaHIPFRDYND0eY9CgZcE92bIo6C6tJKtdiVuwRGHskwLT+SYoLEOfMe71MOIKw33r+jJukfdJjZzTESBESR2QnCvcMS+BMy53DuHA72I2NLrXXcugl7lvQ7FPUsTcGQrDByDap+gRnP7w2PHa3PUtbJXDjEmu8ogkTq2qb+O4B/dSvj6RJMYJOV4nosLWzFqBjxWK68AlxPvNpSAFSGo6Pi9wNwG52A9rz/TEOvC2GzXa/1xMB2XzeKgCzrzw5c= 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.84.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1763719843331018900 Content-Type: text/plain; charset="utf-8" This resets non-architectural state to allow for reboots to succeed. Signed-off-by: Mohamed Mediouni --- 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 0de6568ec2..248057e7b6 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -93,6 +93,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 4c8db22e8a..c40c153c2b 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)