From nobody Sun Apr 5 13:20:00 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=1774365348; cv=none; d=zohomail.com; s=zohoarc; b=GtivvZAlHfW52XfgRt41wKsLjicJxXr8UEP8pgJ3brRIeoOizpb+vutV+zRefpvtXMt/0itR9E4VvZfTa0Pb3O3DPoQUXJcyUkLp9Mpc3q+ukFM2/HVC4MLfHcK83nxuc9Tfo3fWTCA8lJ66Wc+hWthT9+lC9BJMeFU02Op5k+k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365348; 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=2GvRGzc1MRHwmLUZVIfY+An7ZJn+U4NKEHF+iW/SlLc=; b=GlumH0sZ+7TEeCBmNcFM58/2pO92f0++HC+CSTZ82BxU3WCzMYPzAnz4NuUa+Az/mGhal/+cv4CdtXM2i/kDT+BEd2PdDlalmMOw+7wfGZa2a/LtPJqAQrcN99gSZb8ilsqwABT+rz57y5DVSHALU8o1z/eNFArvChSoO5Vze8w= 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 1774365348084862.6727967764316; Tue, 24 Mar 2026 08:15:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53Tb-0006JE-7k; Tue, 24 Mar 2026 11:15:30 -0400 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 1w53Sl-0005sJ-O0 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:37 -0400 Received: from p-east2-cluster6-host9-snip4-3.eps.apple.com ([57.103.76.194] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sf-0005rb-T5 for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:33 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id A904B1835330; Tue, 24 Mar 2026 15:14:20 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 76F531816469; Tue, 24 Mar 2026 15:13:39 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365263; x=1776957263; bh=2GvRGzc1MRHwmLUZVIfY+An7ZJn+U4NKEHF+iW/SlLc=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=YXdze5cCcS7gLIWuMGjJXSvn1be0/VizQDTZ8ogAUP916zQ1f/RXhhCyhtZSZuxpczLVISs7M6oST86GiJG0QwDWoNc9PtAFoLtK4dG5CaquhIvmfsLu2p/1IUZRVQk81CPySdKsncwguQDa/eCIqSGP9yulaYvcN9BULyQ146Ty+SF50X8tSJqx5NUQSwvCvrsc4LIwGXEjtIiFeOghpaGm10l1KxdNpkP6wRRf+GS1UjADRhKpi+z6Bq37XYGvdOCoGPQdn7rogRZuEo4iE0PRwU8cRrnem1UFfvX7sNy0Dcawa+0caUCJh/0/Of5zAqdTz/50jaYuO6qFtbLKvw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 01/12] whpx: i386: workaround for Windows 10 support Date: Tue, 24 Mar 2026 16:13:12 +0100 Message-ID: <20260324151323.74473-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: n_6K2D1LUnbfKCfE9J_EBOEkGIDtfc12 X-Authority-Info-Out: v=2.4 cv=YdqwJgRf c=1 sm=1 tr=0 ts=69c2aa4d cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0RUPog5Yt9CtxV4tMQEA:9 X-Proofpoint-ORIG-GUID: n_6K2D1LUnbfKCfE9J_EBOEkGIDtfc12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX5wkxYLIoM5KY Vore0Pep8XvXXKQ4a8MJiOiytnKTw20sA0n2OCcJqxNBn9UHV6xZ/pSv9P3LbO+RCKOAhv5sWRE w0SEeSEUMLibA40cIFd6o59/0aV3T5iMGzKT+tGqQOD6TiMotjOHjExIWLoydAMdZMntKbWwKMY l0ZCXutoQ/6l/fe9mD8J+7YvmrRGe1pPCgYNnN/2R7bXYCDp3ARNFcGkw8k9iTMt39YzAl9lGKo EZmUJVGzgO1YTNS/9ZYfcHFeZjx/vStYl/rxqkOL/UJr2C+8kbYz+SY+rCkWXI843XEOEv4nbh7 pqk3QPyBU5E5a+S1wgEJiH1VchHTMPpoqZCJlSSm9k9p/3gtXxwAmlIPFDZ1Vg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 bulkscore=0 clxscore=1030 suspectscore=0 phishscore=0 lowpriorityscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.76.194; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365350120154100 Content-Type: text/plain; charset="utf-8" Windows Server 2022 and later support WHvCapabilityCodeProcessorPerfmonFeatures and WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks. Windows 10 supports neither of those. As the QEMU executable doesn't have a manifest, OS version queries do not return the actual Windows version but 6.2.9200 which corresponds to Windows 8. Windows Server 2022 and Windows 11 still use the 10.0 number, with distinction being the build number. As such, use the absence of perf monitoring feature query as a cutoff to detect if a legacy OS is present. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 43 ++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 4d5d3dbd24..015c0f1dc9 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -1948,6 +1948,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) WHV_CAPABILITY_FEATURES features =3D {0}; WHV_PROCESSOR_FEATURES_BANKS processor_features; WHV_PROCESSOR_PERFMON_FEATURES perfmon_features; + bool is_legacy_os =3D false; =20 whpx =3D &whpx_global; =20 @@ -2096,21 +2097,29 @@ int whpx_accel_init(AccelState *as, MachineState *m= s) hr =3D whp_dispatch.WHvGetCapability( WHvCapabilityCodeProcessorPerfmonFeatures, &perfmon_features, sizeof(WHV_PROCESSOR_PERFMON_FEATURES), &whpx_cap_size); + /* + * Relying on this is a crutch to maintain Windows 10 support. + * + * WHvCapabilityCodeProcessorPerfmonFeatures and + * WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks + * are implemented starting from Windows Server 2022 (build 20348). + */ if (FAILED(hr)) { - error_report("WHPX: Failed to get performance monitoring features,= hr=3D%08lx", hr); - ret =3D -ENOSPC; - goto error; - } - - hr =3D whp_dispatch.WHvSetPartitionProperty( - whpx->partition, - WHvPartitionPropertyCodeProcessorPerfmonFeatures, - &perfmon_features, - sizeof(WHV_PROCESSOR_PERFMON_FEATURES)); - if (FAILED(hr)) { - error_report("WHPX: Failed to set performance monitoring features,= hr=3D%08lx", hr); - ret =3D -EINVAL; - goto error; + warn_report("WHPX: Failed to get performance " + "monitoring features, hr=3D%08lx", hr); + is_legacy_os =3D true; + } else { + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeProcessorPerfmonFeatures, + &perfmon_features, + sizeof(WHV_PROCESSOR_PERFMON_FEATURES)); + if (FAILED(hr)) { + error_report("WHPX: Failed to set performance " + "monitoring features, hr=3D%08lx", hr); + ret =3D -EINVAL; + goto error; + } } =20 /* Enable synthetic processor features */ @@ -2138,7 +2147,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.DirectSyntheticTimers =3D 1; } =20 - if (whpx->hyperv_enlightenments_allowed) { + if (!is_legacy_os && whpx->hyperv_enlightenments_allowed) { hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks, @@ -2149,6 +2158,10 @@ int whpx_accel_init(AccelState *as, MachineState *ms) ret =3D -EINVAL; goto error; } + } else if (is_legacy_os && whpx->hyperv_enlightenments_required) { + error_report("Hyper-V enlightenments not available on legacy Windo= ws"); + ret =3D -EINVAL; + goto error; } =20 /* Register for MSR and CPUID exits */ --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365316; cv=none; d=zohomail.com; s=zohoarc; b=CzmHXxJFz1VoatMw8sErleh1eJh6Jykr8B+E81lQsI39MJVDfzqNYHyCoD1QeowaA0BxPQYyJih8w6JoNyHhH3LKoz7iMTRtko8vouTqLmGuO5O3Yi3T99olDb86/Cygb33aiD3Ae0coxZ/WCS+tOgfRuVoQd/AKz11TPE1opec= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365316; 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=z2ljL8wNGZuOd0h+jeGsCuyzoynr3r/rNkBTVv1fgB0=; b=LRB0LMTQ1No+2NIGySk9zSOPGSmhzMwi/sS+Zzok/0+pDr0WYQ6u+2IutI/wreiJipE9mLvM3XdlNCmpeJn7zN273mDyrns9dfrFBV1KkJgvguRD4uMGRwG/ykhXSazk6jap/qDCmuUtTESWKyQK4f/lKr7Fa4XT7D8b5d60keA= 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 1774365316421275.65761431142937; Tue, 24 Mar 2026 08:15:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53Sv-0005tl-Tw; Tue, 24 Mar 2026 11:14:45 -0400 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 1w53Sn-0005sP-Ip for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:38 -0400 Received: from p-east2-cluster6-host6-snip4-3.eps.apple.com ([57.103.76.224] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Si-0005rj-1B for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:36 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 067C6180312E; Tue, 24 Mar 2026 15:14:21 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 137791835339; Tue, 24 Mar 2026 15:13:40 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365264; x=1776957264; bh=z2ljL8wNGZuOd0h+jeGsCuyzoynr3r/rNkBTVv1fgB0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=U2NJbg7yaMTifGpiEy9VkReb2hW8RTckA7AYBym+hgED9wwgOUoyTROwYsYRYYys774RyPN+B6pzqnZoQlm7tDTmGgFOeiFajMc8x5f6pvq6LgtxUwMeMswHe5V1HkvNrwBUTo9Ia0rm5jVcYlV7ympmZkn3A/F8mFYNOof18JDsiLus7wSKPNio2wRdHlCfoq7DKSxIrSdu1VFJF41eEQfghJI943rUBA7iCW5lK2AnrFl6cZsewQdKNvLrwxjHZXBMhm6x4KriTVHEm9lTvQQyrIgb5/c9rx0yoyxTCs3faMnM2ZapLQvgnu7kaMFDWconZZ0lx7E/YSJ+sMbtaQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 02/12] whpx: i386: enable exceptions VM exit only when needed Date: Tue, 24 Mar 2026 16:13:13 +0100 Message-ID: <20260324151323.74473-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: UfoLyG63GY8L_1exhujuUVY1-pankLNB X-Authority-Info-Out: v=2.4 cv=aJX9aL9m c=1 sm=1 tr=0 ts=69c2aa4e cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EmEGBKFVNSqW8m1RzRwA:9 X-Proofpoint-GUID: UfoLyG63GY8L_1exhujuUVY1-pankLNB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX8rIlCKm9wJc9 6Sdx1/Hm/Ta2l+cK401QBOaJArCIIxn/4dCdfWJvLTKAIA4GlVQF3NEFMr1ShSRVLnimkGONrZm 2nnuA/hdD0hkuU7jgkks8Htv8RODmCxgwwIL1p3aFa34l6+mP5zmn1h6oa5ZSOeE94CXEsp6WLz LyWdoT2Ewd0b1N3G2JEIJ+jthdly11M1Asmpl7sUKFFQFzFaJxR0b6Gdcm+WIkezoHsVJ0eRrFs HcS68piFQB44JyGRsnhiivMxJ8oh9iD4J+5rc46IzLjmFfIVqfrRUyQrs/Zgj0fMiDnAt/V6o+S haa4HXBg4FtIeGROiNxPRdjsGgdCr5jXO726913Y5TSl/M2XbSVsRnZrbY6AU0= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 adultscore=0 bulkscore=0 mlxlogscore=932 phishscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.76.224; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365319988154101 Content-Type: text/plain; charset="utf-8" The exceptions VM exit was enabled with an empty bitmask even when not used. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 015c0f1dc9..8f1835ee95 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -903,13 +903,31 @@ static void whpx_init_emu(void) HRESULT whpx_set_exception_exit_bitmap(UINT64 exceptions) { struct whpx_state *whpx =3D &whpx_global; - WHV_PARTITION_PROPERTY prop =3D { 0, }; + WHV_PARTITION_PROPERTY prop; HRESULT hr; =20 if (exceptions =3D=3D whpx->exception_exit_bitmap) { return S_OK; } =20 + /* Register for MSR and CPUID exits */ + memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); + prop.ExtendedVmExits.X64MsrExit =3D 1; + if (exceptions !=3D 0) { + prop.ExtendedVmExits.ExceptionExit =3D 1; + } + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeExtendedVmExits, + &prop, + sizeof(WHV_PARTITION_PROPERTY)); + if (FAILED(hr)) { + error_report("WHPX: Failed to enable extended VM exits, hr=3D%08lx= ", hr); + return hr; + } + + memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.ExceptionExitBitmap =3D exceptions; =20 hr =3D whp_dispatch.WHvSetPartitionProperty( @@ -2167,7 +2185,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) /* Register for MSR and CPUID exits */ memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.ExtendedVmExits.X64MsrExit =3D 1; - prop.ExtendedVmExits.ExceptionExit =3D 1; =20 hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, @@ -2175,7 +2192,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) &prop, sizeof(WHV_PARTITION_PROPERTY)); if (FAILED(hr)) { - error_report("WHPX: Failed to enable MSR & CPUIDexit, hr=3D%08lx",= hr); + error_report("WHPX: Failed to enable extended VM exits, hr=3D%08lx= ", hr); ret =3D -EINVAL; goto error; } --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365334; cv=none; d=zohomail.com; s=zohoarc; b=UHW98AnJO2K7mYkjswKHmYMZ1VffOzd6uky/FLGg/KtOaMDKpTHSeRYPANfe4sfP1tiHgxaDGqeB6Lz2OUiwdYyRRFsB/hv5oCQwlJbnYlzFzdxpfUYBqeZf9Ul0tsXnvVSHn9bflkNzI/Z/4XgW6U4MomnPvihOGA0As+2eXaM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365334; 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=vnPfBYcDBT/4rVJAt76jW+6cbBD4K0JEvtoQvDJO0ok=; b=AidgWDDh3ShbC326Z4gLymSimj0VAqOhKHLEAnXIhy3XgILvQ13IS+CvBGz/1sCZdz1cnd5vVk2BlOTE8t3fyd8sGGitzX7SmvQWLowa+t6Wh5dP5w0z/C45CEa6nyCKM/tdQ6mE+ge9Xvu1HOZyyeyFPRZu+lrxWpXsswzy5+Y= 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 1774365333976805.4779785457207; Tue, 24 Mar 2026 08:15:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53Sx-0005uH-MH; Tue, 24 Mar 2026 11:14:47 -0400 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 1w53Sn-0005sO-Ix for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:38 -0400 Received: from p-east2-cluster6-host10-snip4-1.eps.apple.com ([57.103.76.202] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Si-0005ru-1C for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:36 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 2F5731814D07; Tue, 24 Mar 2026 15:14:23 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id D55A41803111; Tue, 24 Mar 2026 15:13:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365265; x=1776957265; bh=vnPfBYcDBT/4rVJAt76jW+6cbBD4K0JEvtoQvDJO0ok=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=W+4ZoD66UhJ+PhOmbK+wl2+6dqCZQ7v4ZsjvptzV9/j821KzV1b3y0Hr3I6t7eJ6iIdSp7Qg+r6qEvbD2Rdvhb1dFh3sIKrno6kuuCdK0ZCjQJXZ4GWHD+aVoqgOwuZyFdxf5GUXUpjn8puA0V5+X2NAtajtmjeZOGdwDPoUhhTPjsYQ8o5LwlQUPUrSdXOj10gee8BlN33It6NlNObJovNpLxF5bfk0ACIXXjxuLf9LC4M/L3vI16lTv6JPLRAnCNsEBxT5+a4khmBvxIVAkgahv1fVmVLdNqz+LSMg2qd2GuwmRTUJdpwWp956/WrrNAn/DoCOodozGtpB45SNVA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 03/12] whpx: i386: skip TSC read for MMIO exits Date: Tue, 24 Mar 2026 16:13:14 +0100 Message-ID: <20260324151323.74473-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX4+iwpE9tg1Af 5EIE4cjH5JqGPMLTzinTw8mZszp1Sx7QkFwqNKuyKnzjSW7WRvJqvNdW+aekZ+V0G7P7l9sddxK wgdG72inl8vQjjcjLx96AsKcnrIqbbODIoAqw6eju+jCwG2aArqoWclYdC23VTyX2fThEnZ5X3r fNb2tSZzbkOUM3x6DutL907OMi89bljl9NBzBHYAuo3DTGDRKyODY5CSSugHgtdyeP0U5j5RgVW L8AayRWc4xRQbjhTUN7587MSs7VRn24h/tYfw3DQYM/3c3fmIP5Py8BV+hlR0S2kCo4n4ArRC2V A+n8UJfL/KHVwKFtBt5UqJSAo+0m+8EIFcl2o1B+Xe9MDfjqIzaW7kHO/yAUHA= X-Proofpoint-ORIG-GUID: YLyBrrgwEbDDSfhbKv8daJD4HDjhdl4T X-Authority-Info-Out: v=2.4 cv=Y4/1cxeN c=1 sm=1 tr=0 ts=69c2aa4f cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NP4je1IWzm4tDGSucAQA:9 X-Proofpoint-GUID: YLyBrrgwEbDDSfhbKv8daJD4HDjhdl4T X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=706 adultscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 mlxscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.76.202; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365335992154100 Content-Type: text/plain; charset="utf-8" The TSC value isn't needed for vmexit processing. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 8f1835ee95..ac03445d9d 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -606,7 +606,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) =20 assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); =20 - if (!env->tsc_valid) { + if (level > WHPX_LEVEL_FAST_RUNTIME_STATE && !env->tsc_valid) { whpx_get_tsc(cpu); env->tsc_valid =3D !runstate_is_running(); } --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365328; cv=none; d=zohomail.com; s=zohoarc; b=DvAagJYWiOzz9j00CjAPCiai2P/rO7STNnhWFybuq2n7xfdFSlxqLEDCaHYkHvZAr11PXBnRWzdeSF7sViw/zY/+V/fowrMn3sCoX5RAEyWI0egRHV21OZqcUvE9p28NHmHs5ea5Sd4y9NFqiow1fzTxD32dl9pSTMUDb4SaWc0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365328; 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=p3kP/TgGy9+75EyKQX7zRo14kGVxvhzT6oqhUrcGhLI=; b=fjs39mTSt8uU/NkWhrUPdGzFhQQC2fPcfkLHJAZEiaGQKxgktUogzFVWeqdkEdPmxGkmYKmzN7kR+n6dbOmiY9ENHKCJc4MRwAL0vKqDQJhuT1HHCQpNilp9GfRjb3WLWWCsk4+KjkX1WY6ONK1SNaDPuGPFwg5wWqlV0D3nCj8= 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 1774365327890736.6783774379388; Tue, 24 Mar 2026 08:15:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53T8-0005vK-VF; Tue, 24 Mar 2026 11:14:58 -0400 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 1w53Sq-0005t7-BS for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:42 -0400 Received: from p-east2-cluster6-host8-snip4-10.eps.apple.com ([57.103.76.171] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Si-0005s8-1D for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:37 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 1A8A1181644C; Tue, 24 Mar 2026 15:14:24 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 9D2E21801481; Tue, 24 Mar 2026 15:13:44 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365267; x=1776957267; bh=p3kP/TgGy9+75EyKQX7zRo14kGVxvhzT6oqhUrcGhLI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KnsZ6ad6efIlUOFw4hcNW5Wsb0YWyXf1y2uh5qZMELDEtgX/ymE7YAzZODT7IWiddzwK2uIVYV/U+61a45kUv3uTE7wT5WHabU6ACj2izGIH63om9XaDL45SHMDuNdrKH/cAvbCz739LeY/Nl5yp+pQMurzYENN6j74xoc+WKK3Cva52cKRT3YuSkPl80onQc86+bFm/KnngEi8oRzwJAL0JuJAYfBZYcyuZEpg5HDLJ8EuHmzLxW1nEtT9UnsryI3wRiZRthH9Cvmqqs+0iNAm5wVVWm/cuX5oDcf6dUY37KA1Mj5cAN7iEhCNwikshVhVeLZpMriRih0Da5sX2Dw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 04/12] whpx: i386: skip XCRs read for MMIO exits Date: Tue, 24 Mar 2026 16:13:15 +0100 Message-ID: <20260324151323.74473-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: v5OyBA4sWwIGfWSBA6TBn0e8MsxX3PM1 X-Authority-Info-Out: v=2.4 cv=YdqwJgRf c=1 sm=1 tr=0 ts=69c2aa51 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=ytqdvofJqIjuNepkJhYA:9 X-Proofpoint-ORIG-GUID: v5OyBA4sWwIGfWSBA6TBn0e8MsxX3PM1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX3QMkW1yP0tFi k2sqLOghH4FzaX1Jc67s1oJF+2W9NO5x8IkCIKF0gKQWxex+EzD4IohZvVW4RzvvTzm1I62FUUc z2uq+w86a3YsGtEp52p4gwfxVUC/3LuLVpsB//LxQKnVCgp2T4nGnFw3bizate//lqXh+ZMSa+7 aPe2hwhbw+21Nk7vXztkHfnQUJD91ac3HC7+A3E945yE9UVe2CIq0gR5D+7Tk2DrdkUTW46wZTQ O6wpsKZNcskgRcr32XqkUGKmqNOz61u9dAXa/QZOv4Bw9dj/0kGvpJjLT4mouHs+1GAanl3brkY 7TWedq0qHqEns+izj+9DuCfYbz0nsfmqt/lXQtmXypU7p7IQKC5KbjqyrRqoJE= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 bulkscore=0 clxscore=1030 suspectscore=0 phishscore=0 lowpriorityscore=0 mlxlogscore=792 malwarescore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.76.171; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365329897154101 Content-Type: text/plain; charset="utf-8" The XCR0 value isn't currently needed for vmexit processing. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index ac03445d9d..c0c7ba9177 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -689,7 +689,9 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) * Extended control registers needs to be handled separately depending * on whether xsave is supported/enabled or not. */ - whpx_get_xcrs(cpu); + if (level > WHPX_LEVEL_FAST_RUNTIME_STATE) { + whpx_get_xcrs(cpu); + } =20 /* 16 XMM registers */ assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmm0); --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365384; cv=none; d=zohomail.com; s=zohoarc; b=cTsnx/bawbNaj3v1zaH/uidOGlbEsHZibNBMilGpT2BKFF6LG1YtMFY4LhaqjSj1R9HwftwM9p6e+yENcVws6DsjIx8pzikNYJM9HKJ+LqexDKsli+VMK7vE2M4/l8T7kZYCsUOMT+R0YSEepA/vt468zxcpKpFkCdsaan32+p4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365384; 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=uAJ51zR7R15wIVlC530LHyYmi+UTEudXXGcCdwby+0E=; b=mDJ9qpMmYiqqQkin+6FkBVgWhJgIZyOwiVZXxETb6j1qU1yJ6g87re2XYETwAfZNjzXYojmrbcoAZ4gZP3yteElhpjyldqYiN4lctUbIYgwzUppmrl7CUyI5a2QiMM4CnxxdrbStpqFbAdMUautCjQ+C6WPi2w0qs/AgGfOswjM= 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 1774365383955690.7428760204986; Tue, 24 Mar 2026 08:16:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53Tv-0006oR-6i; Tue, 24 Mar 2026 11:15:49 -0400 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 1w53Su-0005tg-2d for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:44 -0400 Received: from p-east2-cluster2-host11-snip4-1.eps.apple.com ([57.103.78.84] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sn-0005su-9j for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:38 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id D471618000A3; Tue, 24 Mar 2026 15:14:27 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 1C7C91803135; Tue, 24 Mar 2026 15:13:45 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365270; x=1776957270; bh=uAJ51zR7R15wIVlC530LHyYmi+UTEudXXGcCdwby+0E=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Xi8EI4ibCqtLsDfRxicfqt0cuC4WlO45WmhfYAdf69vac5IRrzyWPLxANMd2IunQHUPq20JcqBntld4e2JQoJnw5hCEfBarLU/MhnCBCrehEa4Wl+XSVogssfeJNsGGry6+T8vvS0BppJW7f1evzMZewf5IVb9z2hp0Hj4cONDTz5GYmutZsTBFqLKJQy//n3DarvcJqHWmWk9GpY2PBjM0RzacXDM2uTJHoRE+iF4EEgOjzJxuF0dJp1hJHZ0ButxsmiosXKF/GHpOPDlZHU1R60elfIjM6iuUpzfCYpYYEngjqP3YOq9TTq9P+T+lGRoFRoZoZse9nSTOH2fES2g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 05/12] whpx: i386: don't restore segment registers after MMIO handling Date: Tue, 24 Mar 2026 16:13:16 +0100 Message-ID: <20260324151323.74473-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: bG_tUR_rnm_VIMF5oAiwCZ2oZRT9PLLn X-Authority-Info-Out: v=2.4 cv=K6Qv3iWI c=1 sm=1 tr=0 ts=69c2aa54 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=-4eTQGsHVEe5RITbnwAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX5zb0LkH7ZmxT TmCR/nT1Vbn2IyWxV+w5fq50N7Ln4t+KPR0gMI2OILebCGoJLdlhFm5HVsAt/4RM1Fa8+uicKiq ABvg6e4wMkVEms729pEAY1JHmNGBypqwPHZsd/6TRBlwWWzXrIjWvbwx8d5qFtAccaU982FoA4Y gojbz3q7rn9uS4kvJAguSLgPp6Mbt+9pVZ1G+z88/+6Zd0adfVr1QGWzUvKTPefpRexYKOv7Naa x+cDR5AOgozvRpCo6ZJ+FN4dg/SAlchbJtZQfELQ0Chj+M3B+RWVETM1GXtR7i87iWRi45k889D pqqD0Phr39+pmh4/rjctNtgJTPljlNXzQUTnPFo5U3CjYvdzZKns6h/C8i7lMc= X-Proofpoint-ORIG-GUID: bG_tUR_rnm_VIMF5oAiwCZ2oZRT9PLLn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxscore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 mlxlogscore=830 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.84; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365386012158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index c0c7ba9177..69d141e7cc 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -416,19 +416,21 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel= level) assert(whpx_register_names[idx] =3D=3D WHvX64RegisterRflags); lflags_to_rflags(env); vcxt.values[idx++].Reg64 =3D env->eflags; - - /* Translate 6+4 segment registers. HV and QEMU order matches */ assert(idx =3D=3D WHvX64RegisterEs); - for (i =3D 0; i < 6; i +=3D 1, idx +=3D 1) { - vcxt.values[idx].Segment =3D whpx_seg_q2h(&env->segs[i], v86, r86); - } =20 - assert(idx =3D=3D WHvX64RegisterLdtr); - /* - * Skip those registers for synchronisation after MMIO accesses - * as they're not going to be modified in that case. - */ if (level > WHPX_LEVEL_FAST_RUNTIME_STATE) { + + /* Translate 6+4 segment registers. HV and QEMU order matches */ + for (i =3D 0; i < 6; i +=3D 1, idx +=3D 1) { + vcxt.values[idx].Segment =3D whpx_seg_q2h(&env->segs[i], v86, = r86); + } + + assert(idx =3D=3D WHvX64RegisterLdtr); + /* + * Skip those registers for synchronisation after MMIO accesses + * as they're not going to be modified in that case. + */ + vcxt.values[idx++].Segment =3D whpx_seg_q2h(&env->ldt, 0, 0); =20 assert(idx =3D=3D WHvX64RegisterTr); --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365331; cv=none; d=zohomail.com; s=zohoarc; b=E61xZSnSsCwDLOdpnt7TN1JGLn+DYQFKG8q39nKaNRKdmXbIyPni7QdDIfAfotwPr+w+rMtqsUmhFPko4bwrscuKK7TFe2ijjahO6qhqG8vdBnSyuuut7RDC4p2wuabHeJSa+I7Y4H1AoennyImWPQiB2QASJS1zgFLWVlUCbeA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365331; 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=NZnj8yCbumSadExeNcgwgqV2muxnORrhx0HseCqyro8=; b=lV+F34LSy/TKMRophMNl0yBysMKoKmCKZ2bo4af0Fhr+Xe1wuBTOWEzQVD2WrPYdtCSTnCytYp73W/iu0hx0zdz8zswedAb989o6MWTfLrPmPN35TAFgL00xsla71bXzYMGxREOEVV/5wt4CpbkXalpJmvKfD99tGyoDiwGZKlg= 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 1774365331800561.2711118209137; Tue, 24 Mar 2026 08:15:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53TN-000692-Sk; Tue, 24 Mar 2026 11:15:15 -0400 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 1w53Sq-0005t8-Be for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:42 -0400 Received: from p-east2-cluster2-host11-snip4-2.eps.apple.com ([57.103.78.85] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sn-0005sv-9V for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:38 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 59FC21852A0D; Tue, 24 Mar 2026 15:14:29 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 9108A1803125; Tue, 24 Mar 2026 15:13:47 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365271; x=1776957271; bh=NZnj8yCbumSadExeNcgwgqV2muxnORrhx0HseCqyro8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BBpOFmIY9jOYCzKbBcK1KyUjsIoJEJHw/OgAM6Q9abqceGxy7fcM2jHyC4rPym6T0ji/nBTh/bwL/cJYjMpgW7JzEa2p9u1oYAEhIUfO44LaJ8nMmNdBO8a7vId2++Nrb84B6HtQ2aaUuS6XSEKGJm6lR9rsEQaMnxidpSEdKBYZvJWzAH9TCsDMRxfi1JMDyHmg903FrF0h52axph7vB3QTAfvkKIGc+fpnVkKB66ZraIuJ5z4KriMOPcmtYt30haNbpoBro4Z9Wtt2g+xr41eZkGLgODkGYP7fSXKHmsOnVTidI/0rPgZan8L2Hcug8ThwomfAPx0sCvvmtegzVQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 06/12] target/i386: emulate: add new callbacks Date: Tue, 24 Mar 2026 16:13:17 +0100 Message-ID: <20260324151323.74473-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX0Kqrv/S6y25A /pFs/V/O59/4uuAXWYhmX6+XFR1iyjkJPstm3gkE9PaqARVKCFt332uNJV1ahm3oOuIUoqtTfIw Ohiy5zrhTWYvHFF2yHgWsbqJ9E3Fx7IDOjW8PTybXL3WJ7U0RBetZkUdY+0/WL/QFeqFuiZ7TLk 2nwsttObXaZUFfBGXHckw4rn6SGGzvrgYEub1T3P/HyO99bYf799ozoTnWNO+D0r+WggQ5fbF2o 9fiF6ER3ltpA0oJLgpNUD037FqxcnG3C/yznBhV6gL5qjjvbBfjgJqYQvDBPCwDGSAwbNcbBTIp cd22jRR7Qmv0B6pNVeFUQbI/syVRM5gTcidZQcBa7OA98g9ICSkmctuF3+bm0w= X-Proofpoint-GUID: imozCZEi2w2nkECidPf5DWTvyx7xNeJQ X-Authority-Info-Out: v=2.4 cv=H/rWAuYi c=1 sm=1 tr=0 ts=69c2aa55 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=AM0uniIKGEjy2BpxYl4A:9 X-Proofpoint-ORIG-GUID: imozCZEi2w2nkECidPf5DWTvyx7xNeJQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 clxscore=1030 mlxlogscore=884 bulkscore=0 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.85; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365334111154100 Content-Type: text/plain; charset="utf-8" On Hyper-V fetching some guest registers is really expensive, so add a way to query some state from information provided by Hyper-V to save time on vmexits. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_emu.h | 3 +++ target/i386/emulate/x86_helpers.c | 6 ++++++ target/i386/emulate/x86_mmu.c | 3 +++ 3 files changed, 12 insertions(+) diff --git a/target/i386/emulate/x86_emu.h b/target/i386/emulate/x86_emu.h index 0f284b0c3d..4ed970bd53 100644 --- a/target/i386/emulate/x86_emu.h +++ b/target/i386/emulate/x86_emu.h @@ -32,6 +32,9 @@ struct x86_emul_ops { int size, int count); void (*simulate_rdmsr)(CPUState *cs); void (*simulate_wrmsr)(CPUState *cs); + bool (*is_protected_mode)(CPUState *cpu); + bool (*is_long_mode)(CPUState *cpu); + bool (*is_user_mode)(CPUState *cpu); }; =20 extern const struct x86_emul_ops *emul_ops; diff --git a/target/i386/emulate/x86_helpers.c b/target/i386/emulate/x86_he= lpers.c index 024f9a2afc..ebbf40f2b0 100644 --- a/target/i386/emulate/x86_helpers.c +++ b/target/i386/emulate/x86_helpers.c @@ -211,6 +211,9 @@ bool x86_is_protected(CPUState *cpu) X86CPU *x86_cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86_cpu->env; uint64_t cr0 =3D env->cr[0]; + if (emul_ops->is_protected_mode) { + return emul_ops->is_protected_mode(cpu); + } =20 return cr0 & CR0_PE_MASK; } @@ -234,6 +237,9 @@ bool x86_is_long_mode(CPUState *cpu) uint64_t efer =3D env->efer; uint64_t lme_lma =3D (MSR_EFER_LME | MSR_EFER_LMA); =20 + if (emul_ops->is_long_mode) { + return emul_ops->is_long_mode(cpu); + } return ((efer & lme_lma) =3D=3D lme_lma); } =20 diff --git a/target/i386/emulate/x86_mmu.c b/target/i386/emulate/x86_mmu.c index 4e39bae025..670939acdb 100644 --- a/target/i386/emulate/x86_mmu.c +++ b/target/i386/emulate/x86_mmu.c @@ -49,6 +49,9 @@ =20 static bool is_user(CPUState *cpu) { + if (emul_ops->is_user_mode) { + return emul_ops->is_user_mode(cpu); + } return false; } =20 --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365356; cv=none; d=zohomail.com; s=zohoarc; b=k9yeNPhsKKElFYB6JkYzDz76Uq6S6cFbaO9dxL+STPowqCLz0JchKQ2q1qRvPMM5OzFFTHw6NHY12X5avTvshMN2rPFPs2LTNOIoxdWCo+OFbRaYgFHgqDEVl1da+9FPz/ul0UdN669YfaxWMjEGel+HtRXT9bn8yN3bzX3Fs3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365356; 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=xmiWoWUwFQC07+7l4Wa/YhNMVuZwBdr5x6NXirvfyaw=; b=cT0lU0xxI1fVzTd24WoI4La8iacGWlrguH/p8Q3Z5nDIyoS7Tc9TgmAM6k8ujPS96itVfYfqXQHYrqdQfja3i8mmArL7XHnXaHavCo83DFelVo8MyIr7w6YQBkXW2l+HxRfuO0b2KAgLpuOD0KjwT2SjLYB1zu2uZ1vNkHLJ4gM= 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 1774365355760174.6605825954059; Tue, 24 Mar 2026 08:15:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53Ts-0006Xm-Hf; Tue, 24 Mar 2026 11:15:44 -0400 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 1w53Sz-0005vE-3Y for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:54 -0400 Received: from p-east2-cluster2-host1-snip4-7.eps.apple.com ([57.103.78.10] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sq-0005tK-3m for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:45 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id DF6D51852A0C; Tue, 24 Mar 2026 15:14:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id BABFE1814D21; Tue, 24 Mar 2026 15:13:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365274; x=1776957274; bh=xmiWoWUwFQC07+7l4Wa/YhNMVuZwBdr5x6NXirvfyaw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KNOYka9YgcZKTah1n5NV67T8959OyRrJ7xHv/dR5ImCyD7Op7mJ8zy7tTl0aSfpxiu0zHZfqVWC0kfyxKqaQ0Be1ffPiL+gLv8kdWHWkL97j1kJsiI/C7EyU+TvRhTrScHhJgdlYUDXsh98nDQURcxx+RKcl3xHliX5jnKR8iu99TgNt9tfctYYnvoM5e9F+m1L2R/NDlWm7XX4ZxRWGdI8r6fhpMNQFBW1G87AweUkctPqAq/wU/n5gyliiaVCccw2MRfcyf8ftNue0Zb4I5aVBTgjtUMtBAKC2Dn6I+lRR+PHNI96crwbu1RCvb4Z7seRfMQGwGzp8HCwLwb1Mxg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 07/12] whpx: i386: add implementation of new x86_emul_ops Date: Tue, 24 Mar 2026 16:13:18 +0100 Message-ID: <20260324151323.74473-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 6xZU7F-r9s6-5xQNGfxKGQHbDVc91LV2 X-Proofpoint-ORIG-GUID: 6xZU7F-r9s6-5xQNGfxKGQHbDVc91LV2 X-Authority-Info-Out: v=2.4 cv=f6dFxeyM c=1 sm=1 tr=0 ts=69c2aa58 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=od5n6cu0qASRTXmq4OYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX1/AMjzSpGEKz pYl3p955YAfx8lD58t/ss+zNV6+5ezqMu1F+ujwF78BG72pRDRnvuyZSrRQ9vefMIrzfzNgVNdX BXx0mpJUdzjsmZ6wnfejtvbBTwGSqT2WhJYCeNGUjsjugB73COgcGzNuXFu/3MQ4Ckjxjw37l+1 CKl/dPbFOqPOrWoE0212CpvWdli0dDcJjUntSw00IdwHQsbD8bSU0R6nyaxgFEuLIIxIx+a8abF x7iV1vR8suPVhqXjeM1Vywa8NFhw8PKQNQCT5/69FBQMcnqzpzZ9i0Vs5SLLLnto4jCwnwhpmA/ 3xMkT126np/E36nvkO1CpgnrTJWAcZJoBcrmmhahmqGp9SN/ooE6847ZVrADYQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 lowpriorityscore=0 suspectscore=0 mlxlogscore=919 malwarescore=0 mlxscore=0 adultscore=0 bulkscore=0 clxscore=1030 phishscore=0 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.10; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365358824158500 Content-Type: text/plain; charset="utf-8" target/i386/emulate now has new ops for fetching whether the guest is in protected mode, long mode or user mode without fetching control registers. Use those for faster vmexits. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 69d141e7cc..b97dc9fd51 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -885,10 +885,32 @@ static void read_segment_descriptor(CPUState *cpu, } } =20 +static bool is_protected_mode(CPUState *cpu) +{ + AccelCPUState *vcpu =3D cpu->accel; + + return vcpu->exit_ctx.VpContext.ExecutionState.Cr0Pe =3D=3D 1; +} + +static bool is_long_mode(CPUState *cpu) +{ + AccelCPUState *vcpu =3D cpu->accel; + + return vcpu->exit_ctx.VpContext.ExecutionState.EferLma =3D=3D 1; +} + +static bool is_user_mode(CPUState *cpu) +{ + AccelCPUState *vcpu =3D cpu->accel; + return vcpu->exit_ctx.VpContext.ExecutionState.Cpl =3D=3D 3; +} =20 static const struct x86_emul_ops whpx_x86_emul_ops =3D { .read_segment_descriptor =3D read_segment_descriptor, - .handle_io =3D handle_io + .handle_io =3D handle_io, + .is_protected_mode =3D is_protected_mode, + .is_long_mode =3D is_long_mode, + .is_user_mode =3D is_user_mode }; =20 static void whpx_init_emu(void) --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365391; cv=none; d=zohomail.com; s=zohoarc; b=lw8pjrfR+fxuCjwJVJEL81eH40RheUIrrhl0llbkTBYcktPE5aUHTl+s2TpzsMS/8+UceLWWHyLwXvBfzijIbnhuBoVUS5BDRtLgzv4Dg8iGFe8nHTTiEopzne2m63q5f7jKfuMLbP5WxNB/TwoXll+sojmBvqDB96PqDEwSPCU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365391; 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=RaeVoGsUxhg5XOvzFErCPDaCiYTNc+RShNyqxvJnm/M=; b=bOjrklLZ7NNmJ5U5Mq3JWzQ0d1ah1UDVwcaQi8EM3zp718onKWWjLBG9G2XAaIskjK+uW+bhO9VPSl3RGn5ECAHLsk2w2fIzmoiShO9jKlBH+CdbvvUa4N/ipOPaaiIyOAd4jEl+jdsIBuVyEYCHa/rWiIny58RwCkqFwabPkUw= 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 1774365391378190.88464648715535; Tue, 24 Mar 2026 08:16:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53U4-00072q-BP; Tue, 24 Mar 2026 11:15:56 -0400 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 1w53Sz-0005vF-5T for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:54 -0400 Received: from p-east2-cluster2-host6-snip4-10.eps.apple.com ([57.103.78.43] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sq-0005tR-4T for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:45 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 738A01814D21; Tue, 24 Mar 2026 15:14:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 32806181645C; Tue, 24 Mar 2026 15:13:51 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365277; x=1776957277; bh=RaeVoGsUxhg5XOvzFErCPDaCiYTNc+RShNyqxvJnm/M=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=BL2SvDZ/Rk2Cmksnlte5tWuMSvvi/X5zsyZWm4mvip3eHgeIVgisnp4nsFIfxdF7f/hZjZ5KvQ6Xj/ymPX68O24Qcpj3iRnSbnSHNs1/zdES/W9P4jZUGM4yIr8eiQ9+NYgE0+Y/0XeAk8KxHQTA5WUDJDImSsogm9ioGxSA7BomSSm8+j6ZpZxF3FuInZGpZKeaS1pkxhDhu9oFndHGGp26Aj1vV5kovwzDHjCzvf8uajJdIOgZavrxKvdHq7rKGFgn9Y7AIoiHiSoMqGyBMEGDXYkGqE/mYxW+HfP285nGndJaxrKwUQnF+sUkvJ++XORV7bBL3kNpwUapffNenA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 08/12] target/i386: emulate: indirect access to CRs Date: Tue, 24 Mar 2026 16:13:19 +0100 Message-ID: <20260324151323.74473-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfXwCGnsJidn00d KukFB3kU/eZ2l/EFltWFOgy5aIrZZiWgpWn2bdZDumZ6FA8uzpVYUhuW+K7eggwGq4ihF+g3aaZ d3pTTw8MMXpKcGW+cmb6HligjS3Mkv5MFiv4PPOds+7WXiYNwCNZ9ar72QIV3lmKEcmkzsn7Iz9 G6CyS0XP8JwCPjvqEDSBIflo7IFGBt36qgyqnDoU5zbUljsrsTiBXXz6YYquhYd9R6szdJULuWn beIj5azqFk8ZcKjF3pd7Y0As0RQmXgVAzYBCqzEQ6nvJKq4CIy2eYKc8C33LPw1CkbH9zUj7kiT ImT8FVo7YKImB6QZ4wlSRcMjmImw4UcJ0CgdSHv5uzFZdYYrahhsR1h9bjyjRw= X-Authority-Info-Out: v=2.4 cv=DP+CIiNb c=1 sm=1 tr=0 ts=69c2aa5b cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=_XbvW0LUL-N0uKGCadMA:9 X-Proofpoint-GUID: ejpNUdLwk7QH21uY3fmDnTGY646Utw7l X-Proofpoint-ORIG-GUID: ejpNUdLwk7QH21uY3fmDnTGY646Utw7l X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 spamscore=0 clxscore=1030 mlxlogscore=924 adultscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.43; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365392142158500 Content-Type: text/plain; charset="utf-8" Prepare to have on-demand fetch of registers from the backend during faults. For x86_64 macOS, copy the function there too. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_emu.h | 3 +++ target/i386/emulate/x86_helpers.c | 27 ++++++++++++++++----------- target/i386/emulate/x86_mmu.c | 8 ++------ target/i386/hvf/x86.c | 11 +++++++++++ 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/target/i386/emulate/x86_emu.h b/target/i386/emulate/x86_emu.h index 4ed970bd53..a8d4c93098 100644 --- a/target/i386/emulate/x86_emu.h +++ b/target/i386/emulate/x86_emu.h @@ -28,6 +28,7 @@ struct x86_emul_ops { MMUTranslateResult (*mmu_gva_to_gpa) (CPUState *cpu, target_ulong gva,= uint64_t *gpa, MMUTranslateFlags flags); void (*read_segment_descriptor)(CPUState *cpu, struct x86_segment_desc= riptor *desc, enum X86Seg seg); + target_ulong (*read_cr) (CPUState *cpu, int cr); void (*handle_io)(CPUState *cpu, uint16_t port, void *data, int direct= ion, int size, int count); void (*simulate_rdmsr)(CPUState *cs); @@ -45,6 +46,8 @@ void x86_emul_raise_exception(CPUX86State *env, int excep= tion_index, int error_c =20 target_ulong read_reg(CPUX86State *env, int reg, int size); void write_reg(CPUX86State *env, int reg, target_ulong val, int size); +target_ulong x86_read_cr(CPUState *cpu, int cr); + target_ulong read_val_from_reg(void *reg_ptr, int size); void write_val_to_reg(void *reg_ptr, target_ulong val, int size); bool write_val_ext(CPUX86State *env, struct x86_decode_op *decode, target_= ulong val, int size); diff --git a/target/i386/emulate/x86_helpers.c b/target/i386/emulate/x86_he= lpers.c index ebbf40f2b0..c817015ef9 100644 --- a/target/i386/emulate/x86_helpers.c +++ b/target/i386/emulate/x86_helpers.c @@ -206,15 +206,26 @@ bool x86_read_call_gate(CPUState *cpu, struct x86_cal= l_gate *idt_desc, return true; } =20 -bool x86_is_protected(CPUState *cpu) +target_ulong x86_read_cr(CPUState *cpu, int cr) { X86CPU *x86_cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86_cpu->env; - uint64_t cr0 =3D env->cr[0]; + + if (emul_ops->read_cr) { + return emul_ops->read_cr(cpu, cr); + } + return env->cr[cr]; +} + +bool x86_is_protected(CPUState *cpu) +{ + uint64_t cr0; + if (emul_ops->is_protected_mode) { return emul_ops->is_protected_mode(cpu); } =20 + cr0 =3D x86_read_cr(cpu, 0); return cr0 & CR0_PE_MASK; } =20 @@ -245,9 +256,7 @@ bool x86_is_long_mode(CPUState *cpu) =20 bool x86_is_la57(CPUState *cpu) { - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; - uint64_t is_la57 =3D env->cr[4] & CR4_LA57_MASK; + uint64_t is_la57 =3D x86_read_cr(cpu, 4) & CR4_LA57_MASK; return is_la57; } =20 @@ -259,18 +268,14 @@ bool x86_is_long64_mode(CPUState *cpu) =20 bool x86_is_paging_mode(CPUState *cpu) { - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; - uint64_t cr0 =3D env->cr[0]; + uint64_t cr0 =3D x86_read_cr(cpu, 0); =20 return cr0 & CR0_PG_MASK; } =20 bool x86_is_pae_enabled(CPUState *cpu) { - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; - uint64_t cr4 =3D env->cr[4]; + uint64_t cr4 =3D x86_read_cr(cpu, 4); =20 return cr4 & CR4_PAE_MASK; } diff --git a/target/i386/emulate/x86_mmu.c b/target/i386/emulate/x86_mmu.c index 670939acdb..ba0ebe4268 100644 --- a/target/i386/emulate/x86_mmu.c +++ b/target/i386/emulate/x86_mmu.c @@ -114,8 +114,6 @@ static bool get_pt_entry(CPUState *cpu, struct gpt_tran= slation *pt, static MMUTranslateResult test_pt_entry(CPUState *cpu, struct gpt_translat= ion *pt, int level, int *largeness, bool pae, MMUTranslat= eFlags flags) { - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; uint64_t pte =3D pt->pte[level]; =20 if (!pte_present(pte)) { @@ -130,7 +128,7 @@ static MMUTranslateResult test_pt_entry(CPUState *cpu, = struct gpt_translation *p *largeness =3D level; } =20 - uint32_t cr0 =3D env->cr[0]; + uint32_t cr0 =3D x86_read_cr(cpu, 0); /* check protection */ if (cr0 & CR0_WP_MASK) { if (mmu_validate_write(flags) && !pte_write_access(pte)) { @@ -184,11 +182,9 @@ static inline uint64_t large_page_gpa(struct gpt_trans= lation *pt, bool pae, static MMUTranslateResult walk_gpt(CPUState *cpu, target_ulong addr, MMUTr= anslateFlags flags, struct gpt_translation *pt, bool pae) { - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; int top_level, level; int largeness =3D 0; - target_ulong cr3 =3D env->cr[3]; + target_ulong cr3 =3D x86_read_cr(cpu, 3); uint64_t page_mask =3D pae ? PAE_PTE_PAGE_MASK : LEGACY_PTE_PAGE_MASK; MMUTranslateResult res; =20 diff --git a/target/i386/hvf/x86.c b/target/i386/hvf/x86.c index 7fe710aca3..bae2f30fa2 100644 --- a/target/i386/hvf/x86.c +++ b/target/i386/hvf/x86.c @@ -143,6 +143,17 @@ bool x86_is_la57(CPUState *cpu) return false; } =20 +target_ulong x86_read_cr(CPUState *cpu, int cr) +{ + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + + if (emul_ops->read_cr) { + return emul_ops->read_cr(cpu, cr); + } + return env->cr[cr]; +} + bool x86_is_long64_mode(CPUState *cpu) { struct vmx_segment desc; --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365400; cv=none; d=zohomail.com; s=zohoarc; b=SpsoxH/hpO+z6Atr1qp2JK8lFX6yLBFCJRYeJamrHFGhMUS9VCewoarxvfyoPK7a012nyhIYILWonJRAQojT012BWzs3wQBJVcKXVkcWeTscd7OoIP/NYmQePeQ7UKMtHtVCRy4j/LTHF3OzM5peKD0SK8FiSg2KHCguzlojQ4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365400; 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=zodV20KljGzIfu43VRyDL9cMkLVaJYP9ThhIqUxnyaU=; b=i0yzGZEUfKeo7nw87q6P0vpRVo4nE5Hs17JmXzCSCW+AcsN/hnH4mfzrvwuwgYsaIRw1Rg4SyOFd8wdviwMdzEy0BD3DTdN70tIzw1WYl1IMcDWaWyxbeVQ8+xtnbSElsBbu+OyEm4OH8PGViRj+65oIhvskvT7ouNI6LjYiD68= 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 1774365400486173.52061580605198; Tue, 24 Mar 2026 08:16:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53U4-000762-MT; Tue, 24 Mar 2026 11:15:56 -0400 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 1w53T5-0005vn-8V for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:57 -0400 Received: from p-east2-cluster2-host7-snip4-10.eps.apple.com ([57.103.78.53] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53T0-0005tN-Os for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:54 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id B88741801488; Tue, 24 Mar 2026 15:14:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id B8E311814D2F; Tue, 24 Mar 2026 15:13:52 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365277; x=1776957277; bh=zodV20KljGzIfu43VRyDL9cMkLVaJYP9ThhIqUxnyaU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DbJvIxUjbL/BPL72T0O3z6+Yk1jH6MbLX8MVq+4WYsQvT81fvuHTwWJhuwsKAwO1Vy2/ggv+K28s0nufDhAZ2IFYctgtpzkar9Ac7xn/w6b2ajWTWQ04Jq2nc+gvmBXBnpUEKB1GsYFvBdg+jsCqHeT664LtEF3AzxeV/UsKCMC6CnHdcaTxee1DajSaDbj/IM94AqunRxdfDcEFjIRjszUo8r0kEDr3axteCl0aeHPkJlyfrLB1sYn4BZacxEQWf6nkQnyo3ILEvY0da2o16BlXjlMjGT5RvGgwWIg5ED9MEZu6xdFLEXLRyAA6cni9uorVYUw6T0kS3K7lPkbUJg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 09/12] whpx: i386: indirect access to CRs Date: Tue, 24 Mar 2026 16:13:20 +0100 Message-ID: <20260324151323.74473-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX7Y4LH69998j8 ++AwbcK3g1ntJAYwcoKQo3Gl1xVJ+NxDS65Vh+Cjjl0MaitoydCaRNxL0Ic170oeI1tbKmqlyQW +5vsPSM2MR9fg79ITKqkMp0yXCS9VZ4y4ijyaUbSdjvGXwvwLBc5v5AyfcIbPGUtmO0y//gM/Rq +ESEBzWw33iansRfiPS2ydt1+dz14GJenGj+4IbJnGFA9SWY5ArFT7OR8C1Ie3i3is24CsNOf8c UberGdnmfyESooxnQdx0JodinWET2XLbLsrLc98BROiTCUcVA0P6tXGrFH4HPAis2AREowLZpBS 38C/e7tY9Yjm8YN08JVsqz2OMgceaRboV7JM/9MGm1dltUquHEiwrmIFTcyBYo= X-Proofpoint-GUID: qMBHd86HAWWXnNzv9fjvNWQoHPVrM_n7 X-Authority-Info-Out: v=2.4 cv=H/rWAuYi c=1 sm=1 tr=0 ts=69c2aa5b cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kcTmfTs-UkjvTY61EfIA:9 X-Proofpoint-ORIG-GUID: qMBHd86HAWWXnNzv9fjvNWQoHPVrM_n7 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 spamscore=0 phishscore=0 adultscore=0 lowpriorityscore=0 clxscore=1030 mlxlogscore=878 bulkscore=0 mlxscore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365402125158501 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index b97dc9fd51..71b33a632a 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -905,12 +905,42 @@ static bool is_user_mode(CPUState *cpu) return vcpu->exit_ctx.VpContext.ExecutionState.Cpl =3D=3D 3; } =20 +static target_ulong read_cr(CPUState *cpu, int cr) +{ + WHV_REGISTER_NAME whv_cr; + WHV_REGISTER_VALUE val; + + switch (cr) { + case 0: + whv_cr =3D WHvX64RegisterCr0; + break; + case 2: + whv_cr =3D WHvX64RegisterCr2; + break; + case 3: + whv_cr =3D WHvX64RegisterCr3; + break; + case 4: + whv_cr =3D WHvX64RegisterCr4; + break; + case 8: + whv_cr =3D WHvX64RegisterCr8; + break; + default: + abort(); + } + whpx_get_reg(cpu, whv_cr, &val); + + return val.Reg64; +} + static const struct x86_emul_ops whpx_x86_emul_ops =3D { .read_segment_descriptor =3D read_segment_descriptor, .handle_io =3D handle_io, .is_protected_mode =3D is_protected_mode, .is_long_mode =3D is_long_mode, - .is_user_mode =3D is_user_mode + .is_user_mode =3D is_user_mode, + .read_cr =3D read_cr }; =20 static void whpx_init_emu(void) --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365377; cv=none; d=zohomail.com; s=zohoarc; b=hU60TbgRIl9RxhaS2u4v9xfHnZUpaZgiCrJflbs2Q30GJC5gs6hpnY8EATolZL1LLmgU+B9hOZXFKNY4cQbkSUTv5cCdwyWlS6HYDeDCKTqZ5NJp9gqJ7CMJ+9HbP6dM00VT7GZWF1XrHxOc6WfUISOfwLOG5jus5dLmXQI92Sw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365377; 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=vl9gr3/Etwc2CL3Gr9sJC1zQGi6Rjmv81TXMHG3rpEg=; b=VACtzRz5GN5rzlIymuRBS4HgX9HEjDHJecrrRzj49KgNlhGtSd2s2KzIRbH9VBOXx2XUjuwHz6dWq6sMZjJBEQHa7Q860/YkUU2F/envwCWswQItPUwXzDSytQH+qnpEXoOpxew2P9d48BXy5PT3x8HjwvGoudI3ghqBXIvszEM= 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 1774365377454188.6669205635095; Tue, 24 Mar 2026 08:16:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53U5-0007At-D6; Tue, 24 Mar 2026 11:15:57 -0400 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 1w53T3-0005vY-Rc for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:57 -0400 Received: from p-east2-cluster2-host8-snip4-5.eps.apple.com ([57.103.78.58] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Sz-0005tL-4f for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:51 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 1A4E11800348; Tue, 24 Mar 2026 15:14:35 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id ECE0718094D2; Tue, 24 Mar 2026 15:13:54 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365276; x=1776957276; bh=vl9gr3/Etwc2CL3Gr9sJC1zQGi6Rjmv81TXMHG3rpEg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=eEZLsnY4V+sml3LuUNQkmqyIvf9YdO2d8oLs3e/zq53PUPLG0z2RLE68ebPmln6teg33CEK4JdvfNHh7gr0PxNPN1OZEyedC8t73qjgRy2Twlr8P2yQ1/Ekj6jFC2PQE1js7AAzXnvtPgjmfJ1/QXs04iC/TpYwEAYMmqTSm/howrTQ3jP6SSliMV/oDXigI/VElpbYpkMGMWFLmXnbPH1zRXl/SItG+n6d6IJHORC5klpJK7JQqX76FIFGOy3BO6pP3rOnE9HcHQ+TIDtDijyl9Mp431p0yUAG5ObJiFe84wbchom0+qsSo5vSBxxbkEViwW4l/wepD5nLWJt1KRg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 10/12] target/i386: emulate: segmentation rework Date: Tue, 24 Mar 2026 16:13:21 +0100 Message-ID: <20260324151323.74473-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: OPcY04fxywMQY_h8Bqromc5U6eDJEfiv X-Authority-Info-Out: v=2.4 cv=bYRmkePB c=1 sm=1 tr=0 ts=69c2aa5c cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=vJJf33RnEMvZLxG4ysEA:9 X-Proofpoint-GUID: OPcY04fxywMQY_h8Bqromc5U6eDJEfiv X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX8jbnFCHPqq4n 6P8xW1exmYdrXC1pSPyEU3hlBpQaAa83UzCX4XrrzQzajnzshNhOzK5HY/552XzTCh2spVLcjhj P4qZ7j4PRJYQjhtpw99IDQIQVC5XxUOJLjB+egwphNsPo6LW1zv23qLfW3q/nQ+H/gByVg5qLP/ nn9jIQZyU2Y3TqHxoMMA/8LiZE/5bdIkX51ImYcVdMi424pPn4sbtsTrOM1d4qhCrBoP9ta7irz zJakLqoN8pnBJztxPwbqmIcztgXC/1ycC9bUp8PTUUALuObgcTMAXbh/Bpj75p3xA/ZkrUl/OPC 8EjYfpB3z9Fk9gAmvq623r3VHh+ldMqL/gnMrbxVQeD0k+LyTcMngXFT/wzFXo= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 lowpriorityscore=0 adultscore=0 phishscore=0 bulkscore=0 malwarescore=0 clxscore=1030 mlxlogscore=999 suspectscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.58; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365381007154100 Content-Type: text/plain; charset="utf-8" Make accesses to segments all go through read_segment_descriptor to be able to fetch segment state on-demand. Switch away from SegmentCache to the x86_segment_descriptor that is already used by read_segment_descriptor. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_helpers.c | 50 ++++++++++++------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/target/i386/emulate/x86_helpers.c b/target/i386/emulate/x86_he= lpers.c index c817015ef9..63bae3582f 100644 --- a/target/i386/emulate/x86_helpers.c +++ b/target/i386/emulate/x86_helpers.c @@ -43,49 +43,37 @@ static CpuMode cpu_mode(CPUState *cpu) return m; } =20 -static bool segment_type_ro(const SegmentCache *seg) +static bool segment_type_ro(const x86_segment_descriptor desc) { - uint32_t type_ =3D (seg->flags >> DESC_TYPE_SHIFT) & 15; + uint32_t type_ =3D desc.type; return (type_ & (~RWRX_SEGMENT_TYPE)) =3D=3D 0; } =20 -static bool segment_type_code(const SegmentCache *seg) +static bool segment_type_code(const x86_segment_descriptor desc) { - uint32_t type_ =3D (seg->flags >> DESC_TYPE_SHIFT) & 15; + uint32_t type_ =3D desc.type; return (type_ & CODE_SEGMENT_TYPE) !=3D 0; } =20 -static bool segment_expands_down(const SegmentCache *seg) +static bool segment_expands_down(const x86_segment_descriptor desc) { - uint32_t type_ =3D (seg->flags >> DESC_TYPE_SHIFT) & 15; + uint32_t type_ =3D desc.type; =20 - if (segment_type_code(seg)) { + if (segment_type_code(desc)) { return false; } =20 return (type_ & EXPAND_DOWN_SEGMENT_TYPE) !=3D 0; } =20 -static uint32_t segment_limit(const SegmentCache *seg) +static uint8_t segment_db(const x86_segment_descriptor desc) { - uint32_t limit =3D seg->limit; - uint32_t granularity =3D (seg->flags & DESC_G_MASK) !=3D 0; - - if (granularity !=3D 0) { - limit =3D (limit << 12) | 0xFFF; - } - - return limit; + return desc.db; } =20 -static uint8_t segment_db(const SegmentCache *seg) +static uint32_t segment_max_limit(const x86_segment_descriptor desc) { - return (seg->flags >> DESC_B_SHIFT) & 1; -} - -static uint32_t segment_max_limit(const SegmentCache *seg) -{ - if (segment_db(seg) !=3D 0) { + if (segment_db(desc) !=3D 0) { return 0xFFFFFFFF; } return 0xFFFF; @@ -96,15 +84,15 @@ static int linearize(CPUState *cpu, X86Seg seg_idx) { enum CpuMode mode; - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; - SegmentCache *seg =3D &env->segs[seg_idx]; - target_ulong base =3D seg->base; + struct x86_segment_descriptor desc; + target_ulong base; target_ulong logical_addr_32b; uint32_t limit; /* TODO: the emulator will not pass us "write" indicator yet */ bool write =3D false; =20 + emul_ops->read_segment_descriptor(cpu, &desc, seg_idx); + base =3D x86_segment_base(&desc); mode =3D cpu_mode(cpu); =20 switch (mode) { @@ -116,21 +104,21 @@ static int linearize(CPUState *cpu, break; case PROTECTED_MODE: case REAL_MODE: - if (segment_type_ro(seg) && write) { + if (segment_type_ro(desc) && write) { error_report("Cannot write to read-only segment"); return -1; } =20 logical_addr_32b =3D logical_addr & 0xFFFFFFFF; - limit =3D segment_limit(seg); + limit =3D x86_segment_limit(&desc); =20 - if (segment_expands_down(seg)) { + if (segment_expands_down(desc)) { if (logical_addr_32b >=3D limit) { error_report("Address exceeds limit (expands down)"); return -1; } =20 - limit =3D segment_max_limit(seg); + limit =3D segment_max_limit(desc); } =20 if (logical_addr_32b > limit) { --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365361; cv=none; d=zohomail.com; s=zohoarc; b=hLyBRS/mqoP4R43AftZS7ltmTzb3G/harv6dMontWxqh3e3OERIQEO9tckk42niNmzAudG/HVOq6dOyNqqsodZMGVQzXVRdXsNt4uCykggKwNHmEdBrP93Eawm1mXLXIRlUcOaU4fR9fn6lMEPqh9T5TpEM5JlgHxKZeptTFhqY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365361; 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=eaxFbDbhOhjNq2FXCuR8YCCB4ResW+p9AOTyVZ7pRBM=; b=mrl4EF83gDtreGKICFQ5zxiMrqeRxxGoEGlVjZfpkHbQAI+x7homvbTLohHhs3km1QIoU9h3M1ewizFq683duCRCBDH0mr6SxiiR/kwdD0KtjEKJv8TTuXVSan4BXbCzobgCTccZparaJB9OvpwZN6sGOaVKsH1OUhRFP+GCMis= 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 1774365361410869.5260466352111; Tue, 24 Mar 2026 08:16:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53U4-00078V-T2; Tue, 24 Mar 2026 11:15:56 -0400 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 1w53Sz-0005vI-6C for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:56 -0400 Received: from p-east2-cluster2-host1-snip4-8.eps.apple.com ([57.103.78.11] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53St-0005uX-Uv for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:46 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 6D409183533B; Tue, 24 Mar 2026 15:14:38 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 855C418014A9; Tue, 24 Mar 2026 15:13:56 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365281; x=1776957281; bh=eaxFbDbhOhjNq2FXCuR8YCCB4ResW+p9AOTyVZ7pRBM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=TZLuxECwUf65dPtY/UeVvllu3dtO6qrTrkXk7jLTXD6jgzVJgHXWBPTS64dqZq1of/0wUjThr/tziRS5Y41233xjDGUTboBdip18yKr5xyYD0uXMXRKklIk0xNS20XSFWQ4gAakNhujppSwjbDOxuLACioI8CMPOFLGancA3sgmwhvTaN/CRt/wsWRSYPrOlqXZQsUDjJ8V6LBfFp8xVtEdG42wD7XK5bMuB2DBl3FqChOUQghz3WW3Co81cV1p6DnP+zMpRDPFLMHQsdSe7pqJrpKRdy3YCLe+9F8vCCr/mNDPd9ywUokTg3ZFRnI69zgtD8LwDkmYunhbts1He+g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 11/12] whpx: i386: fetch segments on-demand Date: Tue, 24 Mar 2026 16:13:22 +0100 Message-ID: <20260324151323.74473-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=cqWWUl4i c=1 sm=1 tr=0 ts=69c2aa5f cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=dLhstIsYVbaQZ-P_MTUA:9 X-Proofpoint-GUID: j9m_XXPfehx_MaDjj0qXH28n0o0_zWQ_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX7JJnZCx+eXMu GLHM7KPCjgQk+76KwLp37gpkDjwzdlZYlz2JGqT4L+qwCUwef4TV/3kT9aLmG6b8OlB84PFeIyG AJnTNwit9EXS6vpe6L5qy3EBg4GLqlxXkSf6giPKoOQ8Wt48Ysq3gYSPp6/GdvR2jO3UMABSjmX uHrn8DPjfHL6pkn8mmfcav5nNFZI14QSgoO4uCsFdMIuvEcw0NDpaBJU0dRSUUMD2CXOuJGvptY 1Np6GjNS3eBcmeu9J2NKbba664w2WVw8vO/8yqcg2tTVSsZPXgB4ZglPI5usK/ZQ0sydhnd5rC+ hFpC4sHXKswX87WogTr6WFSss5zRC4AjB8uBr2gTdqqNcvZKzpbGW1AhBDXsZE= X-Proofpoint-ORIG-GUID: j9m_XXPfehx_MaDjj0qXH28n0o0_zWQ_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 lowpriorityscore=0 mlxlogscore=883 malwarescore=0 adultscore=0 clxscore=1030 mlxscore=0 suspectscore=0 spamscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.11; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365364439154100 Content-Type: text/plain; charset="utf-8" Instead of save/restore, fetch segments dynamically. Rely on the fetched state instead of loading from memory. Or, if available, on the VM exit context. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 71 +++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 71b33a632a..6f23278642 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -868,21 +868,70 @@ static int whpx_handle_portio(CPUState *cpu, return 0; } =20 +static void whpx_segment_to_x86_descriptor(CPUState *cpu, WHV_X64_SEGMENT_= REGISTER* reg, + struct x86_segment_descriptor *desc) +{ + uint32_t limit; + desc->g =3D reg->Granularity; + + /* + * Hyper-V can return reg->Granularity =3D=3D 0 + * with a higher limit than 0xfffff. + * + * Detect that case and set desc->g + * with shifting the limit properly. + */ + if (!desc->g && reg->Limit <=3D 0xfffff) { + limit =3D reg->Limit; + } else { + limit =3D (reg->Limit >> 12); + desc->g =3D 1; + } + + x86_set_segment_limit(desc, limit); + x86_set_segment_base(desc, reg->Base); + + desc->type =3D reg->SegmentType; + desc->s =3D reg->NonSystemSegment; + desc->dpl =3D reg->DescriptorPrivilegeLevel; + desc->p =3D reg->Present; + desc->avl =3D reg->Available; + desc->l =3D reg->Long; + desc->db =3D reg->Default; +} + +static void whpx_read_segment_descriptor(CPUState *cpu, WHV_X64_SEGMENT_RE= GISTER* reg, + X86Seg seg) +{ + AccelCPUState *vcpu =3D cpu->accel; + WHV_REGISTER_NAME reg_name =3D WHvX64RegisterEs + seg; + WHV_REGISTER_VALUE val; + + if (seg =3D=3D R_CS) { + *reg =3D vcpu->exit_ctx.VpContext.Cs; + return; + } + if (vcpu->exit_ctx.ExitReason =3D=3D WHvRunVpExitReasonX64IoPortAccess= ) { + if (seg =3D=3D R_DS) { + *reg =3D vcpu->exit_ctx.IoPortAccess.Ds; + return; + } else if (seg =3D=3D R_ES) { + *reg =3D vcpu->exit_ctx.IoPortAccess.Es; + return; + } + } + + whpx_get_reg(cpu, reg_name, &val); + *reg =3D val.Segment; +} + static void read_segment_descriptor(CPUState *cpu, struct x86_segment_descriptor *desc, enum X86Seg seg_idx) { - bool ret; - X86CPU *x86_cpu =3D X86_CPU(cpu); - CPUX86State *env =3D &x86_cpu->env; - SegmentCache *seg =3D &env->segs[seg_idx]; - x86_segment_selector sel =3D { .sel =3D seg->selector & 0xFFFF }; - - ret =3D x86_read_segment_descriptor(cpu, desc, sel); - if (ret =3D=3D false) { - error_report("failed to read segment descriptor"); - abort(); - } + WHV_X64_SEGMENT_REGISTER reg; + whpx_read_segment_descriptor(cpu, ®, seg_idx); + whpx_segment_to_x86_descriptor(cpu, ®, desc); } =20 static bool is_protected_mode(CPUState *cpu) --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 13:20:00 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=1774365400; cv=none; d=zohomail.com; s=zohoarc; b=i6Uff6LwxM1oQaZIf9L4I0x4nailczscWLu+j+ix4iFWsqp4A6c2qAmn9vIAYnfuzeIEl+BbZKQsyz+bXxxyyz3CY1UVZcf9azA55sr2oTC/QKgXynO2eEFeVzDHk5hGm/LRQ2aDusDgrHty8Jx+Fs8m2TysNh/zruIj67NdFPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774365400; 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=zQcPeomdXccfH+MbZAPd430h2qraXqNbsqETIXZDarE=; b=YeYXQQYxnOz4CQRmudJAp0KrwyNa8NvARwlz1xCoI0kC8v9lrnH6fbX84xN+la163GfwfgAx9wPsCA3e4sJuZgfV0FJFpMmscYNRoBj9hz0u5ywVXTYI2iU6HlLQe4KR0srodxvyh9hUCSnmCsBWHesvSuLvuQA6c0c9K5Rtx6w= 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 1774365400314669.0471891542616; Tue, 24 Mar 2026 08:16:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w53U7-0007It-8Z; Tue, 24 Mar 2026 11:15:59 -0400 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 1w53T1-0005vS-0B for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:57 -0400 Received: from p-east2-cluster2-host9-snip4-3.eps.apple.com ([57.103.78.66] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w53Su-0005ug-Ol for qemu-devel@nongnu.org; Tue, 24 Mar 2026 11:14:50 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPS id 5BE121816450; Tue, 24 Mar 2026 15:14:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-60-percent-7 (Postfix) with ESMTPSA id 0F36C1814D00; Tue, 24 Mar 2026 15:13:57 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774365283; x=1776957283; bh=zQcPeomdXccfH+MbZAPd430h2qraXqNbsqETIXZDarE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=dnuuG0YoKT07W9X6t0y9Uq9f2JjW7+OHA6N2p9QcfNxzBUCBE7SkOIzNoKQQpe5EF9lUuEiwAwfB9RuM+CziZm9nmHTiCcAgoSiTE8TSUYP8xDhC8NkcTLy9jHAvyjWxVDiK1T3/o8n1DBj5idQa60C9kmjiaTcW/MfPSGxlPFhEbjYc3LYA3G6PPx/FIA3PjOXV2kCuCQCG1BX5slr4P9UCi8NbqJ846s3HOR5B3bAXUCX6VlhgVLCFLTs9hfrqo/Ngw8Wx4o1JYhNsDft4u9ld+z6umbUo9s6eaFrXvU1Z5E3BMZ+4VEqZuZHYywlCXPZJ8C8imewq9Uxe6UE7IQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Mohamed Mediouni , Wei Liu , Phil Dennis-Jordan , Pedro Barbuda Subject: [PATCH v3 12/12] whpx: i386: fast runtime state reads Date: Tue, 24 Mar 2026 16:13:23 +0100 Message-ID: <20260324151323.74473-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260324151323.74473-1-mohamed@unpredictable.fr> References: <20260324151323.74473-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=AobjHe9P c=1 sm=1 tr=0 ts=69c2aa61 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=WK8LibQvd4XDxIxmQ_8A:9 X-Proofpoint-GUID: Oejcy40_NUbP154VkmSDFSXO-xZFPkw4 X-Proofpoint-ORIG-GUID: Oejcy40_NUbP154VkmSDFSXO-xZFPkw4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI0MDExOSBTYWx0ZWRfX0Mt18A5WgCh/ a88coKuXK4Wpb2/XyZRbCR9rHkw3fl4g7Sfn5h2gWvJDgvvCTM0/BrdNNXigtGm5tGMaP5TQN4h iV1nmSV4rsefAy4ohYzC8seUyDkQwqDhXCMRYRLyLrKwgSLB4lkBcD+256BfLD02h4u2HBtQO4B M/rYace51fXvNHS1ZDqtgZDhbGYdURL+y7HkSbCsQpki1XitZPGVmrb2VtELZvCxUL6ZANNr3HG 8o3O9RG+lU84Meb+OZWicp+OE8w89izP8abiIGdQouacbhWLuemqODGWMQqXNjczWjtV0no0fKj WMC7JxGbTLLagbR+Em1DpeQVLYhGpm17U85AXXAvsf47M64PE3eX8OOG/FFJQQ= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-24_03,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=790 malwarescore=0 suspectscore=0 adultscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603240119 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.78.66; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_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: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774365402959154100 Content-Type: text/plain; charset="utf-8" Now that there's an on-demand interface for fetching CRs and segments, only query GPRs and query everything else on-demand for vmexits. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 77 +++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 6f23278642..acae61e089 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -156,6 +156,26 @@ static const WHV_REGISTER_NAME whpx_register_names[] = =3D { */ }; =20 +static const WHV_REGISTER_NAME whpx_register_names_for_vmexit[] =3D { + /* X64 General purpose registers */ + WHvX64RegisterRax, + WHvX64RegisterRcx, + WHvX64RegisterRdx, + WHvX64RegisterRbx, + WHvX64RegisterRsp, + WHvX64RegisterRbp, + WHvX64RegisterRsi, + WHvX64RegisterRdi, + WHvX64RegisterR8, + WHvX64RegisterR9, + WHvX64RegisterR10, + WHvX64RegisterR11, + WHvX64RegisterR12, + WHvX64RegisterR13, + WHvX64RegisterR14, + WHvX64RegisterR15, +}; + struct whpx_register_set { WHV_REGISTER_VALUE values[RTL_NUMBER_OF(whpx_register_names)]; }; @@ -593,6 +613,47 @@ static void whpx_get_xcrs(CPUState *cpu) cpu_env(cpu)->xcr0 =3D xcr0.Reg64; } =20 +static void whpx_get_registers_for_vmexit(CPUState *cpu, WHPXStateLevel le= vel) +{ + struct whpx_state *whpx =3D &whpx_global; + AccelCPUState *vcpu =3D cpu->accel; + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + struct whpx_register_set vcxt; + HRESULT hr; + int idx; + int idx_next; + + assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); + + hr =3D whp_dispatch.WHvGetVirtualProcessorRegisters( + whpx->partition, cpu->cpu_index, + whpx_register_names_for_vmexit, + RTL_NUMBER_OF(whpx_register_names_for_vmexit), + &vcxt.values[0]); + if (FAILED(hr)) { + error_report("WHPX: Failed to get virtual processor context, hr=3D= %08lx", + hr); + } + + idx =3D 0; + + /* Indexes for first 16 registers match between HV and QEMU definition= s */ + idx_next =3D 16; + for (idx =3D 0; idx < CPU_NB_REGS; idx +=3D 1) { + env->regs[idx] =3D vcxt.values[idx].Reg64; + } + idx =3D idx_next; + + env->eip =3D vcpu->exit_ctx.VpContext.Rip; + env->eflags =3D vcpu->exit_ctx.VpContext.Rflags; + rflags_to_lflags(env); + + assert(idx =3D=3D RTL_NUMBER_OF(whpx_register_names_for_vmexit)); + + x86_update_hflags(env); +} + void whpx_get_registers(CPUState *cpu, WHPXStateLevel level) { struct whpx_state *whpx =3D &whpx_global; @@ -608,7 +669,11 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel = level) =20 assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); =20 - if (level > WHPX_LEVEL_FAST_RUNTIME_STATE && !env->tsc_valid) { + if (level =3D=3D WHPX_LEVEL_FAST_RUNTIME_STATE) { + return whpx_get_registers_for_vmexit(cpu, level); + } + + if (!env->tsc_valid) { whpx_get_tsc(cpu); env->tsc_valid =3D !runstate_is_running(); } @@ -623,7 +688,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) hr); } =20 - if (level > WHPX_LEVEL_FAST_RUNTIME_STATE && whpx_irqchip_in_kernel())= { + 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 @@ -680,7 +745,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) env->cr[4] =3D vcxt.values[idx++].Reg64; assert(whpx_register_names[idx] =3D=3D WHvX64RegisterCr8); tpr =3D vcxt.values[idx++].Reg64; - if (level > WHPX_LEVEL_FAST_RUNTIME_STATE && tpr !=3D vcpu->tpr) { + if (tpr !=3D vcpu->tpr) { vcpu->tpr =3D tpr; cpu_set_apic_tpr(x86_cpu->apic_state, whpx_cr8_to_apic_tpr(tpr)); } @@ -691,9 +756,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) * Extended control registers needs to be handled separately depending * on whether xsave is supported/enabled or not. */ - if (level > WHPX_LEVEL_FAST_RUNTIME_STATE) { - whpx_get_xcrs(cpu); - } + whpx_get_xcrs(cpu); =20 /* 16 XMM registers */ assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmm0); @@ -768,7 +831,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) =20 assert(idx =3D=3D RTL_NUMBER_OF(whpx_register_names)); =20 - if (level > WHPX_LEVEL_FAST_RUNTIME_STATE && whpx_irqchip_in_kernel())= { + if (whpx_irqchip_in_kernel()) { whpx_apic_get(x86_cpu->apic_state); } =20 --=20 2.50.1 (Apple Git-155)