From nobody Sun Apr 5 16:31:08 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=1774305349; cv=none; d=zohomail.com; s=zohoarc; b=IFlWS/dV2quVjSPj0dERgMBNnf47CnGZcCcqhQO5E8cgK0uk6vC69R7jY8crF1T4reheuPYV5uUqRSurDiiSpeX5rs6uMCpniP3gg5ksRQGOgAwYUtIiDrNd+5qP3e/cy/ZOT8sZcuI4Kr1ldmiGEoFuy8d/n4vTiRo9SbudiGE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305349; 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=S282hqjNsKxlyFiLw80NrudThMSddHHJZ/FwnSYM0iYKVoH2uQDAOyP6JuvHvz08wM3V/HF2IhZw+UVZeHjkojZheCixRV02a2BMY2LtdJOBhe3rcbvpuXc5cR8kSjl/xvz340M12ApzFxRCgDVTkLivzYWEmuwd4iHodvLeAMw= 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 177430534906976.00713924260185; Mon, 23 Mar 2026 15:35:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrJ-0005ww-3Y; Mon, 23 Mar 2026 18:34:53 -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 1w4nrG-0005vg-L0 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:50 -0400 Received: from qs-2006k-snip4-11.eps.apple.com ([57.103.85.241] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrE-0002v1-8M for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:50 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id B9B881800259; Mon, 23 Mar 2026 22:34:44 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 9090C180015C; Mon, 23 Mar 2026 22:34:42 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305286; x=1776897286; bh=2GvRGzc1MRHwmLUZVIfY+An7ZJn+U4NKEHF+iW/SlLc=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=I1uFsDsLYN3FdtvX16nsT1uLVpmY/f02o+5igC9AnwT5cvrNCAGYAbu56+H8S8VZaZlVegXElnOznpL0wgggDK7fLou1nlNzdM2Mh4QuvhxB/tDl7vxT3p3saO/LtrXpbUPbNL8g6fuyKmAnM40tswZ5/Br1LqYxvaMG4Lqm4aem5yc74rJ8AIFzinN7hAATuE9QZ+tDGRsr5Jcee4P+Dk+Ixy+ExaJLq7J4XHx+YLjAqE6NkaJPPDJKJQ7RHSuaNMx+bAENy5sM0uoQNRwQKgeECzArUgCsxytY3CiYHMoUluNdDWbbHW44oaZvBtWKiA4DOmwYj5G4S5FbEYcZ1w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 01/13] whpx: i386: workaround for Windows 10 support Date: Mon, 23 Mar 2026 23:34:22 +0100 Message-ID: <20260323223434.81780-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=QO1lhwLL c=1 sm=1 tr=0 ts=69c1c005 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0RUPog5Yt9CtxV4tMQEA:9 X-Proofpoint-ORIG-GUID: 0qiWd3RCQAO12ewKMcd9FCSzVBTj5Snc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NiBTYWx0ZWRfX7KXOIe6RsOoj hwhgIqjn8OIPJRg5Mp2XO9z+gDOxMB96R+hh8YJOwMSaexEPAMHDfh3ZKItjmMDjAssdBT+EJzq t8vjVh8Jl7i1w5SItmvd/jfRGFiRtyRCxUPMGg2VMFvUiPhMoETHK9AX5Lz9PqFVQnelHrZCM7z /HxoDvLuAuFtPx+ZmLldd4DFGd6jmDkSTCPrKgcN6HtsiGsDoZXjl0OBNWFkdj6m1lWiQlj3S7Q n40EaSvlAwawCC3D5cyCF8dY2OFJhh9Rjcflu/Gj1vKbJ08KflYa8igPoVuUpi9nivZpkCEF8TQ KB4V2Uocx2UyFqg/qqpdhSLdR4CXwojBt831L0IFf0m8JwbtLfwm4UEbXipnjE= X-Proofpoint-GUID: 0qiWd3RCQAO12ewKMcd9FCSzVBTj5Snc 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1030 lowpriorityscore=0 mlxlogscore=999 phishscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230166 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.85.241; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305352723158500 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 16:31:08 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=1774305408; cv=none; d=zohomail.com; s=zohoarc; b=kqSfL/PhS8Jp1A7ZfMFZ3UbYvySwWJiq+5Qx0u1qga2pEwcfSaTWuT/p1N1Ut2XjJ9sI71UkfikNLig2WoS7DyAr+I1Z5Ixg8L39ZPmwkAP8U348GZ/2BzUywnG8bIrq584bxLAH84JfDg7KMZz/ocDzDkSN4oqgAYxpjA+FkgU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305408; 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=Hkj3HusAvX41Yk/yQo/Jo57VajtYhr6kiGUzG3Am0kTzSgTxHHejeO32l5rHPnTmRTEH3qAweBUmWG8MLjFPVIDicEYHETuqu14Vn61nUvWwos9Jyl/FjE4/PKLzSO6Q/TOG7bBwbOI1uQ/ALe8nKF82N1Zpd3ScKWb3qtAD2tE= 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 1774305408858209.1327944222577; Mon, 23 Mar 2026 15:36:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrH-0005w0-LZ; Mon, 23 Mar 2026 18:34:51 -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 1w4nrG-0005vh-Ls for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:50 -0400 Received: from qs-2006g-snip4-6.eps.apple.com ([57.103.85.197] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrF-0002v8-0h for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:50 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 5C43A1800206; Mon, 23 Mar 2026 22:34:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id D9CAE1800158; Mon, 23 Mar 2026 22:34:44 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305288; x=1776897288; bh=z2ljL8wNGZuOd0h+jeGsCuyzoynr3r/rNkBTVv1fgB0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=X5WcmC5OkjPi9H3XuWm7dN8JkL3i5wjqokRr+gQ7wahn0sqgJT8cc9ubdzigMl579gv7M9fqnnAlPwZuuaeAXeOfiiQiwHV2qqU/aJxN9QbJ0ZIZPC70x9MqyQwH74p0amU1etkwxNbzC0mAUT6ilpV5ikaa2noR/rby9fVIyALPxG19qYXQGZT0vQlkGntwkDGeesquQTY2agS5HoigNq4hlm/m00dX2s6GGNpeOBR9ttH7Af9C3yjno4hje9nMWby9sPpoTpVHXMx7gMYsRywSbOJJ0omP3oagZGvlLwtwJPywpiu2+4vyE2PU1bHV5sIGwjciAyrU+yLe7SCOOA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 02/13] whpx: i386: enable exceptions VM exit only when needed Date: Mon, 23 Mar 2026 23:34:23 +0100 Message-ID: <20260323223434.81780-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: Bzf6WGysw66rS9M69STm-bDteDJkiMly X-Authority-Info-Out: v=2.4 cv=M8dA6iws c=1 sm=1 tr=0 ts=69c1c007 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EmEGBKFVNSqW8m1RzRwA:9 X-Proofpoint-ORIG-GUID: Bzf6WGysw66rS9M69STm-bDteDJkiMly X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NiBTYWx0ZWRfX7DzatJrKbxuu fk9yGHEDfR2S0Zme1LEvARLjO692bq4Ecj23Wr02R1Od9VZtjWgw5k0EWSZEKvkQ2ik4OfAgjdl CAybMkpujP/XCPWw0m1p+v8HiQ49VcTPzKUqmIs/FMKyLckeOttlNIx7SXXXp8Ivh5bI/SHVGsa I6uLfMHguCMKOvp3ViwwBoQrhQzHNspkjABScXXiuZgn5NOS0xc1AHEvTrnHCponb4HgzdrGvH0 Hiy8+4WdjaJMeYEhsoGIEiKWkwV6DWVxfsI1v3yQnJ7f2f34Pst8GB9i9cnZf3nJPui2/P1TiyD YWS+ExrLVJqugYTNQzJ90gxXs+tkWAd+BcPuQBUZHZnuKkKY+gh2L/gYbvy54I= 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 mlxlogscore=902 lowpriorityscore=0 clxscore=1030 phishscore=0 spamscore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230166 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.85.197; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305411209154100 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 16:31:08 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=1774305372; cv=none; d=zohomail.com; s=zohoarc; b=X6Wk81VNUVyQty4juGrg02JVLYkvsF10L5SjyxHbYy+3P5LXieMjqAE4u4iaIo1gyvN05hzuVdqv09p9FGi/5ST2vJe8TZAhKjsGyzEPTk3ZBX7TEfceuYNIuUTWqvX4ulPFM7y6rUgaHriDcivmIPchF8icPu6uv8ZUpp+3fh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305372; 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=Jw++eqvRmitbmRKMq+jDfxM7kC+hGzBfgCzCrGcAjATUcXicK4RgjGZ8xhimDKV2ySYSdf0vUyTnY+vJwEcM4uPZvSVBTM7SwklRk4ggQ+M4Fx5hlr6HNABDYafX9HtEBdkE2CRmACtV83jacDjLyMqM3IlD09Z769pb0calf6Y= 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 1774305372328454.73602284111416; Mon, 23 Mar 2026 15:36:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrK-0005x6-Nl; Mon, 23 Mar 2026 18:34:54 -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 1w4nrI-0005wu-V3 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:52 -0400 Received: from qs-2006a-snip4-11.eps.apple.com ([57.103.85.141] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrH-0002vQ-Kd for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:52 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 67516180012D; Mon, 23 Mar 2026 22:34:49 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 81E58180021E; Mon, 23 Mar 2026 22:34:47 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305290; x=1776897290; bh=vnPfBYcDBT/4rVJAt76jW+6cbBD4K0JEvtoQvDJO0ok=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VWTOEJBAZWsT4bSFEJj3fGO/3aHn7nkpOomkHVLDhdx30n3dwOnBxZHQsggt0n3PVI1c2OTkX4NGIf6h70bgapzAa3nwiZfCvjUvAZu5lORSrnspP85wx/U/C+clpLpEO/UfDQObdN/OxESICnpt1pP+d0fQGVaNUbS5Kmiv5uFYtHMfOtfnPqHU4bFiR2I9k2ASlH45TNL3/VjZvuAnn7nXdOYRVKYa4kZ90nKLVGkf3i6Rsm9toJ7Pu6Hfqo/8KvXmn8UK1ACJ6luKOJVzfXHGhu7MxuVloZ0hd632YqxH2IdCY0jwkVf4Ykue6Zd67oYVjpmkshJxdfq7Sps78g== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 03/13] whpx: i386: skip TSC read for MMIO exits Date: Mon, 23 Mar 2026 23:34:24 +0100 Message-ID: <20260323223434.81780-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NiBTYWx0ZWRfX5kp6IMH1RL8W cZNH2IYvcyS1x7n4lCnACqZ8ApXBPEt5wuoRZLnPYXhihF562gRjnqUQFOEQUqKxoPkEH42WfZU X157N7d4S6Cvj0MHakXfnmpoPp/NrYDWeYX3dvzPjBbZ0Qiv8qa8/f/+S6pPXhedTi8fckRmouk /dr0ji1t29kUj7NysASVr+QijU40cbTJGFfemdmb5iHbvGRcDhqjW9dXsh7Zj4wBex2uZ26B699 R7eynaoRNCXGUPd+ljoaWA4XwxqR4YIm6NirgNQe7MCmbKqIxBR2q2mM75Dxx4hVpro39t1by/u P+xPiQrErrPVv6I9X2N13GbTu8r8Fu8v4DrWD6TfKbmsMrqcltRo9MWJ9wjoY4= X-Authority-Info-Out: v=2.4 cv=CsOys34D c=1 sm=1 tr=0 ts=69c1c009 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NP4je1IWzm4tDGSucAQA:9 X-Proofpoint-GUID: EVHpVAjYRaf25WIObVqSuEXa92CHreeE X-Proofpoint-ORIG-GUID: EVHpVAjYRaf25WIObVqSuEXa92CHreeE 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=676 clxscore=1030 bulkscore=0 phishscore=0 mlxscore=0 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230166 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.85.141; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305375216154100 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 16:31:08 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=1774305397; cv=none; d=zohomail.com; s=zohoarc; b=Cw3Ou3SOqSWmi6G0844nGIa4X9ZkGw3ujAjTQgktfhgJ/aTBSuEH2pp1GrjrATah0xDURg3JNcvbf/2/n0UqvBpfoVZOn7ayq05byMte9/LDR+WWn4QgIsQLByu5Y8ODmGMC88WzhvDYGdaL1Fk09agnZcYyJGRLLY9I240Du6I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305397; 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=EA4bZnk2hiQMtFy0d/QFV90lb9e+BPRSxhCFzvAxYlMYV5Spu+Q2hFQZbIdbCH/ZceXvwETM51/CBmbK9amCnt9SRllm9FnbYK4g53dM4BsOhFu7Iwna4+vHDfX5JHVR9i3mKZzOLVVM+iVGLa631HyAkFsOY7DDTcGcT8eNfas= 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 1774305397981991.8526631532023; Mon, 23 Mar 2026 15:36:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrN-0005xd-4T; Mon, 23 Mar 2026 18:34: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 1w4nrL-0005xM-Pa for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:55 -0400 Received: from qs-2006k-snip4-7.eps.apple.com ([57.103.85.238] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrK-0002vr-HM for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:55 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id BE3C81800247; Mon, 23 Mar 2026 22:34:51 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 8BB791800157; Mon, 23 Mar 2026 22:34:49 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305293; x=1776897293; bh=p3kP/TgGy9+75EyKQX7zRo14kGVxvhzT6oqhUrcGhLI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Aij1PmX7jd2pdyDwc+vp+JcbG0cMj4YKgAfZWqjv4I2NIeEDftfFykRv3Vq6rx0yYnoLisOtOsIkEJZCEM21Wy4B21LPJSi/rrY5hKjPW8z7cSJ+sOwzsdLBaRzgUISDKWTex0eHL64YBEcmP4mHAwY40CMCw3L/ttEnB3pmd/ebiqk3g6eiThxqTW6wG0xh3tkjeWMSkguRmrmw6o59nX1ysXoV1d2cmBhqpD0qJdy1PrtJ5F/NwsKu+p9DrTdjSy6kqNxvCfQJXRFD7CyiHshBnI/GdcCIqITwwwJRZkEznEax0rvXNhSLO4xqRLKek/VS3xcPHuXpQpoIrTtaig== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 04/13] whpx: i386: skip XCRs read for MMIO exits Date: Mon, 23 Mar 2026 23:34:25 +0100 Message-ID: <20260323223434.81780-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: vJUhQHvTtpMhkQ8BJlz1czl2LjkTx6pa X-Proofpoint-ORIG-GUID: vJUhQHvTtpMhkQ8BJlz1czl2LjkTx6pa X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NiBTYWx0ZWRfX2X8gBG5p701Q PnrdGnvhpKzyjgasoIwRAk5ggkSH+X3ZrJIBBK/M2mlPVVOt4Xr9yKUNpqjQBMk94C1uuf76Hvo cnWfYm27s/Blv25C0UYhhLCQxN8Z77sCcyJ4w0QchU6ZU8AB0JeRD5WAwvWNPmpA3YontaO9lbG jtGIsmHxQZs7pGgCv8bBnny21pl0zVTfjseh5BDig6FlbJ8dK/hzPTsBXBDAJYZYMe5vJlQ6QSg 9EPVyPUyO8ASK8Gox5RAWZMz3HCsl25vpWadQ6Z+T2w7CdtckDmtsMfknwA9CIyIqzl7PdDfcK/ MEif8raOa+5L7O6I6iNezWxS5qQTffz0jop/5ppXIHx6qgj0Zoch3XB2uXdDYE= X-Authority-Info-Out: v=2.4 cv=T5yBjvKQ c=1 sm=1 tr=0 ts=69c1c00c cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=ytqdvofJqIjuNepkJhYA:9 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 adultscore=0 bulkscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 clxscore=1030 mlxlogscore=761 spamscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230166 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.85.238; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305399171154100 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 16:31:08 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=1774305406; cv=none; d=zohomail.com; s=zohoarc; b=RQ/4PMt8nB/YX6dl9jpK8a7qRzQ1Vvh7gH6op1h1e1TJ4E2BcJZL5Sq7doIBZe28AGcAVIOAeYbQkrdK+tCbh5rjnFAnSUCs3BvkI1C4trcW4XGMOYmovcupVPSKXBg5juXGzxH8g8KB+DS5FBv4bZ2R/H7B9wQiNvwrOmo5aEo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305406; 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=RhlPU01wiyGlDcuSk0GMgkl7tkeaIIpor3ECmob5wMFD65QKSTl3mzkNpoSuydtPUup8zA7y3loL3yXiEmINbBHqVl295xuMtmX/MW1wfgOpXnvX2sk4cIzaoKXLCI+HpjKEqKHBc8zg2yVAQXjJod+I1MZpw3n27yWGu8IpqS0= 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 1774305406516275.9361361269014; Mon, 23 Mar 2026 15:36:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrW-0005zs-4E; Mon, 23 Mar 2026 18:35:06 -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 1w4nrT-0005yy-V6 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:03 -0400 Received: from qs-2001l-snip4-8.eps.apple.com ([57.103.87.121] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrS-0002wf-Bz for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:03 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 86CF3180015B; Mon, 23 Mar 2026 22:34:53 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id A5CAC1800222; Mon, 23 Mar 2026 22:34:51 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305301; x=1776897301; bh=uAJ51zR7R15wIVlC530LHyYmi+UTEudXXGcCdwby+0E=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=AISWJbAqqZEhNboz+UMQy7vrK2JIEQuVCicv7m3CrGywUM1N7IAu3QCdcVv/8IJQumieku+HHv6lME7rcZEjc/kP/uwGA/7diQ6U8BRDqLuDc/7DgLiDh741QWk7WvH1YVFbUB5i2eC/oWNEYmKsbzq1KcqnPCqJPfbSiH4kVtccnXiTD+zR4iAtk0ptAC0n/H7qubNbxNhp1vdaqRH/TsRiqxst2QcQYXfVMN2mZSBelwXU8GSoubWGZvyM2kmLQwcI2B78YwOLTKL9KbpWhgMV5Ijg5Oa5+urMxfoHmPSxu3ORq/RoZHNS7Fp3SIxtLoTiJJaGP57FUa2bOjpGbA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 05/13] whpx: i386: don't restore segment registers after MMIO handling Date: Mon, 23 Mar 2026 23:34:26 +0100 Message-ID: <20260323223434.81780-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=bZxmkePB c=1 sm=1 tr=0 ts=69c1c013 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=-4eTQGsHVEe5RITbnwAA:9 X-Proofpoint-ORIG-GUID: w-uH5WJELv-hxVlr5oqjA4ijwLxa5FP0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfXxzyEEsG+WiTR t1juyOEX7IGBmpjWmCWxV3YioLtzfT4fKuVxqHHbLTOzTwoH/jScQD/7RQZhDmepIfcg/b4+9r4 umIRa1FxDeSySDa2lgKIb3Z8ljhjUqtV6bYvi91R7cA/H/azU/oTiu3G4ePhjBPrcdIlQO+CMiC 3sqXX+bg+LM8D/2Om8ko82x62kpQpQ4uJxLv5wnHEvIWRNM9LK0P8ko7B6AA/AB/37eQM0oGAFb MlMKcXblMXwH43io/6p8BWcmS96zy2BxZY3P9y13ZBPstxDJ346FIV0rmOj9xcxCZR5PVRaNJhH f1F9ZrldlMDvRryorqwkJrEmrZof2n6MFj0hkpYakPWBxuqGzRbCuRFR8UbHJU= X-Proofpoint-GUID: w-uH5WJELv-hxVlr5oqjA4ijwLxa5FP0 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 clxscore=1030 adultscore=0 suspectscore=0 phishscore=0 spamscore=0 mlxlogscore=800 malwarescore=0 bulkscore=0 lowpriorityscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 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.87.121; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305407494154100 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 16:31:08 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=1774305397; cv=none; d=zohomail.com; s=zohoarc; b=RMOg0Ri00SnHkhNdYwo4QkBJe9njCsND+LjEVNPuwfYEwmB6ecUGKVHWHs4M6+WcA5a9yMf8Q+sU4TCNk+NCIFZ31LIePbFzRkIVyyUuEYHPyAl4Pnu9ZC6jJzh5XIa+AclTxlTZA5ci7KgM+tJQn2yz+dzaQn1XYsb2i2/v6xY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305397; 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=MzkXiKT8imLiuxVOYYVEXIenWVY2V8V+mZfVjtd8f5uMrz2VX01CbRR6StYLZg9VIL7qV9bUyvmHbqnrj3dk1D75+NL1GUZVjDUpTY0AavAMPkh7cuzWh2UjZrknsmHr04sZ2ePnDfH7tmJK2cDQD2HDjNPMs6ac9JvUIM/Tqf0= 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 1774305397388598.5834427581586; Mon, 23 Mar 2026 15:36:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrR-0005yY-MX; Mon, 23 Mar 2026 18:35:01 -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 1w4nrP-0005xz-JZ for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:59 -0400 Received: from qs-2001e-snip4-6.eps.apple.com ([57.103.87.49] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrO-0002w9-6m for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:34:59 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 7252A1800232; Mon, 23 Mar 2026 22:34:55 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 4DFA81800138; Mon, 23 Mar 2026 22:34:53 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305297; x=1776897297; bh=NZnj8yCbumSadExeNcgwgqV2muxnORrhx0HseCqyro8=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=E396Tm2mgykCbPOQiMJ9sjE+Ts16O2EtT9Do2tC12LGHaYqKzywgoc9BO3E5og9KrTXIGETtMGdSAsa76tieUBJkKtYvzqX3MjPgPbJOd76tBptcaNrSvK2UmdbRbfQQCcaW7Ywq4k+llm7wO8eZMBpEeMdQfr+02q+JX1wyErlMjuZm8Bpl1/C2HXTiXkwpPdxuHXKDvsdxeUGrfmrDoQkLfWR/bd6ZdhjbIzzIvH54XDPM9dK1QpkGwS3npx0RhGpulACTFWyzFpxohAXwnzfTH5M3HTyku+GdtGr8TJxWMinGdoPs0JRsW5C/outsSESTt/nr8ZLgQjPv9BfUhw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 06/13] target/i386: emulate: add new callbacks Date: Mon, 23 Mar 2026 23:34:27 +0100 Message-ID: <20260323223434.81780-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX0IYDUM5FvIHf tZlvlilRcWcqUSDONYwNy29Aw9uLbDgbVA+bGze+4iR7V+7YZW2jCX6wIDqaKmQPR1ILhhMQrE+ pNE7n7i/a1HBcf+LHXtAuWgSkDzdyWJVglxcLtzyJZD9it5HAxlJTHYrjH/W3lWNWQA9bUbMbVI 2zL4fsqjc0NAmwjwIibKE+tRN7dG/BMKbukDh4XtV+Zley/0UaqTQMJ0DCsZeR1n+nCnw4Hrg+X YbpAhFaVBxvjWatCPqJZMKxKeVvNxCGiHGIFq8lUYqkDzQLZPBwiVsOzsmy3A547DbLkKcXQvzA 4nJpqkMBb2HAUY/59xVSanHYBo/HsjsGYSdLZ3XeKSJ+8ZyS1kXwOL+TAgm4QY= X-Proofpoint-GUID: _OY3AxAYWejgLHQpb3xUGKfgsdvmRKag X-Proofpoint-ORIG-GUID: _OY3AxAYWejgLHQpb3xUGKfgsdvmRKag X-Authority-Info-Out: v=2.4 cv=QuJTHFyd c=1 sm=1 tr=0 ts=69c1c00f cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=AM0uniIKGEjy2BpxYl4A:9 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=854 phishscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 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.87.49; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305399157154100 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 16:31:08 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=1774305383; cv=none; d=zohomail.com; s=zohoarc; b=JJBtBLClm9ZwiVOm2aaiYRAtPmWjmKOnOQYEUX7b+5HVQHvMrpgRzuAKSw/7JpGpJaS938b1tMKVKm7vK6i8rcBDrw88KEGkzQp+pnx8Zhza/QujmWy7Gd8XqIPoJe0XpPylKVmSAXBGLjh3IBTTeuryWmePYaU31Rk7ogPZiXY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305383; 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=daQXq2JCS1TvfZT5FXPAB9ffmUMeLGWQHHVoYwhWGBkhh2P8sU/LKY5cdgjfKdM3mYVjGQSV3yvQMZmD74JuI/uDxEG2PHp2k/UlKhY1bVwVRz7KkI47yfA+Tnxz1mzu5QLbS0jgSj1joNeXM14NX1EJ0FAy3AQAwsIg3AMWRg0= 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 1774305383638842.5366931476188; Mon, 23 Mar 2026 15:36:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrU-0005zL-Hn; Mon, 23 Mar 2026 18:35:04 -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 1w4nrS-0005yh-Nr for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:02 -0400 Received: from qs-2001g-snip4-7.eps.apple.com ([57.103.87.70] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrR-0002wL-7X for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:02 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 847EE1800260; Mon, 23 Mar 2026 22:34:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 3A61B1800158; Mon, 23 Mar 2026 22:34:55 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305300; x=1776897300; bh=xmiWoWUwFQC07+7l4Wa/YhNMVuZwBdr5x6NXirvfyaw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OvYWV047tjkjK1Nij/w06Ntmx3nM932WujaqqC9+MtJB3KpKdeG+ga0YUzM4tMHfR5Wn4iBq2Jf6Q99rXdL2mtqDWYqsr+O9ek1rVbkqqCLT3AFtRRz3dJU3+OiqLeZMHbDmIs+MWGo/tzv5jPOlsW9iM/NB3kK1O9jMobXwepfKGgfqkiU9N8SKhMiM05aIg53Fb6ZlvcMu9BpCRp7dAKAfDkxU4ak2lszMCFF6KzKAyLl38Ez3n5e2D2RZZhpTmtFMXLQYZ+EBBbw8QRFpnKPHRUPaT6m5VtY4sCHpT+RjkJvoZEF5bCia+yBAEpkU62/LFx5xuuhcQ5+W1Vv5gA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 07/13] whpx: i386: add implementation of new x86_emul_ops Date: Mon, 23 Mar 2026 23:34:28 +0100 Message-ID: <20260323223434.81780-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX/jCKsaYbBqkt G6yPLMP0ITUztGseeRl++pVTciFY+YCcJcrbJRzicrTD6jqiSaogSsh2m6+f1Bc+LH4d4RuERKR As9DqQ0qhYPE8un4Mk14DY5bTuzhqbLoBBrMdDTfLGF2ye/CsRrO0CSxnoaa2SqxDuEZLjtPggG IUSzx+tOwdtLhS/EpY8whIGxc8QEqz/iukVkV7dCUKxtHTDTFalcK69QwJQN2+XeAt2n1cAhK4b +ViAvyV9meui8/29n1dapDNIKyhV927AuVXMV8C5sa+0jMDR9sxhBWUwImC6YO0zcgafLoIgoxg uIAuwDm7TTP3yGfuOlVRkedqJ3ozJvVDe4C3CnVE+ifI4ctIvaQKbEo0i27YWU= X-Proofpoint-GUID: UTn4qKWtrsKEfTsF-BTK5QtMTR0nDMoe X-Proofpoint-ORIG-GUID: UTn4qKWtrsKEfTsF-BTK5QtMTR0nDMoe X-Authority-Info-Out: v=2.4 cv=QuJTHFyd c=1 sm=1 tr=0 ts=69c1c012 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=od5n6cu0qASRTXmq4OYA:9 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 adultscore=0 suspectscore=0 malwarescore=0 spamscore=0 mlxscore=0 lowpriorityscore=0 mlxlogscore=889 phishscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 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.87.70; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305386417158500 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 16:31:08 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=1774305386; cv=none; d=zohomail.com; s=zohoarc; b=CEpadVT5GtxpiIVgAw2kNWVa+LJhmeAhD4bli/xhZ0bOYX+ypaYAKqauFIZeHfOLPjbER1ZdTptGZQGm0X/Kn9nF6XggmlgiSUgUvvP4OB4UzREZ0whRYPeXiXJHv49DBGwMO5VfzSATo2qXNanZYjfFryPjrQv6JtafmjG8MtQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305386; 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=SYColAfdY79JzCuccRPUwLZAXfN7HZvVpwk9ZqC1LHHGN/0HOeFiFDvxvbRLJREW+Rt3I/obi/Hwbai7T89hzXSJfXTnAsvkeQuxlXQ6fDWF90R994S8gL0kparmznyIJZYM5Mz8ajyfTTHoDcQMVg1K49aqkkMyUVtQaLKBXVs= 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 1774305386235623.5516016543581; Mon, 23 Mar 2026 15:36:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrU-0005zK-HO; Mon, 23 Mar 2026 18:35:04 -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 1w4nrS-0005ym-Te for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:02 -0400 Received: from qs-2001i-snip4-11.eps.apple.com ([57.103.87.93] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrR-0002wM-7O for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:02 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 03E111800269; Mon, 23 Mar 2026 22:34:59 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 4C20A180025A; Mon, 23 Mar 2026 22:34:58 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305300; x=1776897300; bh=RaeVoGsUxhg5XOvzFErCPDaCiYTNc+RShNyqxvJnm/M=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=KknLw6UGJ/SvaiMjYhKHqmyaZ48Ue/etl5e2w3WrsyrWyfLwkt9FNEYc6S5zqgX6ca1QzvmRR0fEedxySRgfz72RdF7tfBbyhmtTyAt0rQBPBSqucaUikMqd1Wfwi5uwSZ0fbWhwsLdvfpcV4QUfP/yWHPiyEIZ0whWKmEZQsK3j7ZtfNOGi37W0i/6eLUNRDYWAazNPH4YAm8uCc0oyaY6z4Akj+qv4YS2jvGQmk4s4B6h7lpBwBLwrHWyxZwHBnTPMLQeWwSzZST8CBQo89qBieLSkKWMCGSzQyr5h/2y0rR8SwXDEtfWrQ/wSxbcP4MA6eVDJEMYuLRMko2otLg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 08/13] target/i386: emulate: indirect access to CRs Date: Mon, 23 Mar 2026 23:34:29 +0100 Message-ID: <20260323223434.81780-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NiBTYWx0ZWRfX4HB+q2jpSDBf Y7bFmFSr7t46cCK/DRdE5Q/dS24/dXu9C2TMdHeMBNB+rkn3xbj0AJT8nYUKOZjvEOWDHTC8JQE ITxvW/Y19rzE4HQuiqkTrJIhLWfL9ofU9YFf/OchMDxVXcb+YNumlrVCh0gGaxLfASQAXsbi5ZS tSEZd9xEQR6A0LwnS7OB0ZBQY5UorQfHoqCk9U/lqUeqpmeiNCxYm1WulMo9mr4+Y5gzjlm/H/W C1jBaMQRG5tc5B+/xitGEgyQMDVuqNZdxqhs6rYnwnUbI87jsi2l0nX8dq9oDoe4s/TGC8tCHJN 40nwVLFlm5JMxaffUZh16+JJm3fGxv3ooRmCrCL1Q+K0u6CNzYW0LGXEwsyXrU= X-Authority-Info-Out: v=2.4 cv=Vq8uwu2n c=1 sm=1 tr=0 ts=69c1c014 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=_XbvW0LUL-N0uKGCadMA:9 X-Proofpoint-ORIG-GUID: LK-nUDvXO_zS87Cg8ANBBrnSIIhWjuKJ X-Proofpoint-GUID: LK-nUDvXO_zS87Cg8ANBBrnSIIhWjuKJ 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=894 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 mlxscore=0 clxscore=1030 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230166 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.87.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305387203154100 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 16:31:08 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=1774305398; cv=none; d=zohomail.com; s=zohoarc; b=FzApqzBFxZzt7wy2Dy8rr67NACuJ7W5xULs+K9c8ZFir3DA4UOGHC5GlHmR854YciM5DlfK7hzeP/FCCwg1Q+zhLzIGvkSK5nz9Z1oYfMll4OIjlIBTtIPvYUmkuYzg+cu9QLY/0c0DgvbkV1fJKRKZRKbe+Tk1WEYPhnOQMAQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305398; 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=GcAxdcArkk5sgJCBp3a/HbiKH3Mq7hQIb0btNhBa6vH1ToGvnyBt6envuGnl50CTNI+nZkAmbJZ248KIjNyeHnxBDEZRIDYZcQNCuMAzguvFipUhQBdRBtkaa5T7znCOD74NfzU2JWU+ty0Fr9KlTEsAPBNBscHIC/2suh8Uud0= 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 177430539797973.73250931073801; Mon, 23 Mar 2026 15:36:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nre-00061T-La; Mon, 23 Mar 2026 18:35:14 -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 1w4nrd-00060h-Hd for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from qs-2007e-snip4-1.eps.apple.com ([57.103.84.172] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrb-00038j-EI for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 7551F180026D; Mon, 23 Mar 2026 22:35:08 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 2A06A180012D; Mon, 23 Mar 2026 22:34:59 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305310; x=1776897310; bh=zodV20KljGzIfu43VRyDL9cMkLVaJYP9ThhIqUxnyaU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=IDf7DjTH0Wy9aLXaC+XJq5uKrnKVjR5SsuyYFR4e9t4AFYPn5MrI0sA8zy3OMSHp1MSuEP8dQSocjER1dHCZ5UN+UgC7QQQU4IfNW/799IsEn7wp4UK2Rs4iIqHWDzyWAIChDk/xA5yYwiUnfWFWJkLDD/knLwfn29sdhwf+JS85+36ravA7wUXSEcsvV70InD1OxoLsTSKxm85BvRn6pEALpFtSAm4M3diZlSzHaAnxfJUioVg08g1PA1WFqBExHfAqdsJPonn/I6OU+nMfg+scGCPOUZL6Uru27VNIgPxz1CR6I7FxaCnDQnOGkJF2RzWMaBqyBEUl1RtBrMZPvw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 09/13] whpx: i386: indirect access to CRs Date: Mon, 23 Mar 2026 23:34:30 +0100 Message-ID: <20260323223434.81780-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 22tdzJW43Dm3lE-G9mhduYTMRRYL8GfZ X-Proofpoint-ORIG-GUID: 22tdzJW43Dm3lE-G9mhduYTMRRYL8GfZ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX7pSFO+hiIDlR 09piyW6R3QTp1P5Uz/1kWZkKTjcRPwNTT9B90E2upOkkxVW/bSV/clhZhmHiFyH5wlNDVukHWLo R+T+4csQZumvHF3DRSwZwCjkxGx/BCuQQc1gUUrapMXS/8wmGk+GWLMftoq8KDL7mPonJUkH8vN KOdnl6g7RnIopNO0IJw9ZLZtwSIYkh+pVLejPJM4//efo7P2UOpxkRvikCxGSLyiBMAzawEFmbB POgRuvWkmybg6BPVK6pmQACz17HPMdESbH4eNYs5j8rOy5ZqNfygnTcb+Wf6nPylqFjdybysojJ 3sM7FdYmHaow9HC9vTGkF6A3oUC56HN7xuQq3IhX4FbDn9EkYhOeWdVReEqIdE= X-Authority-Info-Out: v=2.4 cv=K+Av3iWI c=1 sm=1 tr=0 ts=69c1c01c cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kcTmfTs-UkjvTY61EfIA:9 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1030 malwarescore=0 lowpriorityscore=0 suspectscore=0 mlxlogscore=848 phishscore=0 adultscore=0 mlxscore=0 spamscore=0 bulkscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.84.172; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305400889158500 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 16:31:08 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=1774305398; cv=none; d=zohomail.com; s=zohoarc; b=alq4dTUZOd33N8CmftuVQZWKOFFTDZzhyQ2+oMAMjj4qK2RdP3fMOdjCPyqyNBLe3hof8WY0u0jLfdvx6J0rgUH+Tmmb1vHPhuB2I0EKp8xZ5+JGo5u7sjAoedOWN7+y6aFjU10Ncut+cRhAr/qhQfxcCH2ABOuTvHec4PluKCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305398; 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=OztBuIwZE4FxNI/lPDjClbM/XXnt1c4tgtvB4CThvQl5eLXvmw4iRBcm1u6Asq8i7SBsHbLRIbV+tXbVPn8sKxOLvVXIURDn5kO46rswbOl3/Dpp7xWp5RCNy4v19xGozFULGfYpgXxZIn47G+UcGsjcZiY11VVGFpxwpVNg2v0= 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 1774305398535984.4888702486752; Mon, 23 Mar 2026 15:36:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrg-00061z-0L; Mon, 23 Mar 2026 18:35:16 -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 1w4nrd-00060j-JS for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from qs-2007l-snip4-5.eps.apple.com ([57.103.84.246] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrb-00038h-8s for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 187A11800263; Mon, 23 Mar 2026 22:35:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id D4E9C1800158; Mon, 23 Mar 2026 22:35:01 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305310; x=1776897310; bh=vl9gr3/Etwc2CL3Gr9sJC1zQGi6Rjmv81TXMHG3rpEg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=HcNsL0N7Ocewwcz8ZgBs6Ge6arA5LouepaSITW3BHQdZmnGqnZXZdmZhzzOS/Pqqltr3y9RBmVwILmFWV6P1AHADX0SrYlknpJJOXcVmwKMnG/TQOKW88wpv35dGQ4h3Qz+VI19+B1pJgUatDyhLJwALUlR8nm/LfG6U1JZWHv/lPRK/46U/Cd9GfTm5ktHI88DG9fqqTDLztkA0sfpYRu3igA1GlyQnfAeMwY1uPPMjhIpIptfeVj/bCFh1xbMM8Uj4wWharUdxeyi/JcX2TUCo5NBnLMLackmMZPPwAg5dwwVg4sRA5UBTqByXjlGcyG/AZFPpAFTIsz33mc0Z2w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 10/13] target/i386: emulate: segmentation rework Date: Mon, 23 Mar 2026 23:34:31 +0100 Message-ID: <20260323223434.81780-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX55K1HUAf1m10 SvEzJEzT4bUQre7SY4FLH96/tJ5jAwzLmP5JPX8WOZ8GktTVzICp9TXWW0qx650NpFDraHk4Dru o4buaWVM3f0jCjxiE3nNFVacet7I9yGeVKVPVl3WJU+EenVfwwCtMI8aajO2VI1mxphytT1xZjM PPmVZrEQEgRGV0vJrMWGI+/RiJa5bPLgPPwQXsu1ngJ2VCGX0wctnmshOlOSOB0RllDjUiroS1y B6Siwb2w0lzTr/Y/H/NCkXLPcBahVoyoBYpv4cigLV8TfSxVWPNizDb5C6ZoyyXvrsFMlGfuBkl 6Mjx4v2G+geNnFeT2WXIZSWbUFart3kVeE6VSxpCQn1OFThA3T3shNhzwYxeNI= X-Proofpoint-GUID: AqITrBAtcD1EHZYAnY9mQBi4mRRSIosM X-Authority-Info-Out: v=2.4 cv=buxBxUai c=1 sm=1 tr=0 ts=69c1c01c cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=vJJf33RnEMvZLxG4ysEA:9 X-Proofpoint-ORIG-GUID: AqITrBAtcD1EHZYAnY9mQBi4mRRSIosM 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 spamscore=0 mlxlogscore=990 mlxscore=0 suspectscore=0 clxscore=1030 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.84.246; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305401084154100 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 16:31:08 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=1774305424; cv=none; d=zohomail.com; s=zohoarc; b=TO33o094v2lqHYCtEGK0leE7Z+cX+E+n38A7g1KNxrsBiNcEx9ZqJ9OVA7wfmM1b+0YcDR3AQa185FtqvpS8KWEXTMO/cPcILoaJv2Tbg8bfeb7RXEMuw1WWEfFdCrTh7XQtAbjGeA9JWJWjIe3qkdPSy2kHT/Ecgr+DCKMJ1r4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305424; 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=0vNiIT+PCcYtu/Inl07uABMaMXiwBMmsj+tnEV0u370=; b=jVPgEfYRu0FeK56+Ju1wIblQL2Fg5Q1XlFhohkjB/ux/Rb/3HRRsoHHeKGh526XvJHmoLO7KDeK87OLbMKHgRXbJ70D34T9F/3hPJ+jAz6DF1HiBr7O4xTXRBNhe7amvTum7jOa+joWJgDrrzj8AekD0tS9IubhvQKBhumh5IhY= 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 1774305424345946.4324078811821; Mon, 23 Mar 2026 15:37:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nre-000618-1V; Mon, 23 Mar 2026 18:35:14 -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 1w4nrc-00060N-6U for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:12 -0400 Received: from qs-2007i-snip4-1.eps.apple.com ([57.103.84.212] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nra-00038W-Mh for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:11 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 9695B180022F; Mon, 23 Mar 2026 22:35:07 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 9568118000B8; Mon, 23 Mar 2026 22:35:03 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305310; x=1776897310; bh=0vNiIT+PCcYtu/Inl07uABMaMXiwBMmsj+tnEV0u370=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Of9V7HHEXTByEvRSGan41MLQBeajQACUJ4UYnqbCR4YxVMdYNC0Qr6i5cEtXgEiozNEqcdYun305go4A5SWM+NBemM7DszQ/OOFMGY1T3IL7BLqVw8TtlFbrSs06553wW6a/ZzLhYtlBfmNDZtFeggGQyKg20UmAGFM/Fvkn6aamXO/NoRbwkznFqcnoK5J6++t8oAzkmS2BdyUSCT4xOHexc0VbeROvu+h0mrJKM0Q5gr7wRHtAVP4V+/izO8Wy+xGYFsR2kMfI4HqYoZOD3/UyFDJdBa7rgy9KztVkkFPn6y1qluOIJ5BqVeWRke1Ca0o3JLOELGv8L/8MGuGYBQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 11/13] whpx: i386: fetch segments on-demand Date: Mon, 23 Mar 2026 23:34:32 +0100 Message-ID: <20260323223434.81780-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: rBq8JzKerwigtAN5cu_SjMQhIuSXw8P7 X-Proofpoint-ORIG-GUID: rBq8JzKerwigtAN5cu_SjMQhIuSXw8P7 X-Authority-Info-Out: v=2.4 cv=E67AZKdl c=1 sm=1 tr=0 ts=69c1c01b cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=-8Qz9FHPj4oKPzLrWQ0A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX3wZqaP7Yo0Tx zsmwFEcn8x3Kiq3j2dOhEWTegIarBN+o9EKV/c9Wy9pnlhE+sYQ4nR9p/PY8myJr9cgWM3kU53q zHe1aTwvawptDYEXcJ7eKdSnwsbhh5BezJ69ploEI+T2bul5xPbwZ+hgUOXFonbG/cxWqv4xicy mhFk6KSZ0u2OBjLnEYZN/JwjdPTdT5JUsA2RXvRLChtX9i0qnDlkcpMUZVD9GRj26nL03HzzRBC T7uefuwOnrSFHf2nha68k8aQUe0Uz0EVHwnKsGTN5QRxyCF/UoPz2HRamG9Dj6+8ooR6nDDdiRi QjwR8NV5iOtgSZx99nqhjPcSUvMJl1VKlrWdZ9n13aBrsQA6tph+FN6qfm7Tno= 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 mlxlogscore=856 lowpriorityscore=0 spamscore=0 clxscore=1030 bulkscore=0 mlxscore=0 malwarescore=0 suspectscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.84.212; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305426534158500 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 | 55 +++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 71b33a632a..f278a52451 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -868,21 +868,54 @@ 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) +{ + x86_set_segment_limit(desc, reg->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; + desc->g =3D reg->Granularity; +} + +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 16:31:08 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=1774305372; cv=none; d=zohomail.com; s=zohoarc; b=dVDLFtZZI/CKT0/0KIK2OvZNkWURvi2qtVlIHYglJR+Nq7VkeoHeU4yhUKsGgYOHRFamNGKRjggXNlNDeMfKDZpUXiQ7BsAIrpV6EcoSOGgkSdbp3OY3VczMmwhjKKp/DdBNv/yLFOG9ZwnfOYA2KPWLV6y+SQP0KvHdUu0RG1w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305372; 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=Dxuu705L/6pIYAaHnm1Gp8R0fMhxU14YZ8WzsFxht3k=; b=RCLBBvoEO2qHUVL4QHYP3LVlBstgBZKrI6N71ZsmRJC4QThOLU+0I4yberZTwtDBGs0cvnMcSW9pJTXAQwmT/fVv9j3NG3p6+ZbVuNpFMiR61Zn/er/Y1XFT6fjBpq5qkJpdV2QlfB5hM17tIfcelzSjlgz6H6i9a5YHAuZUYVQ= 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 1774305372424408.0136588591763; Mon, 23 Mar 2026 15:36:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nrf-00061U-2p; Mon, 23 Mar 2026 18:35: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 1w4nrd-00060g-G0 for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from qs-2007j-snip4-8.eps.apple.com ([57.103.84.229] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nra-00038Y-QS for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id C02DD18001D8; Mon, 23 Mar 2026 22:35:08 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id 8BA8A1800120; Mon, 23 Mar 2026 22:35:06 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305310; x=1776897310; bh=Dxuu705L/6pIYAaHnm1Gp8R0fMhxU14YZ8WzsFxht3k=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=JiWgmap7pzk7yU5djNGeXVKeUUBtPhd87q/ZHVrDZ5QUHehwYzF2iYSmgwuRd5mzwOnmnwt+d5l28MdD7dq1tuA+TsCb1fyfMe3CWbNcuMbHapoaLcEYa219cQwiIB+ESlFTIoRJ5zYQu0Ur1HcD8hPJKxqmfdt9RyVzHEj4jdbOW4DAY4u2BgIJUfbubZUGN0Ts+jXyqjYJnbFLgdBgGJgFccB0nnV5oMWqquVJ+V8wIj8vzAN3kNOjUz43Ih8CTO4c8tPy1FameFgpLkgO+E5YEDP4BmaTM7SZHR+P5EQdQ4t52xxxOV3rb9RrHRqBtf5wky9kzap4QdodwhauWg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 12/13] whpx: i386: workaround for segment granularity reading as 0 Date: Mon, 23 Mar 2026 23:34:33 +0100 Message-ID: <20260323223434.81780-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfXxCIi+MigNaQ5 zCu3NBXeFot4hhaF4WWaS9He9K4CwbaDJz2Ymg0X6F1LMD8/3kQMajoFDjcaZvhhjtd8e1F525C UzRpABjttNesR3l4WtpaEdQ8DoU7daVyf0DMjzRLUHjo24KjS5SoYWYhfq3QrcjxUxKAgY4mhZs CPITW1KypaTLbFvIPWwJfsDpp1DX04Hx5dc9JklBkitR4lieSRxdvTBSqzQtMoNG8aW2p2grWn8 28n19A7USjagS4O9e9aKy8T1kDjLSKOrrr7ULuurSO+UQwB/WdRI73RYXdRIm6nKqxe6eP1Wneg 2T4BcZzBHmRk9hQm2Ig9iGUuwPOQH/i1NDO0CXIc+SEv3+VXUskdAAkpJ5ZBHw= X-Proofpoint-ORIG-GUID: pH32kNvUkBVEkF42WMxL9YDeq3QXANh- X-Proofpoint-GUID: pH32kNvUkBVEkF42WMxL9YDeq3QXANh- X-Authority-Info-Out: v=2.4 cv=J6anLQnS c=1 sm=1 tr=0 ts=69c1c01d cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=_6j6WPEMpVvK3myFejsA:9 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=819 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 clxscore=1030 malwarescore=0 adultscore=0 lowpriorityscore=0 phishscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.84.229; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305375038154100 Content-Type: text/plain; charset="utf-8" OS boot triggers a Cs segment limit assertion, while Hyper-V reports that Granularity =3D 0 despite the limit being 0xffffffff. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index f278a52451..d87afceb08 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -916,6 +916,25 @@ static void read_segment_descriptor(CPUState *cpu, WHV_X64_SEGMENT_REGISTER reg; whpx_read_segment_descriptor(cpu, ®, seg_idx); whpx_segment_to_x86_descriptor(cpu, ®, desc); + + /* + * Workaround: vcpu->exit_ctx.VpContext.Cs.Granularity is 0... + * + * OS boot triggers a Cs segment limit assertion, while + * Hyper-V reports that Granularity =3D 0 despite the + * limit being 0xffffffff. + * + * This particular issue is much easier to trigger with + * the instruction_stream logic disabled. With that enabled, + * plenty of guests boot just fine as they don't trigger the + * immediate in CS read from a trapped instruction case. + * + * However, 32-bit Linux on AMD triggers specifically in + * https://lore.kernel.org/20250422234830.2840784-6-superm1@kernel.org + */ + if (seg_idx =3D=3D R_CS) { + desc->g =3D 1; + } } =20 static bool is_protected_mode(CPUState *cpu) --=20 2.50.1 (Apple Git-155) From nobody Sun Apr 5 16:31:08 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=1774305427; cv=none; d=zohomail.com; s=zohoarc; b=I1i3wies6lhcBF/1gihbYXzq1ukXDzdXmsZCxxY+6W54+0kCmmZU0FwxN6xhCCX5kV4eXzVtvSN9O4rA60t7mE1ZrjE3qG/yEKJwS1Lsz6cBM3537IetKO8NzRXvX4ctWxic6lv8xbXcIviM2tptXmGQalCF9oWnFGPflic6hCE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774305427; 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=PdT7IERfl0p/CeTQ+XFKTtOdCZ5WIYKOrnKXReIT4Ds=; b=mL5xgwPaH9KRmEmZyuNFpFrr0s7kgkiFhNfXtOh4L7/4U2UvFV5TvUkJiv0aF+p4RQitGAveuHbs2MXZPQkIgp5wnKtBrWiOa+YsRBOT+tTu3OVexmMvZypnscRb4MDoPKDGYH6ua0tzggNtB2oHT+dtBkMRNEr7lAkSb6zFev4= 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 1774305427600446.24739383572444; Mon, 23 Mar 2026 15:37:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w4nre-00061R-GY; Mon, 23 Mar 2026 18:35:14 -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 1w4nrd-00060y-QG for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from qs-2007e-snip4-10.eps.apple.com ([57.103.84.180] helo=outbound.qs.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w4nrb-00038m-Oc for qemu-devel@nongnu.org; Mon, 23 Mar 2026 18:35:13 -0400 Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPS id 4723218000B8; Mon, 23 Mar 2026 22:35:10 +0000 (UTC) Received: from localhost.localdomain (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-6 (Postfix) with ESMTPSA id A41D41800276; Mon, 23 Mar 2026 22:35:08 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1774305310; x=1776897310; bh=PdT7IERfl0p/CeTQ+XFKTtOdCZ5WIYKOrnKXReIT4Ds=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=I8NdINj1hpOQlipGfw+u4r3efecuiPt3HSDyTom2aBr6U5osvf2mYKlSfEIjfsttmyv7sdQMRFdvpi7Fm4/DC5WOCWZUAv9WJeRlBPkizOr/jsgGohsNDG78zhcNyY1N1cjxhKaUAEW3Ct0ROT4uW3QMnP+8AJVUSAsbvmNTN7StZKQTWgqUlfkmvAw0ernrRwUV4kykYDBhf0HgFLJNB08viCLOEA1pQIXEDHjZoXQTTdqt4CeurwFUsRi1ldRThmSVKoIU6ip0ZyHqLJ8pT/60lOdTjveRW2CRiW/XFEy+iMv/fEPl0M75ZK5q+8bNs1rAKXI7orAiA+iSKUu3YQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Roman Bolshakov , Wei Liu , Pedro Barbuda , Mohamed Mediouni , Phil Dennis-Jordan Subject: [PATCH v2 13/13] whpx: i386: fast runtime state reads Date: Mon, 23 Mar 2026 23:34:34 +0100 Message-ID: <20260323223434.81780-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260323223434.81780-1-mohamed@unpredictable.fr> References: <20260323223434.81780-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=QO1lhwLL c=1 sm=1 tr=0 ts=69c1c01e cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=WK8LibQvd4XDxIxmQ_8A:9 X-Proofpoint-ORIG-GUID: wNLytSTucOV3Xj4S8pAkvdffB-7AAeos X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE2NyBTYWx0ZWRfX+fMlqLiUTIB1 JPxrXUnu90gQl0zdoqaHnzAwb+6E5Q4WAGPmg/6Pqu4VHHk0oeZMGLmx7ZaMKCJuz2QOQaXk+XY zMe2jr+XFmOKQaXl4lSMJ9jv6CsRIgVgnYg/jfI6fSqSgJHqhitmCuEkbA6hki59/x4er7RhjjE pSeH5w/6FZmgXXL3MCM2XiIZM6y1YykziBffkOYzm43vxc2wb7FD8chP/Oedrrt964wHeG5dWZZ pjUqpIRW9CCGkNTwU3Pc+pAUlv2Ua4j/Y7sAm7IB4bE2ceOnLgB7js89olaeyk+4+sAoDCUvGdN +rf7uUpvxRzLtEA5jhULZmCUkgPU1/nU5hIpG+EjmCS4X1EBz162BOR7uEfWt0= X-Proofpoint-GUID: wNLytSTucOV3Xj4S8pAkvdffB-7AAeos 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-23_06,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1030 lowpriorityscore=0 mlxlogscore=760 phishscore=0 mlxscore=0 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2603230167 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.84.180; envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1774305429498154100 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 d87afceb08..ff842bf359 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)