From nobody Sat May 30 20:11:19 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=1776894232; cv=none; d=zohomail.com; s=zohoarc; b=Ylquz9gfHSNrIrsHHg2FbX1Hq4hhg9pfqgt7OuOsD/BxyhzjTBgNBNR40aavh1HpJw9o722gMKhgOYPCasXoFVrtvd61HOuJUrPvbvrkeN2xWHZ2HCnnfgRxL6GC7EoXIW1XTSGQA5Tu9Za6Sm/2QErA4jA9XbW3PUc0VbYXRRU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894232; 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=jSFEY3OW57r5Gmf0SB6G349rIgUNCT10rXc1M/CBSww=; b=GJ3nA6dlZi+G4PXAqXgy9dhGq46dx5+VHxdjaMTyWKRtwSBdy6FznIQOMP29hf1JRuHcn122YgpiQe7VKUnvD8eVBRCtxnppOfk5QPv5dERceduDUqnY0RLhe3/nPcDtaaMYUroKT56cOtqy9HerPoMZ6t7y//jrAxuZmkLYThA= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894231657842.5740268647277; Wed, 22 Apr 2026 14:43:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLG-0007rr-WD; Wed, 22 Apr 2026 17:42:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLF-0007qr-86 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:41 -0400 Received: from p-east2-cluster1-host9-snip4-10.eps.apple.com ([57.103.76.113] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLD-0006vo-3j for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:40 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id BDFFC18006F2; Wed, 22 Apr 2026 21:42:32 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 1941C1800230; Wed, 22 Apr 2026 21:42:29 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkfHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894156; x=1779486156; bh=jSFEY3OW57r5Gmf0SB6G349rIgUNCT10rXc1M/CBSww=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=PyQTwjt7pw3pQluYudZ9pi6yjQ9CKSqwDoEslECPrQIx0HVTGZQpMUU9jLoawpNIoN5VGM6gSeYPusC5inM9X0DHzmJMqhtUsRhhCchIbT/njtpEoVFqgY1+CRTe+MZw3y6+2Xmf0UHcuAPLXp2oyP1xs0Lf13OwST4hUKZkhBIIW6Ige+5Lvrvp4YAFInUH2XqD1yh78zHX1Tai61tVci+wEDDxs+k0SPhLz6nRAKVzFmgXe4/bchO8dBWTs+x/65AdmxAaSY5eRwqm1S8Q1g0PeFMmm2Tt0oFL8/xudQ+t62CmC+Uqn0Oc5bRwfe0Gjc+hF4hkOXrgKAeUbU2LRg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 01/37] target/i386: emulate: include name of unhandled instruction Date: Wed, 22 Apr 2026 23:41:49 +0200 Message-ID: <20260422214225.2242-2-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=JK02csKb c=1 sm=1 tr=0 ts=69e940ca cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=x0iqa3ucmZZh0HPruXgA:9 X-Proofpoint-ORIG-GUID: GVe91KvhnulYeeaoO6Q_eK2KMilNniQ3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfXwMcxJoB08nlA Hanp3pf7eYOTt2z1IRMR/jCzNKnkuItlXWHH4BeKYpL7dRbAtiE0R0qtEfawdtwyMU6c4ltHG67 aON74e3LPrjB1jKgtuuZI2WqKrMgHjvvoPqDQR4R/0zq+puuXvWqJSxLP2xlh5pL1dj6Nzf0QAB vsKNCOQPVwUUukFmoNa0X52LIYGGIx1ZarLv+A+g02pyWzrwHi+wRezA2F2rjg/GVSGtwVxLw5G 85Kq3DaVLuU9yyAELojAhinsWB4lLD7CPQ2T6V2stBuvd1bDZYakqoDXvfxGwozKYg2M/iK0hUw yg/Hkih9442OihyckHIOi/PqP44blczh1CMsT9mgEcUKiFFoSxWULnxk97nQs0= X-Proofpoint-GUID: GVe91KvhnulYeeaoO6Q_eK2KMilNniQ3 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.113; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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: 1776894236649158500 Content-Type: text/plain; charset="utf-8" Instead of just the command number, include the instruction name to make de= bugging easier. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_emu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/i386/emulate/x86_emu.c b/target/i386/emulate/x86_emu.c index 55b1a68eb6..c2da1a133f 100644 --- a/target/i386/emulate/x86_emu.c +++ b/target/i386/emulate/x86_emu.c @@ -1399,8 +1399,8 @@ static void init_cmd_handler(void) bool exec_instruction(CPUX86State *env, struct x86_decode *ins) { if (!_cmd_handler[ins->cmd].handler) { - printf("Unimplemented handler (" TARGET_FMT_lx ") for %d (%x %x)\n= ", - env->eip, + printf("Unimplemented handler (" TARGET_FMT_lx ") for %s - %d (%x = %x)\n", + env->eip, decode_cmd_to_string(ins->cmd), ins->cmd, ins->opcode[0], ins->opcode_len > 1 ? ins->opcode[1] : 0); env->eip +=3D ins->len; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894288; cv=none; d=zohomail.com; s=zohoarc; b=A+3RSKKjq3GXhKhAfndcwyEM5UsiNR5We4UooJVYYBALv5ySFK4+wt9pvHTtxmerqcGN0gaNiy/Fjd+SSIi1FREz6U0Bon6Lm8//XhNcEhV8CBFZ3IIEm0neFv+rnjNO9JK49ZQ2inaikeqA74YllbwObYo/bxQvw9BhzdbjIUU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894288; 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=zl2db1VwfCW29E4LtwT7zz4buZdQP1VZYTXVu1kcs+o=; b=QkwbU8ksXFSh6fMlriLiQQn4KdxJNjqb3lJBfTb/h/NkBwEnF1g9GSZ3xovq6fPHIjsul2XUqzbIlKgP89YZMzUeY9D6UudSvlLZ/rpcLoY/EAGi/P+M/aajQJXCF3M5rofLib0o2C41Pb1PH5qJZjimMbE6nMHg7BfgClFlmLQ= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177689428887266.20193872035975; Wed, 22 Apr 2026 14:44:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLI-0007sd-6c; Wed, 22 Apr 2026 17:42:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLG-0007rt-Qf for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:42 -0400 Received: from p-east2-cluster1-host11-snip4-10.eps.apple.com ([57.103.76.53] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLD-0006wB-Iq for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:42 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 9BA9C180020B; Wed, 22 Apr 2026 21:42:34 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id F01EB18006EE; Wed, 22 Apr 2026 21:42:31 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgfHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894158; x=1779486158; bh=zl2db1VwfCW29E4LtwT7zz4buZdQP1VZYTXVu1kcs+o=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LrWNIkAJboKAkCAHpECPwIlZJaS8E+5kpnT+Qr2I2AdCQ2u7/f0qkEmAZWSwoJQ+u9DWIuhKznFRy4EButFn7vThA1bc3aigHCuLwLmNykHK7Y0KMTO+Z1yfZyAvqLD3M6oC0fUWcDIUzIMiK5A3iLL+jlkmdKg9WTovGPZx2FbLe47velB1chDcZt2Pm5kmHVXOebFTSHiTRGXJ2HE373jfCbwRDdiIxCUjBs2JKVWl/mkFSsoBNRgM0FKIFQkPbeGgGZlzVwdxmj9eSBlFXrgl8XXQKhIaLpai7AvUl7/nytu+mVCAI5c6xdj+tHTcsz1gm0OOGY5oziUkY+PB6w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 02/37] whpx: i386: x2apic emulation Date: Wed, 22 Apr 2026 23:41:50 +0200 Message-ID: <20260422214225.2242-3-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=JK02csKb c=1 sm=1 tr=0 ts=69e940cc cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=nj4AhdDZwDx412jv8JQA:9 X-Proofpoint-ORIG-GUID: Ybs8RxuWhcrLCxZn5Wm-d4O3dnI2bRdz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX/V40YKqbg3jr 9yENxUQAThvqn8r/6r4989XpR2oGKa4agutkmC5dxL5yUmKjIhtY+ez5I4PnZ5GoZsVrZf3klME qgCwCWdLfwOgvl/cXU8GZLKHRW7KpYkdfXI47p8EFuQd7UDnzKHkFOF99YTWB5+2aZXvoE+u2O3 3SoAARKG8JgfIIU9zvN2mU+Kv8fPpwmPMN6cKWcJ5KBH+yobz9StIDZPSTuBwhUWlGMAkEOyo7c yrVnXI/hAI9e3AwKkTE3gEhB8VhjnX7KV5GClax5Hno+ynVh/A92nR/397fBZm+et9TilYQUKo7 lGnwFFyf7LZIFHbMNSQag1hcWlaM9f1cr6HJMS1Lgxevf4TNLhgrjgMbP6jDgw= X-Proofpoint-GUID: Ybs8RxuWhcrLCxZn5Wm-d4O3dnI2bRdz 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894291226158500 Content-Type: text/plain; charset="utf-8" Add x2apic emulation to WHPX for the kernel-irqchip=3Doff case. Unfortunately, it looks like there isn't a workaround available for proper behavior of PIC interrupts when kernel-irqchip=3Don for Windows 10. The OS is out of support outside of extended security updates so this will not be addressed. The performance boost is quite visible for multicore guests. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 134 +++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index e56ae2b343..4127440c0c 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -1082,6 +1082,8 @@ HRESULT whpx_set_exception_exit_bitmap(UINT64 excepti= ons) /* Register for MSR and CPUID exits */ memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.ExtendedVmExits.X64MsrExit =3D 1; + prop.ExtendedVmExits.X64CpuidExit =3D 1; + if (exceptions !=3D 0) { prop.ExtendedVmExits.ExceptionExit =3D 1; } @@ -1898,6 +1900,18 @@ int whpx_vcpu_run(CPUState *cpu) WHV_REGISTER_NAME reg_names[3]; UINT32 reg_count; bool is_known_msr =3D 0;=20 + uint64_t val; + + if (vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { + val =3D ((uint32_t)vcpu->exit_ctx.MsrAccess.Rax) | + ((uint64_t)(vcpu->exit_ctx.MsrAccess.Rdx) << 32); + } else { + /* + * Workaround for [-Werror=3Dmaybe-uninitialized] + * with GCC. Not needed with Clang. + */ + val =3D 0; + } =20 reg_names[0] =3D WHvX64RegisterRip; reg_names[1] =3D WHvX64RegisterRax; @@ -1911,7 +1925,47 @@ int whpx_vcpu_run(CPUState *cpu) && !vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite && !whpx_irqchip_in_kernel()) { is_known_msr =3D 1; - reg_values[1].Reg32 =3D (uint32_t)X86_CPU(cpu)->env.apic_b= us_freq; + val =3D X86_CPU(cpu)->env.apic_bus_freq; + } + + if (!whpx_irqchip_in_kernel() && + vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D MSR_IA32_APICBAS= E) { + is_known_msr =3D 1; + if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { + /* Read path unreachable on Hyper-V */ + abort(); + } else { + WHV_REGISTER_VALUE reg =3D {.Reg64 =3D val}; + int msr_ret =3D cpu_set_apic_base(X86_CPU(cpu)->apic_s= tate, val); + if (msr_ret < 0) { + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + } + whpx_set_reg(cpu, WHvX64RegisterApicBase, reg); + } + } + + if (!whpx_irqchip_in_kernel() && + vcpu->exit_ctx.MsrAccess.MsrNumber >=3D MSR_APIC_START && + vcpu->exit_ctx.MsrAccess.MsrNumber <=3D MSR_APIC_END) { + int index =3D vcpu->exit_ctx.MsrAccess.MsrNumber - MSR_API= C_START; + int msr_ret; + is_known_msr =3D 1; + if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { + bql_lock(); + msr_ret =3D apic_msr_read(X86_CPU(cpu)->apic_state, in= dex, &val); + bql_unlock(); + reg_values[1].Reg64 =3D val; + if (msr_ret < 0) { + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + } + } else { + bql_lock(); + msr_ret =3D apic_msr_write(X86_CPU(cpu)->apic_state, i= ndex, val); + bql_unlock(); + if (msr_ret < 0) { + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + } + } } /* * For all unsupported MSR access we: @@ -1921,6 +1975,11 @@ int whpx_vcpu_run(CPUState *cpu) reg_count =3D vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite ? 1 : 3; =20 + if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { + reg_values[1].Reg32 =3D (uint32_t)val; + reg_values[2].Reg32 =3D (uint32_t)(val >> 32); + } + if (!is_known_msr) { trace_whpx_unsupported_msr_access(vcpu->exit_ctx.MsrAccess= .MsrNumber, vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite); @@ -1939,6 +1998,47 @@ int whpx_vcpu_run(CPUState *cpu) ret =3D 0; break; } + case WHvRunVpExitReasonX64Cpuid: { + WHV_REGISTER_VALUE reg_values[5] =3D {0}; + WHV_REGISTER_NAME reg_names[5]; + UINT32 reg_count =3D 5; + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + + reg_names[0] =3D WHvX64RegisterRip; + reg_names[1] =3D WHvX64RegisterRax; + reg_names[2] =3D WHvX64RegisterRcx; + reg_names[3] =3D WHvX64RegisterRdx; + reg_names[4] =3D WHvX64RegisterRbx; + + reg_values[0].Reg64 =3D + vcpu->exit_ctx.VpContext.Rip + + vcpu->exit_ctx.VpContext.InstructionLength; + + reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRax; + reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRcx; + reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRdx; + reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRbx; + + if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 1) { + if (cpu_has_x2apic_feature(env)) { + reg_values[2].Reg64 |=3D CPUID_EXT_X2APIC; + } + } + + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( + whpx->partition, + cpu->cpu_index, + reg_names, reg_count, + reg_values); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set CpuidAccess state " + " registers, hr=3D%08lx", hr); + } + ret =3D 0; + break; + } case WHvRunVpExitReasonException: whpx_get_registers(cpu, WHPX_LEVEL_FULL_STATE); =20 @@ -2136,6 +2236,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) WHV_PROCESSOR_FEATURES_BANKS processor_features; WHV_PROCESSOR_PERFMON_FEATURES perfmon_features; bool is_legacy_os =3D false; + UINT32 cpuidExitList[] =3D {1}; =20 whpx =3D &whpx_global; =20 @@ -2354,6 +2455,7 @@ 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.X64CpuidExit =3D 1; =20 hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, @@ -2366,6 +2468,36 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); + prop.X64MsrExitBitmap.UnhandledMsrs =3D 1; + if (!whpx_irqchip_in_kernel()) { + prop.X64MsrExitBitmap.ApicBaseMsrWrite =3D 1; + } + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeX64MsrExitBitmap, + &prop, + sizeof(WHV_PARTITION_PROPERTY)); + if (FAILED(hr)) { + error_report("WHPX: Failed to set MSR exit bitmap, hr=3D%08lx", hr= ); + ret =3D -EINVAL; + goto error; + } + + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeCpuidExitList, + cpuidExitList, + RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32)); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set partition CpuidExitList hr=3D%08= lx", + hr); + ret =3D -EINVAL; + goto error; + } + /* * We do not want to intercept any exceptions from the guest, * until we actually start debugging with gdb. --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894378; cv=none; d=zohomail.com; s=zohoarc; b=QHmybXzCWEyqlF7+nt3Qr6a1Ng8t1oeiSSOaguDzWwcM2gft6c7cNgZb9IJHO3wXCcw8Wizii9VLkwLStnOGIfgfQ0je7CZ617nHjXtS/eJtqJBfGPagxX7zjJhU/DJ8zu80/4JJ6kJlfGdekdrMASzrYUxCFb0sVFNDgMshkGQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894378; 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=IeLwDiWpTVXNjCjqgANs/S5+IQILH2QyjipMpqv8C+Y=; b=k38njb5OOknGuLpS/J3/zTv3Rb6dEXgTtnvyjMrGBfzfAp9U4glUpaHYILByHD86aRy70wr1LL6UDFWnHaGuNCSThy4JMnI3pZP4oQ0D6xLTLVnXdSeGAx7vHAEbLDkgjj2jbBJWKm6hCM8KXqUYQAnfisfn2D0vq0XQlO1vqJo= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177689437895553.37224485407194; Wed, 22 Apr 2026 14:46:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLK-0007tM-9a; Wed, 22 Apr 2026 17:42:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLI-0007sn-8p for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:44 -0400 Received: from p-east2-cluster1-host2-snip4-4.eps.apple.com ([57.103.76.37] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLF-0006wp-7q for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:43 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 7E86E1800951; Wed, 22 Apr 2026 21:42:36 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id D074418006EB; Wed, 22 Apr 2026 21:42:33 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGl8fHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894160; x=1779486160; bh=IeLwDiWpTVXNjCjqgANs/S5+IQILH2QyjipMpqv8C+Y=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=cYT/Cn2aYPmMCxi2xzJj+7HDU+h1h5mjj2u4I+Pmv80cGHYghEhRRtNdzrZu1kAN9ZoXnE2yIrUqFcsHWm4FAcxlVuj7HraDiHicpOigeXtgB2kR8qGiRzHoN3b5hl1VMR3GF1NCiNThYmKcbkADAVkrByqvrGfkg9TvJnC24NIJ9H6UAvKws8vaHMhjuJLgNxP0s5HslhmUDd0WDzi6t5csRCrXMr4uI7jd/5KfC+n7S9KrU3Kci9Dh3tQYRijlKCF6qX+uTPXWS63TBH4xWNZu1Ri1Gndb5W0JdeQc2Kniyrk2/HODZP/7WjaObRpm96S0jQsF6txIpC2UGEv1rQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 03/37] whpx: i386: wire up feature probing Date: Wed, 22 Apr 2026 23:41:51 +0200 Message-ID: <20260422214225.2242-4-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: bGkY5p5kwID_cDFf8wnwCNpgda7jZX8w X-Proofpoint-ORIG-GUID: bGkY5p5kwID_cDFf8wnwCNpgda7jZX8w X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX2G1pS9R0xnua dJ1Iq8BlHu25mfbpVpoaXdkoEIDKOdiX+Fq/RlrW9fm1ZkM6L+UH4N6tt+XrTBTYMwSCqeVpJQR mbhRFS78Y3dgX8P+lrhxCDuZmBWsSUwR5SQB+MYUfRH71wvG/NcU0PDpCbOJs03yYbNwcLLHOxQ L8AhSe1NghE6NF65+GdArppZO6DGJoKeasdEBfLlBoLI+cyZD28547k/hpTDFKeR8PPUYqnkUTR HTIAOmtpif3hoG/juihay5w2K76IvXGd4BqNwK8zMvM2rge16WoWo0g6eVynot+jpoO6zsViAr9 6NS/W6w41/hSJFcHUEI8SWZLb6EIOQvZIeVjH8jsPmchezSG5joh94ygEt7lFM= X-Authority-Info-Out: v=2.4 cv=b7e/I9Gx c=1 sm=1 tr=0 ts=69e940ce cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=mDV3o1hIAAAA:8 a=E2jrspqCZx2CoTvb7ogA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.37; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894381762154100 Content-Type: text/plain; charset="utf-8" Windows 10 doesn't have the API for this, so using this only for Windows 11. Signed-off-by: Mohamed Mediouni --- include/system/whpx-internal.h | 9 ++ target/i386/cpu.c | 17 +++ target/i386/whpx/meson.build | 1 + target/i386/whpx/whpx-all.c | 165 +++++++++++++++++++++++++++- target/i386/whpx/whpx-cpu-legacy.c | 171 +++++++++++++++++++++++++++++ target/i386/whpx/whpx-i386.h | 12 ++ 6 files changed, 370 insertions(+), 5 deletions(-) create mode 100644 target/i386/whpx/whpx-cpu-legacy.c create mode 100644 target/i386/whpx/whpx-i386.h diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 8482901f71..5902124b63 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -73,6 +73,14 @@ void whpx_apic_get(APICCommonState *s); X(HRESULT, WHvGetVirtualProcessorRegisters, (WHV_PARTITION_HANDLE Partit= ion, UINT32 VpIndex, const WHV_REGISTER_NAME* RegisterNames, UINT32 Registe= rCount, WHV_REGISTER_VALUE* RegisterValues)) \ X(HRESULT, WHvSetVirtualProcessorRegisters, (WHV_PARTITION_HANDLE Partit= ion, UINT32 VpIndex, const WHV_REGISTER_NAME* RegisterNames, UINT32 Registe= rCount, const WHV_REGISTER_VALUE* RegisterValues)) \ =20 +#ifdef __x86_64__ +#define LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL_ARCH(X) \ + X(HRESULT, WHvGetVirtualProcessorCpuidOutput, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, UINT32 Eax, \ + UINT32 Ecx, WHV_CPUID_OUTPUT *CpuidOutput)) +#else +#define LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL_ARCH(X) +#endif /* * These are supplemental functions that may not be present * on all versions and are not critical for basic functionality. @@ -89,6 +97,7 @@ void whpx_apic_get(APICCommonState *s); UINT32 StateSize)) \ X(HRESULT, WHvResetPartition, \ (WHV_PARTITION_HANDLE Partition)) \ + LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL_ARCH(X) =20 #define WHP_DEFINE_TYPE(return_type, function_name, signature) \ typedef return_type (WINAPI *function_name ## _t) signature; diff --git a/target/i386/cpu.c b/target/i386/cpu.c index c6fd1dc00e..a5f1a1a8fd 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -26,6 +26,8 @@ #include "tcg/helper-tcg.h" #include "exec/translation-block.h" #include "system/hvf.h" +#include "system/whpx.h" +#include "whpx/whpx-i386.h" #include "hvf/hvf-i386.h" #include "kvm/kvm_i386.h" #include "kvm/tdx.h" @@ -8087,6 +8089,16 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *= cpu, FeatureWord w) r =3D hvf_get_supported_cpuid(wi->cpuid.eax, wi->cpuid.ecx, wi->cpuid.reg); + } else if (whpx_enabled()) { + switch (wi->type) { + case CPUID_FEATURE_WORD: + r =3D whpx_get_supported_cpuid(wi->cpuid.eax, wi->cpuid.ecx, + wi->cpuid.reg); + break; + case MSR_FEATURE_WORD: + r =3D whpx_get_supported_msr_feature(wi->msr.index); + break; + } } else if (tcg_enabled() || qtest_enabled()) { r =3D wi->tcg_features; } else { @@ -8168,6 +8180,11 @@ static void x86_cpu_get_supported_cpuid(uint32_t fun= c, uint32_t index, *ebx =3D hvf_get_supported_cpuid(func, index, R_EBX); *ecx =3D hvf_get_supported_cpuid(func, index, R_ECX); *edx =3D hvf_get_supported_cpuid(func, index, R_EDX); + } else if (whpx_enabled()) { + *eax =3D whpx_get_supported_cpuid(func, index, R_EAX); + *ebx =3D whpx_get_supported_cpuid(func, index, R_EBX); + *ecx =3D whpx_get_supported_cpuid(func, index, R_ECX); + *edx =3D whpx_get_supported_cpuid(func, index, R_EDX); } else { *eax =3D 0; *ebx =3D 0; diff --git a/target/i386/whpx/meson.build b/target/i386/whpx/meson.build index c3aaaff9fd..1c6a4ce377 100644 --- a/target/i386/whpx/meson.build +++ b/target/i386/whpx/meson.build @@ -1,4 +1,5 @@ i386_system_ss.add(when: 'CONFIG_WHPX', if_true: files( 'whpx-all.c', 'whpx-apic.c', + 'whpx-cpu-legacy.c' )) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 4127440c0c..d211b3f2ef 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -36,6 +36,7 @@ #include "system/whpx-accel-ops.h" #include "system/whpx-all.h" #include "system/whpx-common.h" +#include "whpx-i386.h" =20 #include "emulate/x86_decode.h" #include "emulate/x86_emu.h" @@ -49,6 +50,8 @@ /* for kernel-irqchip=3Doff */ #define HV_X64_MSR_APIC_FREQUENCY 0x40000023 =20 +static bool is_modern_os =3D true; + static const WHV_REGISTER_NAME whpx_register_names[] =3D { =20 /* X64 General purpose registers */ @@ -265,11 +268,30 @@ typedef enum WhpxStepMode { static uint32_t max_vcpu_index; static WHV_PROCESSOR_XSAVE_FEATURES whpx_xsave_cap; =20 -static bool whpx_has_xsave(void) +bool whpx_has_xsave(void) { return whpx_xsave_cap.XsaveSupport; } =20 +bool whpx_has_xsaves(void) +{ + return whpx_xsave_cap.XsaveSupervisorSupport; +} + +static bool whpx_rdtsc_cap; + +bool whpx_has_rdtscp(void) +{ + return whpx_rdtsc_cap; +} + +static bool whpx_invpcid_cap; + +bool whpx_has_invpcid(void) +{ + return whpx_invpcid_cap; +} + static WHV_X64_SEGMENT_REGISTER whpx_seg_q2h(const SegmentCache *qs, int v= 86, int r86) { @@ -1062,6 +1084,137 @@ static void whpx_init_emu(void) init_emu(&whpx_x86_emul_ops); } =20 +bool whpx_is_legacy_os(void) +{ + return !is_modern_os; +} + +uint32_t whpx_get_supported_cpuid(uint32_t func, uint32_t idx, int reg) +{ + WHV_CPUID_OUTPUT output =3D {}; + uint32_t eax, ebx, ecx, edx; + uint32_t cpu_index =3D 0; + bool temp_cpu =3D true; + HRESULT hr; + + /* Legacy OSes don't have WHvGetVirtualProcessorCpuidOutput */ + if (whpx_is_legacy_os()) { + return whpx_get_supported_cpuid_legacy(func, idx, reg); + } + + hr =3D whp_dispatch.WHvCreateVirtualProcessor( + whpx_global.partition, cpu_index, 0); + + /* This means that the CPU already exists... */ + if (FAILED(hr)) { + temp_cpu =3D false; + } + + hr =3D whp_dispatch.WHvGetVirtualProcessorCpuidOutput(whpx_global.part= ition, + cpu_index, func, idx, &output); + + if (FAILED(hr)) { + abort(); + } + + if (temp_cpu) { + hr =3D whp_dispatch.WHvDeleteVirtualProcessor(whpx_global.partitio= n, cpu_index); + if (FAILED(hr)) { + abort(); + } + } + + eax =3D output.Eax; + ebx =3D output.Ebx; + ecx =3D output.Ecx; + edx =3D output.Edx; + + /* + * We can emulate X2APIC even for the kernel-irqchip=3Doff case. + * CPUID_EXT_HYPERVISOR and CPUID_HT should be considered present + * always, so report them as unconditionally supported here. + */ + if (func =3D=3D 1) { + ecx |=3D CPUID_EXT_X2APIC; + ecx |=3D CPUID_EXT_HYPERVISOR; + edx |=3D CPUID_HT; + } + + switch (reg) { + case R_EAX: + return eax; + case R_EBX: + return ebx; + case R_ECX: + return ecx; + case R_EDX: + return edx; + default: + return 0; + } +} + +uint64_t whpx_get_supported_msr_feature(uint32_t index) +{ + WHV_CAPABILITY_CODE cap; + uint64_t val =3D 0; + + switch (index) { + case MSR_IA32_VMX_BASIC: + cap =3D WHvCapabilityCodeVmxBasic; + break; + case MSR_IA32_VMX_MISC: + cap =3D WHvCapabilityCodeVmxMisc; + break; + case MSR_IA32_VMX_CR0_FIXED0: + cap =3D WHvCapabilityCodeVmxCr0Fixed0; + break; + case MSR_IA32_VMX_CR0_FIXED1: + cap =3D WHvCapabilityCodeVmxCr0Fixed1; + break; + case MSR_IA32_VMX_CR4_FIXED0: + cap =3D WHvCapabilityCodeVmxCr4Fixed0; + break; + case MSR_IA32_VMX_CR4_FIXED1: + cap =3D WHvCapabilityCodeVmxCr4Fixed1; + break; + case MSR_IA32_VMX_VMCS_ENUM: + cap =3D WHvCapabilityCodeVmxVmcsEnum; + break; + case MSR_IA32_VMX_PROCBASED_CTLS2: + cap =3D WHvCapabilityCodeVmxProcbasedCtls2; + break; + case MSR_IA32_VMX_EPT_VPID_CAP: + cap =3D WHvCapabilityCodeVmxEptVpidCap; + break; + case MSR_IA32_VMX_TRUE_PINBASED_CTLS: + cap =3D WHvCapabilityCodeVmxPinbasedCtls; + break; + case MSR_IA32_VMX_TRUE_PROCBASED_CTLS: + cap =3D WHvCapabilityCodeVmxProcbasedCtls; + break; + case MSR_IA32_VMX_TRUE_ENTRY_CTLS: + cap =3D WHvCapabilityCodeVmxTrueEntryCtls; + break; + case MSR_IA32_VMX_TRUE_EXIT_CTLS: + cap =3D WHvCapabilityCodeVmxTrueExitCtls; + break; + default: + cap =3D 0; + } + + if (cap !=3D 0) { + HRESULT hr =3D whp_dispatch.WHvGetCapability( + cap, &val, sizeof(val), + NULL); + if (FAILED(hr)) { + return 0; + } + return val; + } + return 0; +} + /* * Controls whether we should intercept various exceptions on the guest, * namely breakpoint/single-step events. @@ -2235,7 +2388,6 @@ 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; UINT32 cpuidExitList[] =3D {1}; =20 whpx =3D &whpx_global; @@ -2355,6 +2507,9 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + whpx_rdtsc_cap =3D processor_features.Bank0.RdtscpSupport; + whpx_invpcid_cap =3D processor_features.Bank0.InvpcidSupport; + if (whpx_irqchip_in_kernel() && processor_features.Bank1.NestedVirtSup= port) { memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.NestedVirtualization =3D 1; @@ -2395,7 +2550,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) if (FAILED(hr)) { warn_report("WHPX: Failed to get performance " "monitoring features, hr=3D%08lx", hr); - is_legacy_os =3D true; + is_modern_os =3D false; } else { hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, @@ -2435,7 +2590,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.DirectSyntheticTimers =3D 1; } =20 - if (!is_legacy_os && whpx->hyperv_enlightenments_allowed) { + if (is_modern_os && whpx->hyperv_enlightenments_allowed) { hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks, @@ -2446,7 +2601,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) ret =3D -EINVAL; goto error; } - } else if (is_legacy_os && whpx->hyperv_enlightenments_required) { + } else if (!is_modern_os && whpx->hyperv_enlightenments_required) { error_report("Hyper-V enlightenments not available on legacy Windo= ws"); ret =3D -EINVAL; goto error; diff --git a/target/i386/whpx/whpx-cpu-legacy.c b/target/i386/whpx/whpx-cpu= -legacy.c new file mode 100644 index 0000000000..477429b460 --- /dev/null +++ b/target/i386/whpx/whpx-cpu-legacy.c @@ -0,0 +1,171 @@ +/* + * i386 CPUID helper functions + * + * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2017 Google Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + * + * cpuid + */ + +#include "qemu/osdep.h" +#include "qemu/cpuid.h" +#include "host/cpuinfo.h" +#include "cpu.h" +#include "emulate/x86.h" +#include "whpx-i386.h" + +static bool cached_xcr0; +static uint64_t supported_xcr0; + +static void cache_host_xcr0(void) +{ + if (cached_xcr0) { + return; + } + + if (whpx_has_xsave()) { + uint64_t host_xcr0 =3D xgetbv_low(0); + + /* Only show xcr0 bits corresponding to usable features. */ + supported_xcr0 =3D host_xcr0 & (XSTATE_FP_MASK | + XSTATE_SSE_MASK | XSTATE_YMM_MASK | + XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi25= 6_MASK | + XSTATE_Hi16_ZMM_MASK); + if ((supported_xcr0 & (XSTATE_FP_MASK | XSTATE_SSE_MASK)) !=3D + (XSTATE_FP_MASK | XSTATE_SSE_MASK)) { + supported_xcr0 =3D 0; + } + } + + cached_xcr0 =3D true; +} + +uint32_t whpx_get_supported_cpuid_legacy(uint32_t func, uint32_t idx, + int reg) +{ + uint32_t eax, ebx, ecx, edx; + + cache_host_xcr0(); + host_cpuid(func, idx, &eax, &ebx, &ecx, &edx); + + switch (func) { + case 0: + eax =3D eax < (uint32_t)0xd ? eax : (uint32_t)0xd; + break; + case 1: + edx &=3D CPUID_FP87 | CPUID_VME | CPUID_DE | CPUID_PSE | CPUID_TSC= | + CPUID_MSR | CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | + CPUID_SEP | CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | + CPUID_PAT | CPUID_PSE36 | CPUID_CLFLUSH | CPUID_MMX | + CPUID_FXSR | CPUID_SSE | CPUID_SSE2 | CPUID_SS | CPUID_HT; + ecx &=3D CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSSE3 | + CPUID_EXT_FMA | CPUID_EXT_CX16 | CPUID_EXT_PCID | + CPUID_EXT_SSE41 | CPUID_EXT_SSE42 | CPUID_EXT_MOVBE | + CPUID_EXT_POPCNT | CPUID_EXT_AES | + (supported_xcr0 ? CPUID_EXT_XSAVE : 0) | + CPUID_EXT_AVX | CPUID_EXT_F16C | CPUID_EXT_RDRAND; + ecx |=3D CPUID_EXT_HYPERVISOR; + ecx |=3D CPUID_EXT_X2APIC; + edx |=3D CPUID_HT; + break; + case 6: + eax =3D CPUID_6_EAX_ARAT; + ebx =3D 0; + ecx =3D 0; + edx =3D 0; + break; + case 7: + if (idx =3D=3D 0) { + ebx &=3D CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | + CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | + CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | + CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_RTM | + CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | + CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_AVX512IFMA | + CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512PF | + CPUID_7_0_EBX_AVX512ER | CPUID_7_0_EBX_AVX512CD | + CPUID_7_0_EBX_CLFLUSHOPT | CPUID_7_0_EBX_CLWB | + CPUID_7_0_EBX_AVX512DQ | CPUID_7_0_EBX_SHA_NI | + CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512VL | + CPUID_7_0_EBX_INVPCID; + + if (!whpx_has_invpcid()) { + ebx &=3D ~CPUID_7_0_EBX_INVPCID; + } + + ecx &=3D CPUID_7_0_ECX_AVX512_VBMI | CPUID_7_0_ECX_AVX512_VPOP= CNTDQ | + CPUID_7_0_ECX_RDPID; + edx &=3D CPUID_7_0_EDX_AVX512_4VNNIW | CPUID_7_0_EDX_AVX512_4F= MAPS; + } else { + ebx =3D 0; + ecx =3D 0; + edx =3D 0; + } + eax =3D 0; + break; + case 0xD: + if (!supported_xcr0 || idx >=3D 63 || + (idx > 1 && !(supported_xcr0 & (UINT64_C(1) << idx)))) { + eax =3D ebx =3D ecx =3D edx =3D 0; + break; + } + + if (idx =3D=3D 0) { + eax =3D supported_xcr0; + } else if (idx =3D=3D 1) { + eax &=3D CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XGETBV1; + if (!whpx_has_xsaves()) { + eax &=3D ~CPUID_XSAVE_XSAVES; + } + } + break; + case 0x80000001: + /* LM only if HVF in 64-bit mode */ + edx &=3D CPUID_FP87 | CPUID_VME | CPUID_DE | CPUID_PSE | CPUID_TSC= | + CPUID_MSR | CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC= | + CPUID_EXT2_SYSCALL | CPUID_MTRR | CPUID_PGE | CPUID_MCA | = CPUID_CMOV | + CPUID_PAT | CPUID_PSE36 | CPUID_EXT2_MMXEXT | CPUID_MMX | + CPUID_FXSR | CPUID_EXT2_FXSR | CPUID_EXT2_PDPE1GB | CPUID_= EXT2_3DNOWEXT | + CPUID_EXT2_3DNOW | CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPU= ID_EXT2_NX; + if (!(whpx_has_rdtscp())) { + edx &=3D ~CPUID_EXT2_RDTSCP; + } + ecx &=3D CPUID_EXT3_LAHF_LM | CPUID_EXT3_CMP_LEG | CPUID_EXT3_CR8L= EG | + CPUID_EXT3_ABM | CPUID_EXT3_SSE4A | CPUID_EXT3_MISALIGNSSE= | + CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_OSVW | CPUID_EXT3_XO= P | + CPUID_EXT3_FMA4 | CPUID_EXT3_TBM; + break; + case 0x80000007: + edx &=3D CPUID_APM_INVTSC; + eax =3D ebx =3D ecx =3D 0; + break; + default: + return 0; + } + + switch (reg) { + case R_EAX: + return eax; + case R_EBX: + return ebx; + case R_ECX: + return ecx; + case R_EDX: + return edx; + default: + return 0; + } +} diff --git a/target/i386/whpx/whpx-i386.h b/target/i386/whpx/whpx-i386.h new file mode 100644 index 0000000000..a1cf732862 --- /dev/null +++ b/target/i386/whpx/whpx-i386.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +uint32_t whpx_get_supported_cpuid(uint32_t func, uint32_t idx, int reg); +uint64_t whpx_get_supported_msr_feature(uint32_t index); +bool whpx_is_legacy_os(void); + +uint32_t whpx_get_supported_cpuid_legacy(uint32_t func, uint32_t idx, + int reg); +bool whpx_has_xsave(void); +bool whpx_has_xsaves(void); +bool whpx_has_rdtscp(void); +bool whpx_has_invpcid(void); --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894368; cv=none; d=zohomail.com; s=zohoarc; b=DKPlfroD9U1FbNr/ihUiaPBFRxM6lqHQo79oidvnm1w7l3MRyiZ29r0xPeTg44nsXIRSphOtiOJhgq5crPTvp50yPCjsTFkw/i+DioN/aWKE3a+v/K3fEqZvOLu7XdawdkuqvJyqGLc5uXweYesAh1jGELd58DBeOwgSLbyZYkc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894368; 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=V8p4axRuSSeu+sKKMx+ar98eGUS5hUC2c3mtFQ7SVOk=; b=HFWXCkqeijB7k7zbYmJES0CXcMATKHGxZr9X7COuIuXBo3ndt4Ic/92lwe8k+GZzfvkm4RPivMjJAcSpID/U62bAyCSTaad05JoGOtSJikDiaUeOukjzv2IJvd9QNLEhQQ1BRHZYCuHI11PUUKAYSwMn5IFCf9gLU0QYBKfCpyU= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894368249530.3354489733582; Wed, 22 Apr 2026 14:46:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLK-0007ta-RU; Wed, 22 Apr 2026 17:42:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLI-0007sb-2i for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:44 -0400 Received: from p-east2-cluster1-host4-snip4-10.eps.apple.com ([57.103.76.23] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLF-0006ww-Mf for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:43 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id DBBBE1800227; Wed, 22 Apr 2026 21:42:37 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id AFE181800232; Wed, 22 Apr 2026 21:42:35 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGl4fHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894160; x=1779486160; bh=V8p4axRuSSeu+sKKMx+ar98eGUS5hUC2c3mtFQ7SVOk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ejLVaPZThiBJvBhld6DZp6xLNk4D97MXP7fxOGrKu6ZskEx8KhlttWIG4feiDn0+OuM5UH4MjLCGeqJIYMJqRwWwskL58rPg5kWQMKXhXFxeO7acoqBU7ZP/h1uguGV3QRT+BH5obFpVmxFr/ClWSBMzLB6DDIsC27WBZDn7k1gb1qVl3bef+hYEomU0navy2zmXImIlA1ULv993tQ4hsGNp5CRuLTieIE3TC2VsEizFa1tBpCk6nUixBVNlYnExSomdShcbwVPhhTg7+OcELOWlNtbWKTAFIlc86Z0i0lW8qWXFYsBJ9EJqhmWnj1+Ftb5lAj/qc2v9lFzghWX4Ow== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 04/37] whpx: i386: disable TbFlushHypercalls for emulated LAPIC Date: Wed, 22 Apr 2026 23:41:52 +0200 Message-ID: <20260422214225.2242-5-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX6moWjjXhKEB9 FnMhwoCJ8VOnV9+MBifVxtdGrMHm58RIonCeQGFnqzjCJOFgUbylAJUnENCeo5/jbd+Xh655G+S 0LJQtHbZBwNPd2NMB6J+usbxEXCYntzYHPrftnVmnzPxgRArqYLZ1mlAnNL+LyBexPKpYpJNKrV iuGDjHMlO8f3J0uUoO7CzgCAhNycQYdwYism4ggjnOWAzw4lFoJ1xkXnPdLsG8w03fhWyU8SaDd ++LRabrnqpsZsBqLxoxUuYu/5ZNQ+ZX+jDpILCzJpaBPgl5PfqOmtDZC7Sq5xebWOMlI7bfoI+f eqiQ8T1rqzvMhhbtPU6Ke6IQzSj96STjSWg8LixhbNmTzpmvXzSjZHGCb4mSzM= X-Authority-Info-Out: v=2.4 cv=cIbtc1eN c=1 sm=1 tr=0 ts=69e940ce cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Rm0zj2O9plGGl-KjdfMA:9 X-Proofpoint-ORIG-GUID: RhKjumfgKrSSxGXU2T-lGyPICLuSLEW4 X-Proofpoint-GUID: RhKjumfgKrSSxGXU2T-lGyPICLuSLEW4 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894369443154100 Content-Type: text/plain; charset="utf-8" AccessHypercallRegs was present twice so clean that up. Remove TbFlushHypercalls (and its extended Gva range sub-feature) from the user-mode LAPIC case as it behaves oddly there. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index d211b3f2ef..8f03616cb9 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2577,10 +2577,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.AccessPartitionReferenceTsc =3D 1; synthetic_features.Bank0.AccessHypercallRegs =3D 1; synthetic_features.Bank0.AccessFrequencyRegs =3D 1; - synthetic_features.Bank0.EnableExtendedGvaRangesForFlushVirtualAddress= List =3D 1; synthetic_features.Bank0.AccessVpIndex =3D 1; - synthetic_features.Bank0.AccessHypercallRegs =3D 1; - synthetic_features.Bank0.TbFlushHypercalls =3D 1; =20 if (whpx_irqchip_in_kernel()) { synthetic_features.Bank0.AccessSynicRegs =3D 1; @@ -2588,6 +2585,12 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.AccessIntrCtrlRegs =3D 1; synthetic_features.Bank0.SyntheticClusterIpi =3D 1; synthetic_features.Bank0.DirectSyntheticTimers =3D 1; + /* + * These technically work without the Hyper-V LAPIC + * but behave oddly for multi-core VMs. + */ + synthetic_features.Bank0.TbFlushHypercalls =3D 1; + synthetic_features.Bank0.EnableExtendedGvaRangesForFlushVirtualAdd= ressList =3D 1; } =20 if (is_modern_os && whpx->hyperv_enlightenments_allowed) { --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894408; cv=none; d=zohomail.com; s=zohoarc; b=LbTNBa0ao8bawl4S2bFO6jI3UrGyvby32AZZ/QZ6kZaCl0OrZuH9GU3dLgYzazrlVs9u/tQreiK3fBhtXxkT78TcSrGUtAhX+jY4Jqa82qN9V+9/upsp2IoI1UyNQrqhXjgZdSlb3hz5NnmrbxSNJGn7dhS0eA/binHpRDEQTrg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894408; 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=SWGvVkTUcfNdXmZWTM4NHwYFZfQcX/gulJR3Nj6SCmU=; b=B2PyWDW6CK04yQ+gykxR4YmC3QtIxaEu51BJEXj0tf+e1yAwo/I6PYqwOwbYWMxxOhsBiigZ3uS0jorFmugdE7/AMXAlhZ+wALUS/xtuMq+dS2AR3IYRLjtDt6Fd96lRaAHNJEZcYRMeXfTQpfr9hAk5gOo9aSBJr38SuGGuWOg= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894408009124.64792314852139; Wed, 22 Apr 2026 14:46:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLM-0007vY-PM; Wed, 22 Apr 2026 17:42:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLL-0007uh-Dy for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:47 -0400 Received: from p-east2-cluster1-host7-snip4-3.eps.apple.com ([57.103.76.66] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLJ-0006ye-JS for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:47 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 36E4518006FB; Wed, 22 Apr 2026 21:42:39 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 90929180020C; Wed, 22 Apr 2026 21:42:37 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGl0fHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894164; x=1779486164; bh=SWGvVkTUcfNdXmZWTM4NHwYFZfQcX/gulJR3Nj6SCmU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=MltShFRs7LoQFjfgRl/cD6FdfBhD7SG9rXqTydIHWe7HX5MLIeP1/KQTq6ZBVjDTgQMDwlsguUj+YxZsVRc09DKYAFg1RmQdouJqMR5kVwJZTPMyISoErPzww8/JYnr/n5lShgt4m7tG9cdtkuHj2yX2R5Gh8BHOgyWrhF4DAGpDn188e6fVLy53USShZgsqKSwBBvIJBv+7gTCLVroo02+7ulTUrn8MMS0O3qS0LNKkMjFsqN5h4W8o5xrPTAcOLX6P5Lpz639n2F3hadLcs+1n/mluEa+uzrppdVnEkSNpW9wTRFgNnwyt6CmxqdCgY4LetwUXLFd4yzvbMvF1fg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 05/37] whpx: i386: enable x2apic by default for user-mode LAPIC Date: Wed, 22 Apr 2026 23:41:53 +0200 Message-ID: <20260422214225.2242-6-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX7WdEKBMZyr9x +PXY/aAkxXPPDmaA4/I7PGRHttn2Cd9D93TsAm+7Q2zQLV4ZJdISfP3VKSjONvskhy0I6PrUNAf UbZcB8a1e5YBc/e/yStd9LH7nWGLYFRSE85cQwGLKQCAh2QapG7CHxY3RXbFHhScwKBwzzidw61 N/RNoM0ryFr+TKRwObQNIKfFCK7pZyhDllaT6JjwTX4ev7otce8HejXSOM7mOkRziwffTQ3xxOK hOBYcMkkgpfvRm1lZufhQu1D7cPgjnGqdK15FPT6haqVrB7HmSvXcKKzpceHm14bhwNOjapzto2 ZW4VO9JAk0jG82FrVVrkm4ushuTq8aTytqRVfLAk9qY6w+FSiIwteIHZ1UXcXg= X-Proofpoint-GUID: naZfVawrzCuXQjXe9ezCKtYBB_xVcIPD X-Proofpoint-ORIG-GUID: naZfVawrzCuXQjXe9ezCKtYBB_xVcIPD X-Authority-Info-Out: v=2.4 cv=C4DkCAP+ c=1 sm=1 tr=0 ts=69e940d2 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=uAk9FrDoCeqUxh5yT_MA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.66; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894410004154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 8f03616cb9..4954e0557a 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2366,11 +2366,18 @@ error: return ret; } =20 +static PropValue whpx_default_props[] =3D { + { "x2apic", "on" }, + { NULL, NULL }, +}; + + void whpx_cpu_instance_init(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); =20 host_cpu_instance_init(cpu); + x86_cpu_apply_props(cpu, whpx_default_props); } =20 /* --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894462; cv=none; d=zohomail.com; s=zohoarc; b=bDQBLwzqp6WHjBFfHhDXkE/bD5dGBd8fntZVxy0apvNqm+9EvGFXO+T2mLKRWVYb/lB8Dw/6B3ZMvrFfQpJtBn9ECQIyfYeDTn7mwPQEce9PJ7UxF6AGmLGGAHVo9r6nzSq+4LeOQlsNu6pQc6oy/7qts1PJgbZ+ct6ec3tmQcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894462; 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=hkQG6hOmkKoQQ4VfPKcZK5YN5+VU0E/MubeBjGkQBBQ=; b=Yj50B39fdCmxU2u0muRkuwZVXi9BOoIkr7Yl+o+yS4ElfDBKsdSsrb3qyu6oDmxPrkYh4etG0kgnUU4+fHXlTdZOLGnD7GQgtFiLKlvIoHwjZ6x936R41LFU/ydK5dWuMIfynbiOwtmEFiXCFWsee71JF0Z8yEyU9Nz0PcdHyuU= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894462401592.6932690555703; Wed, 22 Apr 2026 14:47:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLO-0007ww-GY; Wed, 22 Apr 2026 17:42:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLM-0007va-QQ for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:48 -0400 Received: from p-east2-cluster1-host5-snip4-8.eps.apple.com ([57.103.76.91] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLK-0006z8-WD for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:48 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 1B131180097E; Wed, 22 Apr 2026 21:42:41 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 6E5F018000C7; Wed, 22 Apr 2026 21:42:39 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlwfHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894166; x=1779486166; bh=hkQG6hOmkKoQQ4VfPKcZK5YN5+VU0E/MubeBjGkQBBQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=HV9zMv3So4Y0mJwBIOC7ZlYdnjGoCAdOyTv9t7dpf3LuIvvPGpP6VTuyL7n4F8ex55BDHFZtlHJJoyNl+fQ97znFqLlyvUVedPc/sNCujmek+LqYx2o6so9DuWnFd+eWPIjSeOinVZgYdiDrQiN4M4PfKXnuzN602s8L1A5s9Jd4BzzhPnv4Dl0wfGyfaJ+6QsUdjjCcj2jm+p6j2lGaHev5qNG6+NB2eq/uRWqpFSbVaZy6RuUEZIYCzlDPx1lrBrqeLfezG7imjWhrHEITZaKGp8DxGnt8Wnf2BuO+e/+5XtayprEDJOQCHf0bMTJbtVodlg4Gqupky8zbo8Ruqw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 06/37] whpx: i386: reintroduce enlightenments for Windows 10 Date: Wed, 22 Apr 2026 23:41:54 +0200 Message-ID: <20260422214225.2242-7-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: pHMhze96HKbChHZ4pNipe3sOb9aB1OHK X-Authority-Info-Out: v=2.4 cv=TtLrRTXh c=1 sm=1 tr=0 ts=69e940d3 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=hfWBbujXMTx1PmRkPVYA:9 X-Proofpoint-ORIG-GUID: pHMhze96HKbChHZ4pNipe3sOb9aB1OHK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX4Y10kmJax19L NeAdQfEOjJhNwWwSLmU5PnJAPs1nUtZAhQw8Q+JQryNxdbQ0xP9g+s9H+bLeVVUabKxd80Pmbob hvi4FGiiy5wzz0h2Oo0ECrD58sPUtEnLsbByBi0SoPmAI7lwSphV8xAw4Bu+BuuH67Bx1TYB/F1 wn6xv+focXtqLFUHajmVKeicojN/mwci1JHZB+97GjSaDubZ8YFrNY83e42DOyeJB8We7F1cmAg 2y/jYbTB9Ji0TCi/KdrxisZds15GgKGVjneEK+jp0u7YUrWp6drvwxv94ksHc4lDvj1djDoZDAl nYusF5vK/xKSobhmq/W+2GBszIdmm9Amotr2AXCqOWXpUSa/VtzUUUZw8ynKEY= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.91; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1776894464936154100 Content-Type: text/plain; charset="utf-8" Was removed in 2c08624 but it's still useful for Windows 10 so reintroduce it there. And this time, actually make it work by reporting the hypervisor bit in CPUID. Pretend to be vmware to be able to use vmport's functionality. If the vmware frequency leaf is disabled, pretend to be KVM, with the only capability reported being X2APIC support. Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 2 ++ include/system/whpx-internal.h | 1 + target/arm/whpx/whpx-all.c | 1 + target/i386/whpx/whpx-all.c | 63 +++++++++++++++++++++++++++++----- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index b813a5d9d2..59be996aef 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -550,6 +550,8 @@ static void whpx_accel_instance_init(Object *obj) =20 whpx->hyperv_enlightenments_allowed =3D true; whpx->hyperv_enlightenments_required =3D false; + /* Value determined at whpx_accel_init */ + whpx->hyperv_enlightenments_enabled =3D false; } =20 static const TypeInfo whpx_accel_type =3D { diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 5902124b63..cf782cf5f8 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -45,6 +45,7 @@ struct whpx_state { =20 bool hyperv_enlightenments_allowed; bool hyperv_enlightenments_required; + bool hyperv_enlightenments_enabled; =20 }; =20 diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index bbf0f6be96..4019a513aa 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -968,6 +968,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) * as they're not needed for performance. */ if (whpx->hyperv_enlightenments_required) { + whpx->hyperv_enlightenments_enabled =3D true; hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks, diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 4954e0557a..f9f330c038 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2168,14 +2168,57 @@ int whpx_vcpu_run(CPUState *cpu) vcpu->exit_ctx.VpContext.Rip + vcpu->exit_ctx.VpContext.InstructionLength; =20 - reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRax; - reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRcx; - reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRdx; - reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.DefaultResu= ltRbx; - - if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 1) { - if (cpu_has_x2apic_feature(env)) { - reg_values[2].Reg64 |=3D CPUID_EXT_X2APIC; + if (whpx_is_legacy_os()) { + reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRax; + reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRcx; + reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRdx; + reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRbx; + } else { + cpu_x86_cpuid(env, vcpu->exit_ctx.CpuidAccess.Rax, + vcpu->exit_ctx.CpuidAccess.Rcx, + (UINT32 *)®_values[1].Reg32, + (UINT32 *)®_values[4].Reg32, (UINT32 *)®_values[= 2].Reg32, + (UINT32 *)®_values[3].Reg32); + } + + if (!whpx->hyperv_enlightenments_enabled) { + switch (vcpu->exit_ctx.CpuidAccess.Rax) { + case 1: + reg_values[2].Reg64 |=3D CPUID_EXT_HYPERVISOR; + break; + case 0x40000000: + /* + * Use vmware_cpuid_freq as a proxy to report VMware. + * This is to get the TSC/APIC frequency query functio= nality + * provided through vmport, as Linux doesn't use leaf + * 0x40000010 for getting those frequencies. + */ + if (x86_cpu->vmware_cpuid_freq) { + reg_values[1].Reg64 =3D 0x40000010; + reg_values[4].Reg64 =3D 0x61774d56; + reg_values[2].Reg64 =3D 0x4d566572; + reg_values[3].Reg64 =3D 0x65726177; + } else { + /* report KVM otherwise if that's disabled */ + reg_values[1].Reg64 =3D 0x40000001; + reg_values[4].Reg64 =3D 0x4b4d564b; + reg_values[2].Reg64 =3D 0x564b4d56; + reg_values[3].Reg64 =3D 0x4d; + } + break; + case 0x40000001: + if (!x86_cpu->vmware_cpuid_freq) { + /* KVM reporting of X2APIC support */ + reg_values[1].Reg64 =3D reg_values[4].Reg64 =3D + reg_values[2].Reg64 =3D 1 << 15; + } + break; + case 0x40000010: + if (x86_cpu->vmware_cpuid_freq) { + reg_values[1].Reg64 =3D env->tsc_khz; + reg_values[4].Reg64 =3D env->apic_bus_freq / 1000;= /* Hz to KHz */ + } + break; } } =20 @@ -2396,6 +2439,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) WHV_PROCESSOR_FEATURES_BANKS processor_features; WHV_PROCESSOR_PERFMON_FEATURES perfmon_features; UINT32 cpuidExitList[] =3D {1}; + UINT32 cpuidExitList_nohyperv[] =3D {1, 0x40000000, 0x40000001, 0x4000= 0010}; =20 whpx =3D &whpx_global; =20 @@ -2601,6 +2645,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) } =20 if (is_modern_os && whpx->hyperv_enlightenments_allowed) { + whpx->hyperv_enlightenments_enabled =3D true; hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks, @@ -2653,7 +2698,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeCpuidExitList, - cpuidExitList, + whpx->hyperv_enlightenments_enabled ? cpuidExitList : cpuidExitLis= t_nohyperv, RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32)); =20 if (FAILED(hr)) { --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894358; cv=none; d=zohomail.com; s=zohoarc; b=UQJPbPFJmyCoS+TQ43pgaxys/yZOTS83E8VnmmLtbyNE2MU7s3lno0M9wbzK5qaHpavHZJNFe97xj/rqMsywchmNv/r5WBI1Q12Wp1n8Og+4HlrfW7AFiWgK/GFSOFuvsrybr5l+tb0oxQBFa/CEmXRMjAj8r2nO4TXD/65uLGA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894358; 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=LbkTYL/emjmTtubWjDApjBeMnmXQk5lJhboi+ilmPdI=; b=RejU9z6xQMV1uQyKhx2Pkwx4RNb4y/wFyIdvRZbVL8zdnnhJHUpSodRvgVlItvatoQ42M1EgS/Fxckdp2kxyQi8bDGOafeI6quV2sreTH1giMd7KBeNsLdkJwgJH2yG02Zc+4GmNe5a8WK+cqB/F/9n9uBwGCFV5jZXftZxprVY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894358691863.4243144366453; Wed, 22 Apr 2026 14:45:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLQ-0007yH-3t; Wed, 22 Apr 2026 17:42:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLO-0007x9-O1 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:50 -0400 Received: from p-east2-cluster1-host9-snip4-7.eps.apple.com ([57.103.76.110] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLM-00071f-QA for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:50 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 013DA18000A2; Wed, 22 Apr 2026 21:42:43 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 512E918000CB; Wed, 22 Apr 2026 21:42:41 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlMfHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894167; x=1779486167; bh=LbkTYL/emjmTtubWjDApjBeMnmXQk5lJhboi+ilmPdI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=OcDqLMVLbKrAX4gUijebvDmSSvaJKZB2PFrIR4tgp2VD5rIpeZuF/tP8EegcxuWcsOlLgZvow+6Q5yc6EpW4Pf5li3Y/nny7Hejaur7OyCBo1R6272LJHD0ATp1o1y92FqbPskvxr5onBx67Q1HoJWE9tXDuZbtXfP4EO4RgmP5QxRShAhap3tXezlfCIihRiZ8cleL5UnWC5Yzw4FUtKHSp6ocYdQ9TA0BbZvRSDpuNu+wriCy/wskyPJZX9tYWxTKqH2ag/TZSqR0/Snp1ivBDlH19oBtqB5iq5rEHbUN6+MUEAP9v+QTOpBUzR1+evOjpkHstKqMKsF83B6PdLw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 07/37] whpx: i386: introduce proper cpuid support Date: Wed, 22 Apr 2026 23:41:55 +0200 Message-ID: <20260422214225.2242-8-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 9LtywL4pZIm3GB1pDvAZno_gE8i2zlGW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX1KI+PadiQ2JO dR5C7bw8IJLpHo+M3NmdX4G2sIcpzVP6UKlZ6F8A+6UsJeaBcmP9AG92h0GprUYBGTBq5zjddX8 N2TJj1L0pIaLr9q9ClInSFLR10hKfe8BhL6MazpdNvP5Ahor9hj8zB/p+XKKIWQg6XqCCAdrpNk bquORuOP4ZL02iYoNcKrQQjC5nBLU6XugTX4BAgn1phadjK3JzhBbbrNC/Ytu0UxYkbzdeUGq5f qOOAjzQ1dGyq1AUHOgybzz9BGXPCIkduLIA/ESo1URcFfTB17rQ9plThCM9MBKG/iMJiONvBHuE nSP8cwtwtD8rt/83D3mmxdZYXMF/eZtjn0T46IgZzdVFRFMHNdKhv3tYgnRFYM= X-Authority-Info-Out: v=2.4 cv=XaGEDY55 c=1 sm=1 tr=0 ts=69e940d5 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=mDV3o1hIAAAA:8 a=raKznI45vfUyTbRhOY0A:9 X-Proofpoint-ORIG-GUID: 9LtywL4pZIm3GB1pDvAZno_gE8i2zlGW 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.110; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894361404154100 Content-Type: text/plain; charset="utf-8" Unlike the implementation in QEMU 10.2, this one works. It's not optimal though as it doesn't use the Hyper-V support for this. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 136 +++++++++++++++++++++++++---- target/i386/whpx/whpx-cpu-legacy.c | 15 +--- 2 files changed, 122 insertions(+), 29 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index f9f330c038..73e351d895 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2168,18 +2168,11 @@ int whpx_vcpu_run(CPUState *cpu) vcpu->exit_ctx.VpContext.Rip + vcpu->exit_ctx.VpContext.InstructionLength; =20 - if (whpx_is_legacy_os()) { - reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRax; - reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRcx; - reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRdx; - reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Default= ResultRbx; - } else { - cpu_x86_cpuid(env, vcpu->exit_ctx.CpuidAccess.Rax, - vcpu->exit_ctx.CpuidAccess.Rcx, - (UINT32 *)®_values[1].Reg32, - (UINT32 *)®_values[4].Reg32, (UINT32 *)®_values[= 2].Reg32, - (UINT32 *)®_values[3].Reg32); - } + cpu_x86_cpuid(env, vcpu->exit_ctx.CpuidAccess.Rax, + vcpu->exit_ctx.CpuidAccess.Rcx, + (UINT32 *)®_values[1].Reg32, + (UINT32 *)®_values[4].Reg32, (UINT32 *)®_values[2].R= eg32, + (UINT32 *)®_values[3].Reg32); =20 if (!whpx->hyperv_enlightenments_enabled) { switch (vcpu->exit_ctx.CpuidAccess.Rax) { @@ -2220,6 +2213,68 @@ int whpx_vcpu_run(CPUState *cpu) } break; } + } else { + switch (vcpu->exit_ctx.CpuidAccess.Rax) { + case 0x40000000: + case 0x40000001: + case 0x40000010: + reg_values[1].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Def= aultResultRax; + reg_values[2].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Def= aultResultRcx; + reg_values[3].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Def= aultResultRdx; + reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Def= aultResultRbx; + break; + } + } + + if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 0x1) { + if (cpu_has_x2apic_feature(env)) { + reg_values[2].Reg64 |=3D CPUID_EXT_X2APIC; + } else { + reg_values[2].Reg32 &=3D ~CPUID_EXT_X2APIC; + } + } + + /* Dynamic depending on XCR0 and XSS, so query DefaultResult */ + if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 0x07 + && vcpu->exit_ctx.CpuidAccess.Rcx =3D=3D 0) { + if (vcpu->exit_ctx.CpuidAccess.DefaultResultRdx + & CPUID_7_0_EDX_CET_IBT) { + reg_values[3].Reg32 |=3D CPUID_7_0_EDX_CET_IBT; + } else { + reg_values[3].Reg32 &=3D ~CPUID_7_0_EDX_CET_IBT; + } + + if (vcpu->exit_ctx.CpuidAccess.DefaultResultRcx + & CPUID_7_0_ECX_CET_SHSTK) { + reg_values[2].Reg32 |=3D CPUID_7_0_ECX_CET_SHSTK; + } else { + reg_values[2].Reg32 &=3D ~CPUID_7_0_ECX_CET_SHSTK; + } + + if (vcpu->exit_ctx.CpuidAccess.DefaultResultRcx + & CPUID_7_0_ECX_OSPKE) { + reg_values[2].Reg32 |=3D CPUID_7_0_ECX_OSPKE; + } else { + reg_values[2].Reg32 &=3D ~CPUID_7_0_ECX_OSPKE; + } + } + + /* CPUID[0xD,{1,2}].EBX are dynamic depending on guest feature= s. */ + if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 0xd) { + if (vcpu->exit_ctx.CpuidAccess.Rcx =3D=3D 1 + || vcpu->exit_ctx.CpuidAccess.Rcx =3D=3D 2) { + reg_values[4].Reg64 =3D vcpu->exit_ctx.CpuidAccess.Def= aultResultRbx; + } + } + + /* OSXSAVE is dynamic. Do this instead of syncing CR4 */ + if (vcpu->exit_ctx.CpuidAccess.Rax =3D=3D 1) { + if (vcpu->exit_ctx.CpuidAccess.DefaultResultRcx + & CPUID_EXT_OSXSAVE) { + reg_values[2].Reg32 |=3D CPUID_EXT_OSXSAVE; + } else { + reg_values[2].Reg32 &=3D ~CPUID_EXT_OSXSAVE; + } } =20 hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( @@ -2409,6 +2464,45 @@ error: return ret; } =20 +static void whpx_cpu_xsave_init(void) +{ + static bool first =3D true; + int i; + + if (!first) { + return; + } + first =3D false; + + /* x87 and SSE states are in the legacy region of the XSAVE area. */ + x86_ext_save_areas[XSTATE_FP_BIT].offset =3D 0; + x86_ext_save_areas[XSTATE_SSE_BIT].offset =3D 0; + + for (i =3D XSTATE_SSE_BIT + 1; i < XSAVE_STATE_AREA_COUNT; i++) { + ExtSaveArea *esa =3D &x86_ext_save_areas[i]; + + if (esa->size) { + int sz =3D whpx_get_supported_cpuid(0xd, i, R_EAX); + if (sz !=3D 0) { + assert(esa->size =3D=3D sz); + esa->offset =3D whpx_get_supported_cpuid(0xd, i, R_EBX); + } + } + } +} + +static void whpx_cpu_max_instance_init(X86CPU *cpu) +{ + CPUX86State *env =3D &cpu->env; + + env->cpuid_min_level =3D + whpx_get_supported_cpuid(0x0, 0, R_EAX); + env->cpuid_min_xlevel =3D + whpx_get_supported_cpuid(0x80000000, 0, R_EAX); + env->cpuid_min_xlevel2 =3D + whpx_get_supported_cpuid(0xC0000000, 0, R_EAX); +} + static PropValue whpx_default_props[] =3D { { "x2apic", "on" }, { NULL, NULL }, @@ -2418,9 +2512,18 @@ static PropValue whpx_default_props[] =3D { void whpx_cpu_instance_init(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); + X86CPUClass *xcc =3D X86_CPU_GET_CLASS(cpu); =20 host_cpu_instance_init(cpu); x86_cpu_apply_props(cpu, whpx_default_props); + + if (xcc->max_features) { + whpx_cpu_max_instance_init(cpu); + } + + if (whpx_has_xsave()) { + whpx_cpu_xsave_init(); + } } =20 /* @@ -2438,8 +2541,11 @@ 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; - UINT32 cpuidExitList[] =3D {1}; - UINT32 cpuidExitList_nohyperv[] =3D {1, 0x40000000, 0x40000001, 0x4000= 0010}; + + UINT32 cpuidExitList[] =3D {0x0, 0x1, 0x6, 0x7, 0xb, 0xd, 0x14, 0x24, = 0x29, 0x1E, + 0x40000000, 0x40000001, 0x40000010, 0x80000000, 0x80000001, + 0x80000002, 0x80000003, 0x80000004, 0x80000007, 0x80000008, + 0x8000000A, 0x80000021, 0x80000022, 0xC0000000, 0xC0000001}; =20 whpx =3D &whpx_global; =20 @@ -2698,7 +2804,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeCpuidExitList, - whpx->hyperv_enlightenments_enabled ? cpuidExitList : cpuidExitLis= t_nohyperv, + cpuidExitList, RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32)); =20 if (FAILED(hr)) { diff --git a/target/i386/whpx/whpx-cpu-legacy.c b/target/i386/whpx/whpx-cpu= -legacy.c index 477429b460..d341e6f4fd 100644 --- a/target/i386/whpx/whpx-cpu-legacy.c +++ b/target/i386/whpx/whpx-cpu-legacy.c @@ -4,20 +4,7 @@ * Copyright (c) 2003 Fabrice Bellard * Copyright (c) 2017 Google Inc. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see . - * - * cpuid + * SPDX-License-Identifier: LGPL-2.1-or-later */ =20 #include "qemu/osdep.h" --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894271; cv=none; d=zohomail.com; s=zohoarc; b=W6f/TmxGzsIEi7cbrP1724r8KvrYHD93Aj6XbMth7MG1Mz+4E5y9VLpK7ZLyx78Xe26CaXHjdRsHEBZN78CmBe36JWNJz14+Di+7QGoI2z7cD3OFzmzjrUrzt3rQLAMVz/bEPnXkfImSC8qsm23+UMjb6y6g0K9osWkK0FTkNkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894271; 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=rF48Y2MLEXMC/gSG0+gU5MLW6aYnvIDO0HJVJDRDdVs=; b=JBg8p8a+i/yHMLg7FbzpSl9F5mI9YuE97lXdw/lx4SRev63nUpQI/WfUsgj3CRTOJ2dCL8N2w1likf/oN/rNvTUyvpkFr9Z8qA2llwzxrN8zWKqJ24Z3ZFkdtpoHuwKN9GnXwOka+4+6sexYK4rGkq7K4Pm1ofZmfTby0GgFGSM= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894271069807.6785212766807; Wed, 22 Apr 2026 14:44:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLR-0007zR-HB; Wed, 22 Apr 2026 17:42:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLO-0007wy-Hk for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:50 -0400 Received: from p-east2-cluster1-host6-snip4-10.eps.apple.com ([57.103.76.103] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLL-0006zW-N4 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:49 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 4E82818006F2; Wed, 22 Apr 2026 21:42:45 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 263BF1800962; Wed, 22 Apr 2026 21:42:43 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlIfHVYQUgBSD3IFVwhBCFMCUQRYGl8IGQ1AThkMSh1SVlEFSgxcAGgPXR1YEV0= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894166; x=1779486166; bh=rF48Y2MLEXMC/gSG0+gU5MLW6aYnvIDO0HJVJDRDdVs=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LPhhMXOLm1GllTYJN8x4iMxupC9tn/xJskNZ0tAnGr7842+wODS7+umjdH5iQdJ5RDIsctQMF27SaPce0WqU2TF+TsCoi7PKWfbhiGJWy2m0RqbnhxIOgrosf8ymAlK6eaoNjbMcZYCzlN7RX9nTb5j4CCiMJCJITZC6awhPBIw3wwU09BYwKoxPGBTCxFpGJRmpHR8fx9OmIH5bruXT7fWtM7hbn9SJsKCbajj83EEAsuzOiVE6qbqMJrfHWz+H0TRUlmKATx+aB0iGJxevsnsYltRSQgyb27+dhcXwHc1FcmI9QaQlhhsdXxvqvBzVzwafASrmimH4ei71/QJDUQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 08/37] whpx: i386: kernel-irqchip=off fixes Date: Wed, 22 Apr 2026 23:41:56 +0200 Message-ID: <20260422214225.2242-9-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX/B7l03B7Yq6P lKD0UiXMCOwQkq3g0KkpLcsp+knvWr/93K7n+H4+dMyKIJDTzlmmKJFuTCdXSGNpmPkxO+WlhCY 5LqIk1Pktbvx2AquSk0UN6F9/AHpfZAUtPlrQjNCysHaJzqoTcoCwiBTy+ryttb2kp7T3KvXUed lbO5YUuX86NZXJoYMWF5I1da+TbMnDy694eneWUx2nWAadQMmMCcVcXO4LDoIZX6W1ntIiMC0rl k+sa9TUzIR3R/bZM9GQRPqp8Ajz5UpQXTjl9VKm5w1ndBT5Us6nYkliFY7AlnzaReSPxb7qJF4c LWF+wVrqovI491iZD+mCAWBfMnWGhpcEKgr6/CcvqxI+SpNQquWPXYeDMFJEiE= X-Proofpoint-ORIG-GUID: RWZcdDPvkY1yzF8lBcUYEB9iEdmeP5PO X-Proofpoint-GUID: RWZcdDPvkY1yzF8lBcUYEB9iEdmeP5PO X-Authority-Info-Out: v=2.4 cv=G9cR0tk5 c=1 sm=1 tr=0 ts=69e940d6 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gP1GEkNOX-MqffGxZ4oA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.103; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894274186154100 Content-Type: text/plain; charset="utf-8" This was really... quite broken. After fixing this, Windows boots with kernel-irqchip=3Doff. Signed-off-by: Mohamed Mediouni --- include/system/whpx-common.h | 1 + target/i386/whpx/whpx-all.c | 43 +++++------------------------------- 2 files changed, 7 insertions(+), 37 deletions(-) diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index 04289afd97..3406c20fec 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -4,6 +4,7 @@ =20 struct AccelCPUState { bool window_registered; + int window_priority; bool interruptable; bool ready_for_pic_interrupt; uint64_t tpr; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 73e351d895..d470c5b9d3 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -22,6 +22,8 @@ #include "qemu/main-loop.h" #include "hw/core/boards.h" #include "hw/intc/ioapic.h" +#include "hw/intc/i8259.h" +#include "hw/i386/x86.h" #include "hw/i386/apic_internal.h" #include "qemu/error-report.h" #include "qapi/error.h" @@ -390,28 +392,6 @@ static int whpx_set_tsc(CPUState *cpu) return 0; } =20 -/* - * The CR8 register in the CPU is mapped to the TPR register of the APIC, - * however, they use a slightly different encoding. Specifically: - * - * APIC.TPR[bits 7:4] =3D CR8[bits 3:0] - * - * This mechanism is described in section 10.8.6.1 of Volume 3 of Intel 64 - * and IA-32 Architectures Software Developer's Manual. - * - * The functions below translate the value of CR8 to TPR and vice versa. - */ - -static uint64_t whpx_apic_tpr_to_cr8(uint64_t tpr) -{ - return tpr >> 4; -} - -static uint64_t whpx_cr8_to_apic_tpr(uint64_t cr8) -{ - return cr8 << 4; -} - void whpx_set_registers(CPUState *cpu, WHPXStateLevel level) { struct whpx_state *whpx =3D &whpx_global; @@ -440,7 +420,7 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel l= evel) v86 =3D (env->eflags & VM_MASK); r86 =3D !(env->cr[0] & CR0_PE_MASK); =20 - vcpu->tpr =3D whpx_apic_tpr_to_cr8(cpu_get_apic_tpr(x86_cpu->apic_stat= e)); + vcpu->tpr =3D cpu_get_apic_tpr(x86_cpu->apic_state); vcpu->apic_base =3D cpu_get_apic_base(x86_cpu->apic_state); =20 idx =3D 0; @@ -711,17 +691,6 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel = level) hr); } =20 - 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 - * WHvGetVirtualProcessorRegisters(). - */ - whpx_apic_get(x86_cpu->apic_state); - vcpu->tpr =3D whpx_apic_tpr_to_cr8( - cpu_get_apic_tpr(x86_cpu->apic_state)); - } - idx =3D 0; =20 /* Indexes for first 16 registers match between HV and QEMU definition= s */ @@ -770,7 +739,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) tpr =3D vcxt.values[idx++].Reg64; if (tpr !=3D vcpu->tpr) { vcpu->tpr =3D tpr; - cpu_set_apic_tpr(x86_cpu->apic_state, whpx_cr8_to_apic_tpr(tpr)); + cpu_set_apic_tpr(x86_cpu->apic_state, tpr); } =20 /* 8 Debug Registers - Skipped */ @@ -1775,7 +1744,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) } =20 /* Sync the TPR to the CR8 if was modified during the intercept */ - tpr =3D whpx_apic_tpr_to_cr8(cpu_get_apic_tpr(x86_cpu->apic_state)); + tpr =3D cpu_get_apic_tpr(x86_cpu->apic_state); if (tpr !=3D vcpu->tpr) { vcpu->tpr =3D tpr; reg_values[reg_count].Reg64 =3D tpr; @@ -1822,7 +1791,7 @@ static void whpx_vcpu_post_run(CPUState *cpu) if (vcpu->tpr !=3D tpr) { vcpu->tpr =3D tpr; bql_lock(); - cpu_set_apic_tpr(x86_cpu->apic_state, whpx_cr8_to_apic_tpr(vcpu->t= pr)); + cpu_set_apic_tpr(x86_cpu->apic_state, vcpu->tpr); bql_unlock(); } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894265; cv=none; d=zohomail.com; s=zohoarc; b=E4blT27Nq7KWIcyw7VvmStEl1goA6EqbCqwWUommNHGyofoQWZzo+ACzV7AZ8yiNg/0oEFG+fTqpHOeulfRl9clCvL7GYR57KLPeKecUqkDovfPvHe6DotmU+sr/Wnd80dpN3UIeuemLSN3p2O3gmvUM2XgX0woPefZoHSEt+Xo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894265; 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=xC+Bs3uetls1lV4cbRHxGlDX60WBtwmt4XZ2tgs35W4=; b=lzK9Yqia1OU+lJ2+yNvOfJIvL7TA+11trRrOdYPr/i6KX3r65e3aQrYukF360THHicxVu7+g8VTczGTeieZeLSX/3S81b4ehVjo/DhTKG85dtkfHEilw1xcOZgi4wAJPVUnjGg8GXmIUo6JbuuLRCRmiEjSGa7wG0tvD3rk/dtA= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894265492576.8313461362169; Wed, 22 Apr 2026 14:44:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLU-00080z-Cq; Wed, 22 Apr 2026 17:42:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLP-0007xh-MM for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:51 -0400 Received: from p-east2-cluster1-host3-snip4-4.eps.apple.com ([57.103.76.7] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLN-00073Z-JK for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:51 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 3BA5018006EB; Wed, 22 Apr 2026 21:42:47 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id F33FD18006EF; Wed, 22 Apr 2026 21:42:44 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloCXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894168; x=1779486168; bh=xC+Bs3uetls1lV4cbRHxGlDX60WBtwmt4XZ2tgs35W4=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=FX8zhnx9un9lq+vPVZR/6suJow+FoEhwvsex4G9QGjBpFeRiLskhaGCAUdw/ZwvXWif0AnE7u93dv/0rywtMCnLuFyC1XC/sZmPPVx3kNFpW9n35aEBY2pHXxOXiNdqmhgsnHJy19layazFBqA2f4f4cgr9bNwvktKl/tW8j8BLLaPpVSqAq+aexhR392mc+8SrevRzly5d8/+EhWzgtf9BtmAMraaJx3u8x1SbH+0E8mhBwOnJM6RICwIKm0Ffykgu9mrkhH36tOnE7NKsi/SV7YnZjWUBBiKn5yXYgf93Bd/DEakHQfBT1O0U2r0CLBmahd+zdz+ewhr3+s7uALg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 09/37] whpx: i386: use WHvX64RegisterCr8 only when kernel-irqchip=off Date: Wed, 22 Apr 2026 23:41:57 +0200 Message-ID: <20260422214225.2242-10-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: Z5xbyGaJV_Pcac9j1vRLLqbhhM1-6Ptm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX1cBEdaCOIBYI eFHc9mYgGClgsMvCEs8kl8TlAmJrihicnPiqjpEf82VCBYRNEqWAcmjVfFcLpStA8Udm0kF6wvW WeRznUely+ou/1QLaeUabqA4T9t9aGYx0eZ7b7LY27WOsip/gZSM/9+x3Zns0eDs2eWljTXvwOB nfKpXOyqBvQBjNntsBjt7ObET6JRi8pjjt0az3d6fuo3p11eOr/pGFJu31yjIdXFcC3P7JtfJDS vu/ZV+eVp+FdWmno+Y2WITWiuWUgfpehT5w16BrvE/fPUPF9nBV3BuizdPMQ7bDH6ERoC9qsq+H +flNOQVWZk7CRG8w6ePvq6EpJrPEn+Zp2TaLoT8t+KCShfjkeKxVYlgSoCE3z0= X-Authority-Info-Out: v=2.4 cv=Kf/fcAYD c=1 sm=1 tr=0 ts=69e940d8 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=CtoYo02lv3ougeLbNZoA:9 X-Proofpoint-GUID: Z5xbyGaJV_Pcac9j1vRLLqbhhM1-6Ptm 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.7; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894267114158500 Content-Type: text/plain; charset="utf-8" When kernel-irqchip=3Don, manage TPR as part of the APIC state instead enti= rely. This fixes some failure to set state errors. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index d470c5b9d3..03c146dfb8 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -95,7 +95,6 @@ static const WHV_REGISTER_NAME whpx_register_names[] =3D { WHvX64RegisterCr2, WHvX64RegisterCr3, WHvX64RegisterCr4, - WHvX64RegisterCr8, =20 /* X64 Debug Registers */ /* @@ -478,8 +477,11 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel = level) vcxt.values[idx++].Reg64 =3D env->cr[3]; assert(whpx_register_names[idx] =3D=3D WHvX64RegisterCr4); vcxt.values[idx++].Reg64 =3D env->cr[4]; - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterCr8); - vcxt.values[idx++].Reg64 =3D vcpu->tpr; + /* For kernel-irqchip=3Don, TPR is managed as part of APIC state */ + if (!whpx_irqchip_in_kernel()) { + WHV_REGISTER_VALUE cr8 =3D {.Reg64 =3D vcpu->tpr}; + whpx_set_reg(cpu, WHvX64RegisterCr8, cr8); + } =20 /* 8 Debug Registers - Skipped */ =20 @@ -735,11 +737,14 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel= level) env->cr[3] =3D vcxt.values[idx++].Reg64; assert(whpx_register_names[idx] =3D=3D WHvX64RegisterCr4); env->cr[4] =3D vcxt.values[idx++].Reg64; - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterCr8); - tpr =3D vcxt.values[idx++].Reg64; - if (tpr !=3D vcpu->tpr) { - vcpu->tpr =3D tpr; - cpu_set_apic_tpr(x86_cpu->apic_state, tpr); + + /* For kernel-irqchip=3Don, TPR is managed as part of APIC state */ + if (!whpx_irqchip_in_kernel()) { + tpr =3D vcpu->exit_ctx.VpContext.Cr8; + if (tpr !=3D vcpu->tpr) { + vcpu->tpr =3D tpr; + cpu_set_apic_tpr(x86_cpu->apic_state, tpr); + } } =20 /* 8 Debug Registers - Skipped */ @@ -1745,7 +1750,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) =20 /* Sync the TPR to the CR8 if was modified during the intercept */ tpr =3D cpu_get_apic_tpr(x86_cpu->apic_state); - if (tpr !=3D vcpu->tpr) { + if (!whpx_irqchip_in_kernel() && tpr !=3D vcpu->tpr) { vcpu->tpr =3D tpr; reg_values[reg_count].Reg64 =3D tpr; qatomic_set(&cpu->exit_request, true); @@ -1787,12 +1792,14 @@ static void whpx_vcpu_post_run(CPUState *cpu) =20 env->eflags =3D vcpu->exit_ctx.VpContext.Rflags; =20 - uint64_t tpr =3D vcpu->exit_ctx.VpContext.Cr8; - if (vcpu->tpr !=3D tpr) { - vcpu->tpr =3D tpr; - bql_lock(); - cpu_set_apic_tpr(x86_cpu->apic_state, vcpu->tpr); - bql_unlock(); + if (!whpx_irqchip_in_kernel()) { + uint64_t tpr =3D vcpu->exit_ctx.VpContext.Cr8; + if (vcpu->tpr !=3D tpr) { + vcpu->tpr =3D tpr; + bql_lock(); + cpu_set_apic_tpr(x86_cpu->apic_state, vcpu->tpr); + bql_unlock(); + } } =20 vcpu->interruption_pending =3D --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894254; cv=none; d=zohomail.com; s=zohoarc; b=V/qlYKFAUry3TJpkYQexKZEuxXBZWewtJDfKCQRzEONNyBbPcHHnlB0qkkIhxeDOJpKU0/jGEYkWk+2x3hbeEHVEjYM57P57CXdhFauYBOfBaauadl7wOHR25SeuFZOkAU0Is7CPmZiCi97YF+eO5U3yQ4g96hc8JVwS8i92zm8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894254; 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=9mILSLYmqc5xAiH5ZnQxEwcrk4EQka2pJwYrbsNFZ5I=; b=eC/wdfkGEBuxAnw/ZgUj5WrPVX0Ke1sJJujgM4ovT0LFZjR+nrSIiYeW5To4Mc90uIqhS0Uiwd/sfu1CEygdb+DGXcErdoROh8Kw2cEcBiuZOmCbK0QAadgUgVqvfVSoCMxD7qlqx0CLjzxIUuINXU9bmzM8qQFPENfaLqXwKwo= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894254366646.1519892529235; Wed, 22 Apr 2026 14:44:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLS-000808-7W; Wed, 22 Apr 2026 17:42:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLP-0007xX-Dz for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:51 -0400 Received: from p-east2-cluster1-host5-snip4-10.eps.apple.com ([57.103.76.93] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLN-00073l-H9 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:51 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 8467F180021C; Wed, 22 Apr 2026 21:42:48 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id D2CA91800227; Wed, 22 Apr 2026 21:42:46 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloDXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894168; x=1779486168; bh=9mILSLYmqc5xAiH5ZnQxEwcrk4EQka2pJwYrbsNFZ5I=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Uo7oqjr0aQv697V23aBykjkY5/gNxakz1AhQIFFZu1svI3age8jxuYNVu+S3xOpCdb3CT45LwraPYQkLaZxN9ftCYxayFQNNh9+gdnAMkNYs6s/5k5fcX4Jj1C3Nng0Nwu/bxM2NwjtghsVL30dYIxWoCraQUtCsJhEIgdOulaaTzDdDedYGEYsO43O3hcxrw+DwVgNsaVlrN7CzSgQem49NLfPxAtyzz3IiB8PJew/p2hir19SRO7UlUNSSRDHyJ57wpIywS9DV7X4aVbGs+k/XFHNE9KRzvxHA1z/xpM+y3O86THBjInLMNgDieiZo8Ub32mR7CGed2XFo2zV5Yg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 10/37] whpx: i386: disable kernel-irqchip on Windows 10 when PIC enabled Date: Wed, 22 Apr 2026 23:41:58 +0200 Message-ID: <20260422214225.2242-11-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfXxx17pSEF/3/3 GNw0NNrEqWUNGkT/TX5lB1yIDmet4YGeVRBCa9w58cwH22pj8jPOMZYmnDvrkNx3sVX6/v8vMFa I51sz4nZJIy9cWFgvXEqbpKk4kEa6+ehKv1c2RUl5EWW4wFkwLeMhOTRzCi6Aq0Pomw51asGF8h lCVAkFGgx1y6HxGeAo4yxMuu6I6+R7wVIs+i0dcp0xuNgCJSyK1hqVsOrj9Nrs5wSyajmINK1fR +SodBfOT0Qj068NhD+Wt2NCk6BZkz8XfkUUw8qUbGugq0sFMUQ0S7HK1LwOVQOisWFIOdalbVmA o/mxu3zZwy8JXbQprITwwtMba0KEWvGdgdAWHes/75uETNQzuL1Rj4DaJzQuHE= X-Authority-Info-Out: v=2.4 cv=f6tFxeyM c=1 sm=1 tr=0 ts=69e940d8 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=nUl_a9z44qMLw6SsMv4A:9 X-Proofpoint-ORIG-GUID: dEDTRDJ00G0ti5xVmv08yGFfIq_aEtIG X-Proofpoint-GUID: dEDTRDJ00G0ti5xVmv08yGFfIq_aEtIG 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=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: 1776894257931154100 Content-Type: text/plain; charset="utf-8" Move WHvCapabilityCodeProcessorPerfmonFeatures queries as that's how we distinguish if on a legacy OS. Now that Windows guests are booting, disable kernel-irqchip=3Don by default for Windows 10 when the PIC is enabled. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 69 +++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 03c146dfb8..ab8e97787f 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2523,6 +2523,13 @@ int whpx_accel_init(AccelState *as, MachineState *ms) 0x80000002, 0x80000003, 0x80000004, 0x80000007, 0x80000008, 0x8000000A, 0x80000021, 0x80000022, 0xC0000000, 0xC0000001}; =20 + X86MachineState *x86ms =3D X86_MACHINE(ms); + bool pic_enabled =3D false; + + if (x86ms->pic =3D=3D ON_OFF_AUTO_ON || x86ms->pic =3D=3D ON_OFF_AUTO_= AUTO) { + pic_enabled =3D true; + } + whpx =3D &whpx_global; =20 if (!init_whp_dispatch()) { @@ -2594,6 +2601,35 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + /* Enable supported performance monitoring capabilities */ + 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)) { + warn_report("WHPX: Failed to get performance " + "monitoring features, hr=3D%08lx", hr); + is_modern_os =3D false; + } 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; + } + } + /* * Error out if WHP doesn't support apic emulation and user is requiri= ng * it. @@ -2606,8 +2642,9 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - if (whpx->kernel_irqchip_allowed && features.LocalApicEmulation && - whp_dispatch.WHvSetVirtualProcessorInterruptControllerState2) { + if (whpx->kernel_irqchip_allowed && !(whpx_is_legacy_os() && pic_enabl= ed + && !whpx->kernel_irqchip_required) && features.LocalApicEmulation + && whp_dispatch.WHvSetVirtualProcessorInterruptControllerState2) { WHV_X64_LOCAL_APIC_EMULATION_MODE mode =3D WHvX64LocalApicEmulationModeX2Apic; hr =3D whp_dispatch.WHvSetPartitionProperty( @@ -2669,34 +2706,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - /* Enable supported performance monitoring capabilities */ - 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)) { - warn_report("WHPX: Failed to get performance " - "monitoring features, hr=3D%08lx", hr); - is_modern_os =3D false; - } 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 */ WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS synthetic_features; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894422; cv=none; d=zohomail.com; s=zohoarc; b=TsdWK99uqKMuGhCIdfDXZ2gTlZ9Imk2PTV3Qg1QZV+Kt+gZMnaPvGMPOblnQI3K26p85XsZssWwB+VhPz0iyZqgRo9nGLEajr3noRl0gE0brpj96yyoqELQVOWnO5Ylk1koNwaRo1VT+DqbVquvNUPai7eYrfKA4Lw2W96kF1hU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894422; 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=90DXebKcXq4ywVPqb9VJW4/s7sJzsLUwFClfg34UOKo=; b=FE/EFHY3kkXQe7PO0XbBdea4RkZTBE+j6ZiQPt7AV5zF8jSqhB7uTbTWDGRUv4/5G1X3XlcNDTmwRxjhNlfKf6w+hy7YxpItRhHSdryDYAMzbVHw7QxezQm6lL8swGCJT5MOViAhQGak6Qlyg/9tC/FVedLwWQ+5pd6TG8/nOPc= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894422068773.070264840351; Wed, 22 Apr 2026 14:47:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLX-00082u-4j; Wed, 22 Apr 2026 17:42:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLV-00081V-Dd for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:57 -0400 Received: from p-east2-cluster1-host3-snip4-10.eps.apple.com ([57.103.76.13] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLT-0007FU-TI for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:57 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 47B5918000C7; Wed, 22 Apr 2026 21:42:50 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id A7D8C1800950; Wed, 22 Apr 2026 21:42:48 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloAXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894175; x=1779486175; bh=90DXebKcXq4ywVPqb9VJW4/s7sJzsLUwFClfg34UOKo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=f17MqGyU9Xgv6xU4nwNDGxv4KvF/7Hp9WeaK2G15mWw/23V5+xom7iLsz/bc2bEn5PLtO7J9paJIlQCXRcU4aEetZtJFKEkSMlUSNeandO+3iJp0zVJmeS6WJKeYHXNNFr6Ronntl/aEVoIUYx93iJXaHW6J6HvLvdzlmRhEFZm/iQNs/FKMN0AT49Q29pXO1/N5jEvbpG5nIf/iDH8azaCVhzBD0NzxvHGU4RFfSNWEbBYZYG4EdOslmStX7p3g+sq4jVfqfeJ4oj6dZimqXYsmRtyBoFdMJospndhcVfWwwEbAcyHefTgrIVBhZURno6s+GlAgTF9ZcTni3tXMmA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 11/37] whpx: i386: IO port fast path cleanup Date: Wed, 22 Apr 2026 23:41:59 +0200 Message-ID: <20260422214225.2242-12-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: O8y9kfFCfmBiRkUtlYAO9Zo12uvLL97i X-Proofpoint-GUID: O8y9kfFCfmBiRkUtlYAO9Zo12uvLL97i X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX31qEm/uhSh5F 42bs5uJP1abdyf9e0APnvam52AFfb49AXdCpH+m5GiuNFIVafCfoyQ+WQB5v4XwGty7z6MsWRaT hJwCAFb1ngRsb4yDCCtIjTXDXwHOJ/Cd6QoFJjsMNemdkWYVQfPo/E0qbuBxyHqxLzH9EZ1E8Yj Nzda+Fwtx/666VZiJdWGf5+7MCAOj2rtpGt5zmBPuiATETdrCvijlK6djgALOdYKfZPolMK+hhh pmGDMPheigraiUMECPCU84hqITZk0Wu/jEvUmFc5a4kiOhuwkkAAQZtMneNCf9qW9wo5iF1Ipt9 G/9VH6EGHEGjziGbbkBpLEUaMa6By+E7e0pQNf2JWTlBEbRuZbGrSIg6Vve+gY= X-Authority-Info-Out: v=2.4 cv=I8Nohdgg c=1 sm=1 tr=0 ts=69e940dd cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Vrzv6M8N8vcM0KmfSJEA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.13; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894424401154100 Content-Type: text/plain; charset="utf-8" vmport calls synchronise_state within an I/O port read. Support that properly. What was there before worked because of a side effect of whpx_get_reg synchronising context if cpu->vcpu_dirty. Remove that whpx_get_reg call in whpx_bump_rip too as it's no longer needed now. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index ab8e97787f..75f0f062d4 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -881,7 +881,6 @@ static void handle_io(CPUState *env, uint16_t port, voi= d *buffer, static void whpx_bump_rip(CPUState *cpu, WHV_RUN_VP_EXIT_CONTEXT *exit_ctx) { WHV_REGISTER_VALUE reg; - whpx_get_reg(cpu, WHvX64RegisterRip, ®); reg.Reg64 =3D exit_ctx->VpContext.Rip + exit_ctx->VpContext.Instructio= nLength; whpx_set_reg(cpu, WHvX64RegisterRip, reg); } @@ -909,13 +908,23 @@ static int whpx_handle_portio(CPUState *cpu, } else { reg.Reg64 =3D (uint64_t)val; } - whpx_bump_rip(cpu, exit_ctx); - whpx_set_reg(cpu, WHvX64RegisterRax, reg); + /* vmport calls cpu_synchronize_state on an I/O port read */ + if (!cpu->vcpu_dirty) { + whpx_bump_rip(cpu, exit_ctx); + whpx_set_reg(cpu, WHvX64RegisterRax, reg); + } else { + env->eip =3D exit_ctx->VpContext.Rip + exit_ctx->VpContext.Ins= tructionLength; + env->regs[R_EAX] =3D reg.Reg64; + } return 0; } else if (!ctx->AccessInfo.StringOp && ctx->AccessInfo.IsWrite) { RAX(env) =3D ctx->Rax; handle_io(cpu, ctx->PortNumber, &RAX(env), 1, ctx->AccessInfo.Acce= ssSize, 1); - whpx_bump_rip(cpu, exit_ctx); + if (!cpu->vcpu_dirty) { + whpx_bump_rip(cpu, exit_ctx); + } else { + env->eip =3D exit_ctx->VpContext.Rip + exit_ctx->VpContext.Ins= tructionLength; + } return 0; } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894327; cv=none; d=zohomail.com; s=zohoarc; b=a0ULElXzKpakTt9jUO0WJgYpBhO7hf2Sz0rRRmcAWkZdiXEj1UAghuTqTcyNDUdg5m/8QEcBS2Z1iOX41EFlKxn+uBCB3Qt/4S3jeXSyszyMoMEoM+RW1RRlTnPeEuTrrZ9kP+MYJ0TZaLn/r1wUZ0Sz7Doj6bAewXzA8F//R54= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894327; 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=apFntVvXXg/DVOj5xArakcZd3i9aDzEc71pb/wAzo6Y=; b=Ro9kiDELZVBjOycoqm1+IRVNiieOuaU/y18lUJjBmsisaWgTvnma814fw4W63NwI+pxghA9456L6tGJNndZBAGE3RaRFwdzCuwTajIROoMQwrW/zyRYxj7NmEPHmhoOrG71Je5cJIHJS/sNl3gMC7OOmtyNgEWr2fwQM8IXIc70= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177689432765333.6479362736269; Wed, 22 Apr 2026 14:45:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLV-00081T-1J; Wed, 22 Apr 2026 17:42:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLU-000812-2q for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:56 -0400 Received: from p-east2-cluster5-host1-snip4-7.eps.apple.com ([57.103.79.10] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLS-0007D0-LX for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:55 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id ADF491800227; Wed, 22 Apr 2026 21:42:52 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 7BFB51800956; Wed, 22 Apr 2026 21:42:50 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloBXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894174; x=1779486174; bh=apFntVvXXg/DVOj5xArakcZd3i9aDzEc71pb/wAzo6Y=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=egAEdnIeG8trIl4eKUKGgGzSvum2ASsCsxbw8ioz+NDv+dtXm1GSZkKnLd43paGeVCudJCF9yp2HJ9Ca6NSRzlVSMG5bN7SlRdvfF2ObbVtVJvg44krD/++kBsyr8oDSqHx0wE0MBMecPg47XTrSFkCohozrbW/VToSc0PwVde81jfwd7qi8ejARabFH7rK/8G4SLskg+3qwNrrAi3yYhH2/+xLDb1Huf8UuyHrSyfr3gWNMSI5z0AG6/U6MosnKpk3Es/k17sTHzpjO3/4FvsMPmPphGNvMMHv9m0Lb2zMN0SDY/I0PvZmMu3tmguRvcWvclig9MFd5laOjfBQUVQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 12/37] whpx: i386: disable enlightenments and LAPIC for isapc Date: Wed, 22 Apr 2026 23:42:00 +0200 Message-ID: <20260422214225.2242-13-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX+qfAd0S8tWWf EmEjNmdJA/Rz3i+WuLTeMi7HPyhavV6RRXA5KcY/6iORKlOPWlO2vM/Ab5PBk6nC1dPrwTOZeIq EcTmmGsjzKHcC4Ox57RI05qEPNMGWRujqj5TOUSfoUObrau0sqij7+YeHdYHsI1JYkWfBKLe/X+ jcqynUDTjxiIOkP43dSKXMGMNzn4VQK782Mnytu7JTIHlu7YYqy0vuoBWrJ59I2cbbvAVVpn/GQ FBZ2WuFyMyHOKZAkk8krB8r3vahgrOCN7gv2QxVlJlCivapcVNbeGDY4I/3W17T3NOObN3U/8nl 1/8gGKOxxUlghXhE2b1o1xmxw7lNPW7jAt3Tpf3DBeiwFC5yd3r3j6UVzdQFqc= X-Proofpoint-ORIG-GUID: PLGO0EXBIkbd5RgXuv8gkrHcGzktycPG X-Proofpoint-GUID: PLGO0EXBIkbd5RgXuv8gkrHcGzktycPG X-Authority-Info-Out: v=2.4 cv=JeGxbEKV c=1 sm=1 tr=0 ts=69e940dd cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kaNVauZA35-AGszze7oA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.10; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1776894328808154100 Content-Type: text/plain; charset="utf-8" The isapc machine doesn't have an APIC. And Hyper-V enlightenments don't sound too useful to have there so disable those. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 75f0f062d4..cbcf1de7ae 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2546,6 +2546,14 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 + /* for isapc, disable Hyper-V enlightenments and LAPIC */ + if (!strcmp(MACHINE_GET_CLASS(ms)->name, "isapc")) { + whpx->kernel_irqchip_allowed =3D false; + whpx->kernel_irqchip_required =3D false; + whpx->hyperv_enlightenments_allowed =3D false; + whpx->hyperv_enlightenments_required =3D false; + } + whpx->mem_quota =3D ms->ram_size; =20 hr =3D whp_dispatch.WHvGetCapability( --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894354; cv=none; d=zohomail.com; s=zohoarc; b=QFgjOfnTNTOykbNDx8nnTt/Iz/NOeeDnVNYNW7AzRoorsqFLNgI/bHC5RAlY83gm2aRFytLThpopSXrX8rLjNM3k7+O2dvbEOn9mE0BQvIz0fNIUgmG6Uv+Okrd307R5qJ9BtrGVFmuxD9tUqYyK1T2Ru2NcAKX5nHLcfE5sbxU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894354; 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=PTJ2O4Ojv4UoqiVrgxlmPkb95gxJ24lLpPPfWfj3pTE=; b=MP5EJoPMN1VxcxIbg/YXd4HsSIB3AuxlQGRYcr/wW99IGu6zsvY8KbL4hdlT0VkY5zb38LcUuKjuyfGHFZQEfjdHnjSJQoSrm+FvixabTS0JQbn78Fai+m+/mvu6bB18S7GPQWrj1IEKGliTENY3IzWYkZM/5JXTqYH9g7+0w5Q= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894354782175.86894888300708; Wed, 22 Apr 2026 14:45:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLf-00086D-1D; Wed, 22 Apr 2026 17:43:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLZ-00083v-Q0 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:01 -0400 Received: from p-east2-cluster1-host4-snip4-10.eps.apple.com ([57.103.76.23] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLY-0007Hh-7a for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:01 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 4D58218000A2; Wed, 22 Apr 2026 21:42:54 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 6250E1800216; Wed, 22 Apr 2026 21:42:52 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloGXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894179; x=1779486179; bh=PTJ2O4Ojv4UoqiVrgxlmPkb95gxJ24lLpPPfWfj3pTE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=UBBbu64ezrW4xm28OIPiijFWV/efay9SO+d/spZIe5hQ8qvIQmxiDbQu+uXaQ0U47tbeUfmVwr9zHnWrIHiYZ49DfWtTEE8T5B7fAYuFtYYIZMSYuiZCZfuQ0cK3+5VksYF/q7yxiDyf5VmlPQG+FHxV4yAx8S3Z4NpbSziPRRSx0CaRI7xIBKZ3yXw4wCXbum0oCVXSDUOGifCHinaBza1KR/UH9i2kw6Cjr9Jjxx9DJZ7vFQ27hS2s3KfGzQGro/WiCf+vK8NdSqG0WIxtt2Yp+vDjd1DYm9mwwxlCGlcQbyPv74Uj4cNPvJe/xdyr350LfWfAz50FlcWbPg2KPA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 13/37] whpx: i386: interrupt priority support Date: Wed, 22 Apr 2026 23:42:01 +0200 Message-ID: <20260422214225.2242-14-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: LdGl3CKip8ZBmp7o0_q-RZmnF_WqXqNx X-Proofpoint-ORIG-GUID: LdGl3CKip8ZBmp7o0_q-RZmnF_WqXqNx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfXz7fAEydlgM13 ZZt1rvLa3t6qelWKBNTaKAhHFWUoxAO/reMnIJRReWwfcRt2w8D2ST+kXQHDAnbQNB754V6Gv/t Q2FTaIQE1ZuYKCH+JWktZEzy4uosHRvgW0YuQ+0MThacD9FslkKJfI9sBGz7t8pxqemP1O2vjRj VWvef4jFF6azCQK0igYH+SpOuqCkHMrXn4kpHTnY4BsHUiieAr7v1RQELb+iUZuoBsyHOAVgrkO jAQEyC+CPMwAr3RkJXOUVYaaERqFE36isfl5oFKolFe1PLif83QZ+zho5tAgviH/Bbw1jK+suID gLhwgP7fSKIjzIx6Je+BrhdIgFbN2vdP5DHM60bM3hwfmsJGRtmT/7paBrC7L8= X-Authority-Info-Out: v=2.4 cv=b7e/I9Gx c=1 sm=1 tr=0 ts=69e940e1 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=NuKELtICf0aykZwt-QIA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=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: 1776894357587154100 Content-Type: text/plain; charset="utf-8" Implement APIC IRR interrupt priorities. Even with kernel-irqchip=3Doff, Hyper-V is aware of interrupt priorities and implements CR8/TPR, with the InterruptPriority field being followed. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index cbcf1de7ae..012fa6d021 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -1673,6 +1673,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) UINT32 reg_count =3D 0; WHV_REGISTER_VALUE reg_values[3]; WHV_REGISTER_NAME reg_names[3]; + int irr =3D apic_get_highest_priority_irr(x86_cpu->apic_state); =20 memset(&new_int, 0, sizeof(new_int)); memset(reg_values, 0, sizeof(reg_values)); @@ -1708,10 +1709,20 @@ static void whpx_vcpu_pre_run(CPUState *cpu) } } =20 + if (irr =3D=3D -1) { + if (isa_pic !=3D NULL && pic_get_output(isa_pic)) { + /* In case it's a PIC interrupt */ + irr =3D 0; + } else if (cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD)) { + abort(); + } + } + /* Get pending hard interruption or replay one that was overwritten */ if (!whpx_irqchip_in_kernel()) { if (!vcpu->interruption_pending && - vcpu->interruptable && (env->eflags & IF_MASK)) { + vcpu->interruptable && (env->eflags & IF_MASK) + && (vcpu->tpr < irr || irr =3D=3D 0)) { assert(!new_int.InterruptionPending); if (cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD)) { cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD); @@ -1768,13 +1779,17 @@ static void whpx_vcpu_pre_run(CPUState *cpu) } =20 /* Update the state of the interrupt delivery notification */ - if (!vcpu->window_registered && + if ((!vcpu->window_registered || + (vcpu->window_priority < irr && vcpu->window_priority !=3D 0) || + (irr =3D=3D 0 && vcpu->window_priority !=3D 0)) && cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD)) { reg_values[reg_count].DeliverabilityNotifications =3D (WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER) { - .InterruptNotification =3D 1 + .InterruptNotification =3D 1, + .InterruptPriority =3D irr >> 4 }; vcpu->window_registered =3D 1; + vcpu->window_priority =3D irr; reg_names[reg_count] =3D WHvX64RegisterDeliverabilityNotifications; reg_count +=3D 1; } @@ -1788,7 +1803,7 @@ static void whpx_vcpu_pre_run(CPUState *cpu) reg_names, reg_count, reg_values); if (FAILED(hr)) { error_report("WHPX: Failed to set interrupt state registers," - " hr=3D%08lx", hr); + " hr=3D%08lx, InterruptPriority=3D%i", hr, irr >>= 4); } } } @@ -2004,6 +2019,7 @@ int whpx_vcpu_run(CPUState *cpu) case WHvRunVpExitReasonX64InterruptWindow: vcpu->ready_for_pic_interrupt =3D 1; vcpu->window_registered =3D 0; + vcpu->window_priority =3D 0; ret =3D 0; break; =20 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894277; cv=none; d=zohomail.com; s=zohoarc; b=Wzg/Um3i4DY6BcBLpmS6NN3sf8Bi7HXXRo+nOckqGaNT2YD+plkBNsPWsAIkTxEEs41D9V+4PLhKQqOvcNd1mfC84E2nTjvsqCx8zPuCIsaaMwPYJOvRkAQ81TuG8xP/3QJSsz1nPbwzqakUO6W7fHRzrH8CVBAujAjQAyhLm1c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894277; 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=ZKPoujWieITU4lFOoYMwoz+Ev2hRigYtFeWxrkrjtmk=; b=fli6fq6UrzC1nHLkZB3HqZkfB2YY0enLBGbXewSrHHT37cARBakHAyNCJxAtwMlvdsVMce9Q4CMQXv/v85v8/ckrthCPivQ5Nolvz3ayM9HNqUvCZLQhf/1oOVesRbXTQkm5VSrz16YfFwUFOqkvw/+h7J7ZvGxydIpy7/fzmME= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894277337130.29851294229366; Wed, 22 Apr 2026 14:44:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLY-00083G-6T; Wed, 22 Apr 2026 17:43:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLW-00082K-GX for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:58 -0400 Received: from p-east2-cluster1-host11-snip4-10.eps.apple.com ([57.103.76.53] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLV-0007G8-5c for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:42:58 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 017F9180096A; Wed, 22 Apr 2026 21:42:55 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 431CC1800230; Wed, 22 Apr 2026 21:42:54 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloHXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894176; x=1779486176; bh=ZKPoujWieITU4lFOoYMwoz+Ev2hRigYtFeWxrkrjtmk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=FYHd81PyOQQMFwzULiOUV6YrlrcCWSR86Y2vTU+3E7FTBXjQ0QJuONoPxFWYRyVcfXfPixyloA3FtEZDTP7SBJ15mj0c0LRaEQILYYPOwh8zXSIO6surH7lKJMqOC4mtXt6BQK9jrdAX1EL9R/hDlquSQeb52dt3S4t/jwIqmS+Nh5l56NFUkWQXeg/vu+yUrz4H5FMqbBP+2dPx1bTVum44rzUkdxlG+TwGjYNIg32/XSb3Pc5n9BSZd13zjlnYCJRIc8ehHxjM9cak/UHBG0JHRoMXTQNbtb6Tbxjiknj5Syy7XKn05u8Db9MuZ5ma0CW03okwioqx2jjQdclMDA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 14/37] hw/intc: apic: disallow APIC reads when disabled Date: Wed, 22 Apr 2026 23:42:02 +0200 Message-ID: <20260422214225.2242-15-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: hQesJzdeXIdUFCn6hT4rmvmdXjO4kuNg X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX95RtQ0Ck+aY7 0r3hzAc+R7noqmggXUJifgh0hs69C0Yl13m4S04Ag1Ipa4Er6tQhvXoKT1AM/YDsAQZ45w4Hl2M /6YrAdRX2sKVkU7ny5I7oa7O8NVQ/NKm/SncHo2wDcbWln7Bd072Q2uSCPJbLMlY6zeLI67WdrM 20gLFq5OJk6cLI/8j0aA0hNA/VuX3Zb00YpQ59H2um9XAJRW9nfMxNZmKXXlTCPjkhKmlG9iiJT LrC7BOYr0JJFuWrXFJL2qMWjM60a9fb03/iepjzxQIjUXOi9zCoLVL+fYvPgP7oWr71PGhU411k 6WFn2B4T1ppu/4cRqVFW/y8kulSuBMkuAg4tmV7dbixq2LoNdVErZ0B+DZR2Vo= X-Authority-Info-Out: v=2.4 cv=BpmQAIX5 c=1 sm=1 tr=0 ts=69e940e0 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=JYwUPf56aOQolOdNqfgA:9 X-Proofpoint-GUID: hQesJzdeXIdUFCn6hT4rmvmdXjO4kuNg 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.53; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=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: 1776894278955158500 Content-Type: text/plain; charset="utf-8" !APICBASE_ENABLE + attempting to read xAPIC registers is not an allowed com= bination. And neither is x2APIC enabled + attempting to read xAPIC registers Signed-off-by: Mohamed Mediouni --- hw/intc/apic.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/intc/apic.c b/hw/intc/apic.c index 8766ed00b9..e5ea831261 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -875,6 +875,15 @@ static uint64_t apic_mem_read(void *opaque, hwaddr add= r, unsigned size) return -1; } =20 + /* if the xAPIC is disabled, return early. */ + if (!(s->apicbase & MSR_IA32_APICBASE_ENABLE)) { + return 0xffffffff; + } + + if (is_x2apic_mode(s)) { + return 0xffffffff; + } + index =3D (addr >> 4) & 0xff; apic_register_read(s, index, &val); =20 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894278; cv=none; d=zohomail.com; s=zohoarc; b=OY9dMsn5fJzNoaZHaC9IgFkN6mqF8QMY94KxUBDNkrAi9CGQW9Qepv5lN9lN1Tb8xHS0OTF1edES9nNqh2mTg5LAFAxWCe/eAauigy6zMJyq9gzSoZ4SVL/o8mV8baAouVfelEHS+/jNkyLCPBe89YQskXI1BeXPeIf4n8AFKBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894278; 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=mZk1MRNsRZuauqJZJ5eYDVOD6iZiU/IQRXxLoFpZKvg=; b=WQZRx9i/+G2NLwugZ4pR9lBp07lZN+PtezQ3ojd6G//y9VDrEe86DjmMwc51VzoY1K9/uC0PT+SuYkiJ9iR7F/xROmn+Cdyam7c9kCYohZJC1ZS1xEUMd6ckHIkyaY5jKJK4sZo6H6ZWSV0R+6s7XhaYEKMojVfRy/qZwhmFC2c= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177689427830577.393374821105; Wed, 22 Apr 2026 14:44:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLm-00089l-QY; Wed, 22 Apr 2026 17:43:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLd-00085K-V3 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:06 -0400 Received: from p-east2-cluster1-host3-snip4-10.eps.apple.com ([57.103.76.13] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLa-0007IA-1P for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:04 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 477EA18006F2; Wed, 22 Apr 2026 21:42:58 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 24748180020B; Wed, 22 Apr 2026 21:42:56 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloEXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894181; x=1779486181; bh=mZk1MRNsRZuauqJZJ5eYDVOD6iZiU/IQRXxLoFpZKvg=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ZEFFTIwolrTE9xqAMkY6yJvef9mxi6zNeNLrlWdcxYKv58g5SF67XagvEmd/rKXkbmzkmKTfNtAJcVYcHnfZ3nhbajAATrNpBRBEvQyHKgJNcmnqYRC6BA4b2cmwmFBIkamW642nOcgfHSQy+KPe8kBwwTZH39pAhKd4fGx+aXbq9Lz0I3ENGul88ya2qeRk9xJgftiJRzCpqaxtii0NwtIKwgqe8mQI38uXUwCW4cirL4kj7ygWH2JpsbXMt7JB4lmlOgIlARo27Uxu32/FPn7hEMY5+/mXk/s5yxbMEAEY8P3/4xEQi47+UpWbizGkxghi6ptFWLC4m52Ss1D9Lw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 15/37] whpx: i386: fix CPUID[1:EDX].APIC reporting Date: Wed, 22 Apr 2026 23:42:03 +0200 Message-ID: <20260422214225.2242-16-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX6IUwjBLcIwCC 3egNaICsctHJX/PgJbu3iN9XqwA6dSfuKmlk/AHCPEgKDfblBtHxAUG26TK/yean3FJPJ4I4sb8 GECR3YU6MaCzdhmW42pofFMcVTchXIAKfD1Y/1Pwu8XQd2PX63cCwfVePL9ikd+bdWLeYB3PGR5 0GoNnPsZJoeVxVAjZDAli53bp4MuPj1wNl4c9lU9N2Pw355kq3xLRiqyj8smOdKCIE/ilyfEdng g4UjpFVI2DCAiBN1XrDbarcCAiUe7rb1i/uoxUdxsN7DKmRPs0RFDE6SLB4QNCBg+nGUIAsVKAq qzBxxdC71gGBaLtDKDrva1ShfhZWPMoyHenBTWZDApyU3WcdhiGJlkLqeWuKd0= X-Proofpoint-GUID: 5sXS-ZLVWminzvkXQct3kjCSt9o-a-F0 X-Authority-Info-Out: v=2.4 cv=VKrQXtPX c=1 sm=1 tr=0 ts=69e940e3 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=ljJ9V6m273jqBh-Cp98A:9 X-Proofpoint-ORIG-GUID: 5sXS-ZLVWminzvkXQct3kjCSt9o-a-F0 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.13; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894279071158500 Content-Type: text/plain; charset="utf-8" Hyper-V always has CPUID[1:EDX].APIC set, even when the APIC isn't enabled = yet. Work around this by also using the APICBASE trap for kernel-irqchip=3Don. Signed-off-by: Mohamed Mediouni --- include/system/whpx-common.h | 1 - target/i386/whpx/whpx-all.c | 34 ++++++++--------- target/i386/whpx/whpx-apic.c | 71 ++++++++++++++++++++++++++++++++++-- 3 files changed, 84 insertions(+), 22 deletions(-) diff --git a/include/system/whpx-common.h b/include/system/whpx-common.h index 3406c20fec..79710e2fb3 100644 --- a/include/system/whpx-common.h +++ b/include/system/whpx-common.h @@ -8,7 +8,6 @@ struct AccelCPUState { bool interruptable; bool ready_for_pic_interrupt; uint64_t tpr; - uint64_t apic_base; bool interruption_pending; /* Must be the last field as it may have a tail */ WHV_RUN_VP_EXIT_CONTEXT exit_ctx; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 012fa6d021..b055644580 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -139,7 +139,6 @@ static const WHV_REGISTER_NAME whpx_register_names[] = =3D { #ifdef TARGET_X86_64 WHvX64RegisterKernelGsBase, #endif - WHvX64RegisterApicBase, /* WHvX64RegisterPat, */ WHvX64RegisterSysenterCs, WHvX64RegisterSysenterEip, @@ -420,7 +419,6 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel l= evel) r86 =3D !(env->cr[0] & CR0_PE_MASK); =20 vcpu->tpr =3D cpu_get_apic_tpr(x86_cpu->apic_state); - vcpu->apic_base =3D cpu_get_apic_base(x86_cpu->apic_state); =20 idx =3D 0; =20 @@ -538,9 +536,6 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel l= evel) vcxt.values[idx++].Reg64 =3D env->kernelgsbase; #endif =20 - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterApicBase); - vcxt.values[idx++].Reg64 =3D vcpu->apic_base; - /* WHvX64RegisterPat - Skipped */ =20 assert(whpx_register_names[idx] =3D=3D WHvX64RegisterSysenterCs); @@ -575,6 +570,12 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel = level) error_report("WHPX: Failed to set virtual processor context, hr=3D= %08lx", hr); } + + if (level >=3D WHPX_LEVEL_FULL_STATE) { + WHV_REGISTER_VALUE apic_base =3D {}; + apic_base.Reg64 =3D cpu_get_apic_base(X86_CPU(cpu)->apic_state); + whpx_set_reg(cpu, WHvX64RegisterApicBase, apic_base); + } } =20 static int whpx_get_tsc(CPUState *cpu) @@ -666,7 +667,7 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel l= evel) X86CPU *x86_cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86_cpu->env; struct whpx_register_set vcxt; - uint64_t tpr, apic_base; + uint64_t tpr; HRESULT hr; int idx; int idx_next; @@ -798,13 +799,6 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel = level) env->kernelgsbase =3D vcxt.values[idx++].Reg64; #endif =20 - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterApicBase); - apic_base =3D vcxt.values[idx++].Reg64; - if (apic_base !=3D vcpu->apic_base) { - vcpu->apic_base =3D apic_base; - cpu_set_apic_base(x86_cpu->apic_state, vcpu->apic_base); - } - /* WHvX64RegisterPat - Skipped */ =20 assert(whpx_register_names[idx] =3D=3D WHvX64RegisterSysenterCs); @@ -2082,8 +2076,7 @@ int whpx_vcpu_run(CPUState *cpu) val =3D X86_CPU(cpu)->env.apic_bus_freq; } =20 - if (!whpx_irqchip_in_kernel() && - vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D MSR_IA32_APICBAS= E) { + if (vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D MSR_IA32_APICBAS= E) { is_known_msr =3D 1; if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { /* Read path unreachable on Hyper-V */ @@ -2233,6 +2226,13 @@ int whpx_vcpu_run(CPUState *cpu) } else { reg_values[2].Reg32 &=3D ~CPUID_EXT_X2APIC; } + + /* CPUID[1:EDX].APIC is dynamic */ + if (env->features[FEAT_1_EDX] & CPUID_APIC) { + reg_values[3].Reg32 |=3D CPUID_APIC; + } else { + reg_values[3].Reg32 &=3D ~CPUID_APIC; + } } =20 /* Dynamic depending on XCR0 and XSS, so query DefaultResult */ @@ -2804,9 +2804,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) =20 memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.X64MsrExitBitmap.UnhandledMsrs =3D 1; - if (!whpx_irqchip_in_kernel()) { - prop.X64MsrExitBitmap.ApicBaseMsrWrite =3D 1; - } + prop.X64MsrExitBitmap.ApicBaseMsrWrite =3D 1; =20 hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c index f26ecaf6e8..65629ca45f 100644 --- a/target/i386/whpx/whpx-apic.c +++ b/target/i386/whpx/whpx-apic.c @@ -90,9 +90,70 @@ static void whpx_get_apic_state(APICCommonState *s, apic_next_timer(s, s->initial_count_load_time); } =20 -static int whpx_apic_set_base(APICCommonState *s, uint64_t val) +static int apic_set_base_check(APICCommonState *s, uint64_t val) { - s->apicbase =3D val; + /* Enable x2apic when x2apic is not supported by CPU */ + if (!cpu_has_x2apic_feature(&s->cpu->env) && + val & MSR_IA32_APICBASE_EXTD) { + return -1; + } + + /* + * Transition into invalid state + * (s->apicbase & MSR_IA32_APICBASE_ENABLE =3D=3D 0) && + * (s->apicbase & MSR_IA32_APICBASE_EXTD) =3D=3D 1 + */ + if (!(val & MSR_IA32_APICBASE_ENABLE) && + (val & MSR_IA32_APICBASE_EXTD)) { + return -1; + } + + /* Invalid transition from disabled mode to x2APIC */ + if (!(s->apicbase & MSR_IA32_APICBASE_ENABLE) && + !(s->apicbase & MSR_IA32_APICBASE_EXTD) && + (val & MSR_IA32_APICBASE_ENABLE) && + (val & MSR_IA32_APICBASE_EXTD)) { + return -1; + } + + /* Invalid transition from x2APIC to xAPIC */ + if ((s->apicbase & MSR_IA32_APICBASE_ENABLE) && + (s->apicbase & MSR_IA32_APICBASE_EXTD) && + (val & MSR_IA32_APICBASE_ENABLE) && + !(val & MSR_IA32_APICBASE_EXTD)) { + return -1; + } + + return 0; +} + +static int apic_set_base(APICCommonState *s, uint64_t val) +{ + if (apic_set_base_check(s, val) < 0) { + return -1; + } + + s->apicbase =3D (val & MSR_IA32_APICBASE_BASE) | + (s->apicbase & (MSR_IA32_APICBASE_BSP | MSR_IA32_APICBASE_ENABLE)); + if (!(val & MSR_IA32_APICBASE_ENABLE)) { + s->apicbase &=3D ~MSR_IA32_APICBASE_ENABLE; + cpu_clear_apic_feature(&s->cpu->env); + } + + /* Transition from disabled mode to xAPIC */ + if (!(s->apicbase & MSR_IA32_APICBASE_ENABLE) && + (val & MSR_IA32_APICBASE_ENABLE)) { + s->apicbase |=3D MSR_IA32_APICBASE_ENABLE; + cpu_set_apic_feature(&s->cpu->env); + } + + /* Transition from xAPIC to x2APIC */ + if (cpu_has_x2apic_feature(&s->cpu->env) && + !(s->apicbase & MSR_IA32_APICBASE_EXTD) && + (val & MSR_IA32_APICBASE_EXTD)) { + s->apicbase |=3D MSR_IA32_APICBASE_EXTD; + } + return 0; } =20 @@ -235,6 +296,10 @@ static void whpx_apic_mem_write(void *opaque, hwaddr a= ddr, static const MemoryRegionOps whpx_apic_io_ops =3D { .read =3D whpx_apic_mem_read, .write =3D whpx_apic_mem_write, + .impl.min_access_size =3D 1, + .impl.max_access_size =3D 4, + .valid.min_access_size =3D 1, + .valid.max_access_size =3D 4, .endianness =3D DEVICE_LITTLE_ENDIAN, }; =20 @@ -262,7 +327,7 @@ static void whpx_apic_class_init(ObjectClass *klass, co= nst void *data) =20 k->realize =3D whpx_apic_realize; k->reset =3D whpx_apic_reset; - k->set_base =3D whpx_apic_set_base; + k->set_base =3D apic_set_base; k->set_tpr =3D whpx_apic_set_tpr; k->get_tpr =3D whpx_apic_get_tpr; k->post_load =3D whpx_apic_post_load; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894231; cv=none; d=zohomail.com; s=zohoarc; b=bmESKmoGAHJuWqs7c/9+vwU2jULPcMi7GMGGsLSniNhhIr79YSF2yOchf6j1xjuYZjD6Mqcl2R6iscQBEa3gmEaQToVHTYm8WEgTX6dhbciHYjLE/LKxwT9bIoCnd4vRPQbU3BGd+vEI97Bv0GHHqQCORQqXu4nBT6He/sAPAQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894231; 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=rcvN8W6TfAn9CQxzjJv35V1zHDjrUIY5UE/Zi9pAWEA=; b=IMvwd9+CgP4XrIHTiK9M5iGt7oZCNUYSlNgaN/g5/XuN1NQeI2oxw6xeqsSccbzR2PTaO4IlIPMIvciwwvycIeidiI9mxQ/wxFG3DZCYAxtMlR3MVojvptp9zHeT7QJw/eo4zLbHmaBvVtmfMZKZdA/CmRtP3pRpQjiXry9wpuo= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894231640168.26419411626875; Wed, 22 Apr 2026 14:43:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLh-000879-4D; Wed, 22 Apr 2026 17:43:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLd-00085J-Un for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:06 -0400 Received: from p-east2-cluster1-host8-snip4-10.eps.apple.com ([57.103.76.83] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLb-0007It-Q1 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:04 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 2D7A01800216; Wed, 22 Apr 2026 21:43:00 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id EF828180021C; Wed, 22 Apr 2026 21:42:57 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloFXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894183; x=1779486183; bh=rcvN8W6TfAn9CQxzjJv35V1zHDjrUIY5UE/Zi9pAWEA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=b2sZ1HsNz1wrMGrhrPl2Kof7x+wPmDXULiZgaSosqI4ezRTy4Uuk7haWxxXbLcs8pkZH0HJtDWqDj5/4VxM5KR/mbiyPJZLnN3JYMX0eYjOpYA7IyTCHaUrTVJyjGgBC2mftzJux74IC4oYr3YQCNRBmyG7VSFctKeY+zIuv5Hc4bhAysPQcgXldVRjsqNyoOPcVdxg/Z44vVJeGRwhVjlfkrZBUZfANd3z7tVizBlcchUExp0GXPC73+RKhNlDWIk2zlG8kOduP7uMkPU6rw1bL6J5j2/ZK9ttogOY+CRNUuq/qvg6M7Vwp47ctIwWPT9LcdG7YsgBV0igoYQie1Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 16/37] whpx: i386: set apicbase value only on success Date: Wed, 22 Apr 2026 23:42:04 +0200 Message-ID: <20260422214225.2242-17-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX+onR1LftCXT0 bUjPt0lHqwfsz6VO4VDHg35D5D8PNvhIjZKxbbv6v5ys+LHdiKCN9j3iBR+ZNNbspk3EWJi0vCL m93ftWmuAHclzHtoSYHY8DXd8+7jYIG1KXaDnm+4s/R2m7u+RZNa9LQI59L3r1bbPbgjyHUTkpU MehSTG/2vwLy81PPDmititxwkyoVosJTvlsfRQbe/39Bjpbgr31Tg1FdrUyb+NCR54FYTJH2OXS gtY5eglFG5jUHOPlxsz2Yhpx/rZEJTaYm8151m5jeSWEX11YG//jcqs3ABjieDGwFJk8EeT6HrJ 9pcdslurS8ziuGOhpVvBcvf/mH9AqqZNh2qYYiiG6kABSZ6b83nsvbVnNse6v4= X-Authority-Info-Out: v=2.4 cv=cIbtc1eN c=1 sm=1 tr=0 ts=69e940e5 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=uh2sygq7LFHjsVUyvz4A:9 X-Proofpoint-ORIG-GUID: 7EKII59BFvYIRmMjkG74dlLA75Ieewe3 X-Proofpoint-GUID: 7EKII59BFvYIRmMjkG74dlLA75Ieewe3 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -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, 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: 1776894237142154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index b055644580..3426811c48 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2086,8 +2086,9 @@ int whpx_vcpu_run(CPUState *cpu) int msr_ret =3D cpu_set_apic_base(X86_CPU(cpu)->apic_s= tate, val); if (msr_ret < 0) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + } else { + whpx_set_reg(cpu, WHvX64RegisterApicBase, reg); } - whpx_set_reg(cpu, WHvX64RegisterApicBase, reg); } } =20 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894293; cv=none; d=zohomail.com; s=zohoarc; b=Ra0L4QfwqDT8rQvACaTZzBedvBztsbMdZNko6wzU47KlheOJrXzahjXJeUnjhcOm5XlF7tVErXWYkgYF9KWUkssRnL0pkEK8mHAu3sOkXSa3yr94keHL3eREvAHALkRbPSDzRTCpa18Y09b8hUE3CbYiZLgG0McMu8ZHNTovbGk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894293; 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=a4bAw1HDBgRU0T/rl/EmfzkgG6FT8af3C1AcP0W3dJM=; b=D+cKaGwZXXjRNaWkq+9jR3aAhvu1zFyy6z5aU1GRlh5fQb/TEwW8/sMpxOif03XG5bzsqRC7t+ZCIg2YUzB5C1NU2frcQQfchgkgFDHnkCUXmg9iZaHjj9PtnzV3x1pt9/e9vxsLn5mu894QPza+n5G4acdlAuaqwwZU4JwJ3to= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894293167475.067518944991; Wed, 22 Apr 2026 14:44:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLp-0008Et-1O; Wed, 22 Apr 2026 17:43:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLf-00086X-D0 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:08 -0400 Received: from p-east2-cluster1-host12-snip4-1.eps.apple.com ([57.103.76.54] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLb-0007J4-Uk for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:07 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id F3C3B1800232; Wed, 22 Apr 2026 21:43:01 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id D1AE91800950; Wed, 22 Apr 2026 21:42:59 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloKXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894183; x=1779486183; bh=a4bAw1HDBgRU0T/rl/EmfzkgG6FT8af3C1AcP0W3dJM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=ZS+if+h0jlXQhDcZj7ZqjSsDX1R/rjyvnoyahsxVqQg/0b44kk9Upzy3rCGONx4zFfCbLc+ivuyWRkAQuYiTlBE9jgJCFBqgibWqcGaDFC3C0grhKDjE3YsUNAF8lo3EJMPQXl2QXqm+dWxfJrYbiNx86dyTJ3YmK+dsTwMEDLF0AVfh/PMT4FYLbG+Pmv5EGZYdCZo+AJdV711zkMWpAHoMtfXV1xgnJSvrw3ruEQXYaI3435O4P34D/VXYIfmDKgK0gV8H88tqc4+LWesdkFDY80GjSH2bp6320V4uxMWWP1+CiR+UkGUVANbciBXYAIyUAdCZNR/La0/LGDW0jw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 17/37] whpx: i386: unknown MSR configurability Date: Wed, 22 Apr 2026 23:42:05 +0200 Message-ID: <20260422214225.2242-18-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=JK02csKb c=1 sm=1 tr=0 ts=69e940e7 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=XlFqsGflGfdv-AKn0wkA:9 X-Proofpoint-ORIG-GUID: qjlvJY7nUid2hSQe8IWh0Ic60j_pSCgl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX+dvJ6D8g5jNF ndtfi03LhcR8b/VsbQ2l8AWcxpQkiSIErswDAjjcG4alGjUREkvDj4brrAaCTHC+SXc8pv9Mb3L hWPT/G9DBpeynoww/gJYt2eSU12GuFYaPuFcFfwf+rInNxtxJpQ5DMPK6QrkwKlvTTLskVx0C4V wOwwlHGn+4zmmWUUDPLLm788KQtF2sO0FzfEo70n2hIzBvt8GgBnLOpt3ir2nvlc2eWiRe0K2xM mcKB9oVP7kQ2vxI+uwtR0AlpYYTWjxm8b3Bat+Or4iE6SidItn//fqF7hks7ajXB885QZFeSphd uQ8lgwM5/wVLI/hrjmZajQh/gTIZDqmY/UkZSBoLJMm1aOKQveGQDu24PF5G2o= X-Proofpoint-GUID: qjlvJY7nUid2hSQe8IWh0Ic60j_pSCgl 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.54; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894295069158500 Content-Type: text/plain; charset="utf-8" Add an option to inject back a GPF for unknown MSRs. Keep it on by default for now as Linux expects accesses to some AMD-specific MSRs to always succeed when on an AMD host. Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 3 +++ include/system/whpx-all.h | 1 + include/system/whpx-internal.h | 1 + target/arm/whpx/whpx-all.c | 4 +++ target/i386/whpx/whpx-all.c | 45 ++++++++++++++++++++++++++++++++++ 5 files changed, 54 insertions(+) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 59be996aef..497c03138e 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -538,6 +538,8 @@ static void whpx_accel_class_init(ObjectClass *oc, cons= t void *data) NULL, NULL); object_class_property_set_description(oc, "hyperv", "Configure Hyper-V enlightenments"); + + whpx_arch_accel_class_init(oc); } =20 static void whpx_accel_instance_init(Object *obj) @@ -552,6 +554,7 @@ static void whpx_accel_instance_init(Object *obj) whpx->hyperv_enlightenments_required =3D false; /* Value determined at whpx_accel_init */ whpx->hyperv_enlightenments_enabled =3D false; + whpx->ignore_unknown_msr =3D true; } =20 static const TypeInfo whpx_accel_type =3D { diff --git a/include/system/whpx-all.h b/include/system/whpx-all.h index 2cbea71b14..4022571fff 100644 --- a/include/system/whpx-all.h +++ b/include/system/whpx-all.h @@ -20,6 +20,7 @@ void whpx_translate_cpu_breakpoints( CPUState *cpu, int cpu_breakpoint_count); void whpx_arch_destroy_vcpu(CPUState *cpu); +void whpx_arch_accel_class_init(ObjectClass *oc); =20 /* called by whpx-accel-ops */ bool whpx_arch_supports_guest_debug(void); diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index cf782cf5f8..86639627b3 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -47,6 +47,7 @@ struct whpx_state { bool hyperv_enlightenments_required; bool hyperv_enlightenments_enabled; =20 + bool ignore_unknown_msr; }; =20 extern struct whpx_state whpx_global; diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 4019a513aa..94304a4230 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -823,6 +823,10 @@ void whpx_cpu_instance_init(CPUState *cs) { } =20 +void whpx_arch_accel_class_init(ObjectClass *oc) +{ +} + int whpx_accel_init(AccelState *as, MachineState *ms) { struct whpx_state *whpx; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 3426811c48..7f0ad6a24f 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2133,6 +2133,10 @@ int whpx_vcpu_run(CPUState *cpu) vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite); } =20 + if (!is_known_msr && !whpx->ignore_unknown_msr) { + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GPF, 0= ); + } + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( whpx->partition, cpu->cpu_index, @@ -2532,6 +2536,47 @@ void whpx_cpu_instance_init(CPUState *cs) * Partition support */ =20 +static void whpx_set_unknown_msr(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffAuto mode; + + if (!visit_type_OnOffAuto(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_AUTO_ON: + whpx->ignore_unknown_msr =3D true; + break; + + case ON_OFF_AUTO_OFF: + whpx->ignore_unknown_msr =3D false; + break; + + case ON_OFF_AUTO_AUTO: + whpx->ignore_unknown_msr =3D true; + break; + default: + /* + * The value was checked in visit_type_OnOffAuto() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + +void whpx_arch_accel_class_init(ObjectClass *oc) +{ + object_class_property_add(oc, "ignore-unknown-msr", "OnOffAuto", + NULL, whpx_set_unknown_msr, + NULL, NULL); + object_class_property_set_description(oc, "ignore-unknown-msr", + "Configure unknown MSR behavior"); +} + int whpx_accel_init(AccelState *as, MachineState *ms) { struct whpx_state *whpx; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894295; cv=none; d=zohomail.com; s=zohoarc; b=C2UElSKS3GwRUmVBLkT7l0MNpSth4OhyE5EJJ4o/bLGQOhrI6D/2zNcSd5wXlzZVM091SFGtBC2xHcGjnux/Pe9ToxUFHDlUmKkOd0p6o3OAbOxt83Y5JkBdMz5u3yBwFA1/3E1DaeJ6KcUspqq+HvOBonJiztMQ6JoGFtDBgWM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894295; 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=6k+QVVhEedD0Xq1yy0QYax0drBFdQJ4trzLWGWmhBHQ=; b=TSpAF7yWw1SrXwqxhmq6kkU2LrUH3tNZGCdyfhMSG5RLCN/81eG8O0FyP4J28gnQCX0Ly1eBYJIaQiAL2ZTrngNySn3rKSYn556mIHIksO2V+TBJqw2UQSkog5Z7lUjbr2V4Awx57uJVpfBUoBY5MIR6cXdrEm18J6tvRC6OHC8= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894295824523.3315788042964; Wed, 22 Apr 2026 14:44:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLq-0008HZ-2S; Wed, 22 Apr 2026 17:43:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLj-00088f-3J for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:11 -0400 Received: from p-east2-cluster1-host1-snip4-10.eps.apple.com ([57.103.76.33] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLg-0007LK-PM for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:10 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id B2BE11800C40; Wed, 22 Apr 2026 21:43:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id A7E28180020B; Wed, 22 Apr 2026 21:43:01 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGloLXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894187; x=1779486187; bh=6k+QVVhEedD0Xq1yy0QYax0drBFdQJ4trzLWGWmhBHQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DdpCAl293i9SOjc88khbacKPFw7pncpMBoRAj/wGWxDI/ss/sP7jc2GyDiga8zde8jtV7nhyqOmjsX1G1ppksVc8O8Iy62pBS2oqsoO/e9kn8X9iKDqDZazXoVJlV9QMmz5Amvmt1NzjZtvo374f/AYwQahuXllQo9jR1V1soQyIRjHT42354mhlFDyKUZ5sAF9olJmd23KFgzU/SDMJYQd5GodSiglJLDktnZf5R0ifIv69/Eo+Ym08Dki9EY4YiCZ7g0ZExtT4WlN+TaquWO+VuIGlCnB+60XSJOSjWRRAVnZoQSGLLom2KNk9LHA8FkwPIwIT+b0v5+lzvQbFyg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 18/37] whpx: i386: enable GuestIdleReg enlightenment Date: Wed, 22 Apr 2026 23:42:06 +0200 Message-ID: <20260422214225.2242-19-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=bpRBxUai c=1 sm=1 tr=0 ts=69e940ea cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=givlr1pFTcEyfNb0yRoA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX0QmNiMeW/qAE tI+c/FYi1FEAat5a7H8tWqK/qUgB8KzgCHTG25xLYymV612oHj4ROYF/VANI1Nr8RqtYcI7bbcg eNtWTKcV5eNcnP9g+XrZjX8AhLXBi8Qx8qcvjF4RupvYCt60Lo4qEiIU/wthpoqmp8IOaX/kreN XBgByt+GxSi7AWsXRGZ84nw8egb5pZOGfLp8M7COb1Lcd7SyntindFyy0ObswTaetkbk6o8POFz Yt5wPmoN7Y4A0tYAIp/AF99Z29n6TnPckbtQ2Cs085s6kH/AHHUVo3wYKTv7M4+mYF1q+Iocls6 yblJ7Fn3MFwU8ezPYG51odS+nUf31QErhR9i+5VBCahaYdUHG6VCGrgtKUtc7k= X-Proofpoint-GUID: gC0gTZkBj92reTbumBd6Qu_K5PlDPMm3 X-Proofpoint-ORIG-GUID: gC0gTZkBj92reTbumBd6Qu_K5PlDPMm3 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894297165158500 Content-Type: text/plain; charset="utf-8" This corresponds to HV_X64_MSR_GUEST_IDLE (0x400000f0). This enlightenment is only available by the HV when using the Hyper-V LAPIC. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 7f0ad6a24f..eecc7f48ed 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2806,6 +2806,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.AccessIntrCtrlRegs =3D 1; synthetic_features.Bank0.SyntheticClusterIpi =3D 1; synthetic_features.Bank0.DirectSyntheticTimers =3D 1; + synthetic_features.Bank0.AccessGuestIdleReg =3D 1; /* * These technically work without the Hyper-V LAPIC * but behave oddly for multi-core VMs. --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894470; cv=none; d=zohomail.com; s=zohoarc; b=AR3AfZaFrc4zh6SjBznVXyMup0fhEGs98/mBeZmbxLYoiCbvfntETmbWowchKmDoTVjVv2xebtspNX2u88xohrK2r0cBm6y0SoMuSZBjxrhezTUxVs8Q7q9RW7dl2yVFwrUNVVIIEOMm4jyGyO4HUxH4y104klfjOk/ZFdB6M7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894470; 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=VwbCJMQOjdR/FYXB00bRp25vI47XadzN5iydMAM/HgY=; b=YnnhPfxnZ6Di8llXh5lM0iOgqdQ7gPz/CabyN9BmsM/j0eAIf323/F0ZS6X1EiRRVu0roMX2PlHlIcoXTyuXBc5oOloCrgXSuWIor+jqpqRaj56zaml2ABmfOcrQ2qJOH9DUnowtxzcSjOPOyPbAm4XQ6jib9ieNqaLvMgMy0UI= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894470035512.1358557246232; Wed, 22 Apr 2026 14:47:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLr-0008Ls-BU; Wed, 22 Apr 2026 17:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLi-00087V-8n for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:10 -0400 Received: from p-east2-cluster1-host1-snip4-10.eps.apple.com ([57.103.76.33] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLg-0007L0-J0 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:09 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 00D1D1800C5C; Wed, 22 Apr 2026 21:43:05 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 86A75180021C; Wed, 22 Apr 2026 21:43:03 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkCXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894187; x=1779486187; bh=VwbCJMQOjdR/FYXB00bRp25vI47XadzN5iydMAM/HgY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=dq2FKB8mCjD9MINwWiem2Gy9aOSMlGy3TfXyFYfuIkdZLPBJlStVstYkvYYUdMVpLy5srIfsOtjszScOoSdfB0b4sYL0Wma9AXMNGKNcole7akqhoolKgxKxpOECTw0pMOkUu5X0byYS1iTY41q5ugstbtl9gROZHgpZkY/9vEq8961TQ7A6pizlwCTYvt+ZTGFElb9Rw02VJIsI6E0Xl+YjAcJZMOMnDQMSUO4cfTln8G2tM5ZgXs/a6X+DMoWTi+d6ArlkN6X82fVj0Vk/65T5P6YiNJkrTtwlQplniixKZXfF4BSYpvihjKN9IvIBzSkzM5e2j4OxjeOwJ4qO7w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 19/37] whpx: i386: tighten APIC base validity check Date: Wed, 22 Apr 2026 23:42:07 +0200 Message-ID: <20260422214225.2242-20-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfXw0+xwYuvSptF RAv96mFmEuKyCO1ASgtbj7m39SwICKEAVzTzAqE9p03L5MhpIwIu6xwWPgX9MlRKps4nrTJexsn UWkMMp3vb77Zf+qOeH5bV1dO02MLg6LIlfXx1iHtBVFDLpJ1MHXe8wynnF/9Cxp31yVXP4Htmot Smfy2hT1ic+sNwk+2wp41l//HY37+T84fZuov135yecu7tRIfsCFwCELGA3tz0fBxGjgBd0TutT 7uZM4Unr5IozBJAXGQCv4d6L3p3CLtiIjBtkyD2H5rK/MpwEq2btx3MxP35fvsNW9FN9s7u9Thv wdHg1uBvNqjIsgSF++N7VfPuP6N7gPhhbvazqafFZ3nFV75yp6hOBlpGYnDYuE= X-Proofpoint-GUID: N_YulKQGm_yuOxyLLofGd58QM7H_uqQw X-Proofpoint-ORIG-GUID: N_YulKQGm_yuOxyLLofGd58QM7H_uqQw X-Authority-Info-Out: v=2.4 cv=VuUuwu2n c=1 sm=1 tr=0 ts=69e940eb cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=uh2sygq7LFHjsVUyvz4A:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.33; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894472963154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index eecc7f48ed..521a94355d 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2078,6 +2078,9 @@ int whpx_vcpu_run(CPUState *cpu) =20 if (vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D MSR_IA32_APICBAS= E) { is_known_msr =3D 1; + if (val & MSR_IA32_APICBASE_RESERVED) { + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GP= F, 0); + } if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { /* Read path unreachable on Hyper-V */ abort(); --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894254; cv=none; d=zohomail.com; s=zohoarc; b=S35b5o9sSAKzWPBpRNnBeMrYfHMpftg3Xrd+VsFuuYNGpxvCUJajWsJSzD//lDAMgnv7slXzLaxUJmkgDrPz4RXAKAe6C7P6QJk6WqIwBWwJacCmWxRwDTc3KG1BHG7kIu/pLj5cw47qWU0k85ITbjCLKoL1qbde8EWgNf6U+YM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894254; 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=qSKqOpNTte0i6xqqaDhNVr4w7bOKGXgaVxqQVqgKXKc=; b=SiHU4DXhcTywiHVVc/iKPXQHOsOktiDzlSxrMeo9+yOXfCamvredBjAd9oDcfdZdbWbUlNV9rbh7/8RBb3lK5F7KF0CeSVMvEKcJtOfc5dnNdoAYgRRRYR5m/ZbOx8BiWbYn9Yfdn21NNAPaUR6WDKtmJJRgrsbZqcZKRpN1AaY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894254242612.771891239423; Wed, 22 Apr 2026 14:44:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLq-0008Km-RD; Wed, 22 Apr 2026 17:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLn-0008DG-Ha for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:16 -0400 Received: from p-east2-cluster1-host11-snip4-1.eps.apple.com ([57.103.76.44] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLl-0007Ns-8f for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:15 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id BBB91180023C; Wed, 22 Apr 2026 21:43:10 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 65D7A1800950; Wed, 22 Apr 2026 21:43:05 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkDXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894192; x=1779486192; bh=qSKqOpNTte0i6xqqaDhNVr4w7bOKGXgaVxqQVqgKXKc=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=SoiHHTzEqpyKzDW320VPR2k/hDU3F171eacAhiXahRURxOKUnF1SNGWQQ0GXgx/9a66UMmiey1KOivvQA0IZJ5KwXZPSwo80uQ91Zyd3V+nUpAzQXG4tyBuEw6nCzFNHDDwGtMJR/2XvtQi0scrwqwMft1hPZIPMSocx9APD+9xOOd7DZK50AEFu0dPywwTr9UCSr44MIrS7p3VbG0sItkuXHi0S6bgDO0Q/g0a8SCpEA0aq5sGO5s85+ax9pQ27rCvIUwoFYlt6nEvM7O2VrP2LU3kMKo+wsV+2ACZnSy/W0TVDADYjOpj9YH5PJqckpKzL/UOeGyF+nf4E+Pbg1w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 20/37] whpx: i386: ignore vpassist when kernel-irqchip=off Date: Wed, 22 Apr 2026 23:42:08 +0200 Message-ID: <20260422214225.2242-21-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 5cRCVzpbtauORHHMFe00oue436sL8EHP X-Authority-Info-Out: v=2.4 cv=QJVlhwLL c=1 sm=1 tr=0 ts=69e940ef cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=HmN67jXOOwgiugJlUbgA:9 X-Proofpoint-ORIG-GUID: 5cRCVzpbtauORHHMFe00oue436sL8EHP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfXxm8kEI6dczqo bb7nG8VjGgXgJZ2Eca196pXYoUZMkez8A5KT0Tk4Mo+NPm/kGwX2GfB9+/uH1ZdWz6sOtnoqQ8U g5QorsPU9BCmGkWAIIDp9QYcwCShwRjf5XQlY2N7WMwCJIfLoZpqNe9CF2L61dV4tPzInZ9ulO8 9Ss/oeGHEPIB/AOsFmuhM/02mCHQyrd9rhSULVXW+5u5SeXBdAp5fmgzxUQMb+uzFkUZIqBNY4z jR39s8bfn57LeAcXQlDDS0DckmSYJKD3El6cIvS5o+vmp6EWh3zCPBC4D3FnuTuiGMQ8mgNkHu0 KD18pZABajySuX5nYAjhoLgjmV/QFKDGL2wtj8u5QfT9W/PyD+Iz/TUizJX43c= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.44; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894256115154100 Content-Type: text/plain; charset="utf-8" Linux tries to set vpassist even when none of the enlightenments using it are available. So ignore the page it sets. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 521a94355d..cafcbf8bbb 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -51,6 +51,7 @@ #define HYPERV_APIC_BUS_FREQUENCY (200000000ULL) /* for kernel-irqchip=3Doff */ #define HV_X64_MSR_APIC_FREQUENCY 0x40000023 +#define HV_X64_MSR_VP_ASSIST_PAGE 0x40000073 =20 static bool is_modern_os =3D true; =20 @@ -2118,6 +2119,18 @@ int whpx_vcpu_run(CPUState *cpu) } } } + + /* + * Linux tries to use it anyway even when not exposed. + * Ignore the write as the VP assist page is not used. + */ + if (vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D HV_X64_MSR_VP_AS= SIST_PAGE + && vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite + && !whpx_irqchip_in_kernel() + && whpx->hyperv_enlightenments_enabled) { + is_known_msr =3D 1; + } + /* * For all unsupported MSR access we: * ignore writes --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894423; cv=none; d=zohomail.com; s=zohoarc; b=cKkzKXJ6gJHwTAmDLgz/RHFuQYgx+fFAX7DjxAX/fcb6XjUaaTC1G3+JiLXWFNV496TsGlomjx8c0oQkvBc0LLMiat3PgetnvPNNRd9V2NqWli1+7IyiUv+q4I866KVo2iE57iO7NoUcE2hMVlTcK869PN+OG1HpEwTXHtkSVsY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894423; 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=9nFB9fdsbicAKGT1x9988h90J9W4/Agy5ocP8yXnAyQ=; b=MBrUATW9giIBc/Ns20kktQF0LsOy/Ty15utZW6BRk7FP2uvgvP0RucIqj1lcqkvGvDMnJ/JWd5DWu5bHkWQbx0f2/X/mnrHQFzLSu9lKrI/BjY4hw7DL3ttmKisV0q6RTipYvKXlr+XxkG3vXAlHAjItOgbmW3qJYW2UNVAxVxg= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894423069871.0011316038314; Wed, 22 Apr 2026 14:47:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLr-0008NJ-Ol; Wed, 22 Apr 2026 17:43:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLm-00089m-B0 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:14 -0400 Received: from p-east2-cluster1-host5-snip4-10.eps.apple.com ([57.103.76.93] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLk-0007NA-Lf for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:14 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 6ED091800227; Wed, 22 Apr 2026 21:43:09 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 44DB518000B2; Wed, 22 Apr 2026 21:43:07 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkAXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894190; x=1779486190; bh=9nFB9fdsbicAKGT1x9988h90J9W4/Agy5ocP8yXnAyQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=cXNqS4MdcsEou5PVRW7KM2ojkkSWtXg4322MURyGlPBoln9XBjhn6w3qQXL5KWmrxRyCM9d2YSixdUnwcRShuilkQzVlm24x7gBIRFkNAh+AKvSqmJURvkKC+l0tN+CMZTWjt2YL0K9ZxQEJsDxWfZOr5l2wkZQA6oAXvja0jkz3zvs67slb2lG80cWhXtrsx2CthvuPOcnzgBa+9OOY3ikuRyESrgkbekxI9w61uUQzIwlKpPNeN/CsGlb5DSeY8RqffUSxCE1scGjmsErRp0SoLqUgaI7P30ypIzrtL1Ys6BMrDI04YtzLUOd/idMdLWW5pwxRUBC2kmK+tuF/oA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 21/37] target: i386: HLT type that ignores EFLAGS.IF Date: Wed, 22 Apr 2026 23:42:09 +0200 Message-ID: <20260422214225.2242-22-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: BHPSpsv3qBW1sJYK9f2_SKrs0OeWjJne X-Proofpoint-ORIG-GUID: BHPSpsv3qBW1sJYK9f2_SKrs0OeWjJne X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX4qudecbySQhS QxlYlP1JAKeIKhYUPwqKmAxp/CTEJVo3/IwOsHQkMQ6fy131oe3+/UalulsdRxxdVomaPv9p2jJ cWdPJg9yInlqDcUT8DXQ2SDUxv7mrOU2MXnwvk9B4AmYlTpdtcae2KiRzjzVI9Afki2//nfdg1R 10KeyxmEgq3evLucMBbFfwiGNo4zCNHxixTVgbS+kJLwOdHyLu0vWqm8OfJlL25MibrNEmIY/2t 1g2gnwH3FvulMYBqqLbqG5BNzNBeMchNTtotcY63XeQ4/TOu97nJTRIHJWMbUcT8rJ8gVND8QgJ TLBbdbnwTQi4TemNlIHP+i7WMWg91hVAMzM0QjWrU87LBEthxGh9Tup+tN5msM= X-Authority-Info-Out: v=2.4 cv=b7e/I9Gx c=1 sm=1 tr=0 ts=69e940ee cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=ZtXhj7NgbhMgH__AbsQA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.93; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=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: 1776894423971158500 Content-Type: text/plain; charset="utf-8" The TLFS says: > A partition which possesses the AccessGuestIdleMsr privilege may trigger > entry into the virtual processor idle sleep state through a read to the > hypervisor-defined MSR HV_X64_MSR_GUEST_IDLE. The virtual processor will > be woken when an interrupt arrives, regardless of whether the interrupt > is enabled on the virtual processor or not. Meanwhile, Windows 24H2+ calls this MSR anyway without the privilege being = set. Add the infrastructure to support it on the generic QEMU side. Signed-off-by: Mohamed Mediouni --- target/i386/cpu.c | 10 ++++++---- target/i386/cpu.h | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index a5f1a1a8fd..c9ed9b7580 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -10474,13 +10474,15 @@ int x86_cpu_pending_interrupt(CPUState *cs, int i= nterrupt_request) (((env->hflags2 & HF2_VINTR_MASK) && (env->hflags2 & HF2_HIF_MASK)) || (!(env->hflags2 & HF2_VINTR_MASK) && - (env->eflags & IF_MASK && - !(env->hflags & HF_INHIBIT_IRQ_MASK))))) { + ((env->eflags & IF_MASK && + !(env->hflags & HF_INHIBIT_IRQ_MASK)) + || env->hflags2 & HF2_HYPERV_HLT_MASK)))) { return CPU_INTERRUPT_HARD; } else if (env->hflags2 & HF2_VGIF_MASK) { if((interrupt_request & CPU_INTERRUPT_VIRQ) && - (env->eflags & IF_MASK) && - !(env->hflags & HF_INHIBIT_IRQ_MASK)) { + ((env->eflags & IF_MASK && + !(env->hflags & HF_INHIBIT_IRQ_MASK)) + || env->hflags2 & HF2_HYPERV_HLT_MASK)) { return CPU_INTERRUPT_VIRQ; } } diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 0b539155c4..67f508dc10 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -225,6 +225,7 @@ typedef enum X86Seg { #define HF2_NPT_SHIFT 6 /* Nested Paging enabled */ #define HF2_IGNNE_SHIFT 7 /* Ignore CR0.NE=3D0 */ #define HF2_VGIF_SHIFT 8 /* Can take VIRQ*/ +#define HF2_HYPERV_HLT_SHIFT 9 /* Hyper-V HV_X64_MSR_GUEST_IDLE */ =20 #define HF2_GIF_MASK (1 << HF2_GIF_SHIFT) #define HF2_HIF_MASK (1 << HF2_HIF_SHIFT) @@ -235,6 +236,7 @@ typedef enum X86Seg { #define HF2_NPT_MASK (1 << HF2_NPT_SHIFT) #define HF2_IGNNE_MASK (1 << HF2_IGNNE_SHIFT) #define HF2_VGIF_MASK (1 << HF2_VGIF_SHIFT) +#define HF2_HYPERV_HLT_MASK (1 << HF2_HYPERV_HLT_SHIFT) =20 #define CR0_PE_SHIFT 0 #define CR0_MP_SHIFT 1 --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894426; cv=none; d=zohomail.com; s=zohoarc; b=ECpgD/OFvdIr6x5SsRGSpw0anUWNE+cZpRCcxXWsSah7tf+pHa9S8W6dR41e6HD3MzMt+Zl5oCK0QhyBBQnq8nM0iJ2IBCxP26URZxM7ALWIvtWBlCPLI+4IAC9DfULo0XDiTa46uXvj43LC/LW0eOoqXyO5KbN67klW+xu1nwc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894426; 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=YHkuVnpzX5n//Dg7yBbo00rWen0/V/dFS7/fQ041cHE=; b=TBS752fMf8ZuO+RcadeCW3kivDyDtOwsV/zo/RAfYAFnuwwn4ZB91/bjrfhpMulA6s7hkQNAAMQ/v6kmPqD/Hnds9407WCzmHjppyrHe+vDRgBdDudLY1K5rcsY+fYK66vIX5t8CRPWoZMu7srMJNY5KwAtDU+ZuIm3dUXExD2Y= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894426760978.7607885487761; Wed, 22 Apr 2026 14:47:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLs-0008Pp-Sp; Wed, 22 Apr 2026 17:43:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLp-0008Fu-6g for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:17 -0400 Received: from p-east2-cluster1-host10-snip4-1.eps.apple.com ([57.103.76.114] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLn-0007PE-Fx for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:16 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 481531800951; Wed, 22 Apr 2026 21:43:11 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 1F07C180021C; Wed, 22 Apr 2026 21:43:09 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkBXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894194; x=1779486194; bh=YHkuVnpzX5n//Dg7yBbo00rWen0/V/dFS7/fQ041cHE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=dKcY0fb3KVSd0W5I0YxVNQXJI/bxpuVyi3/imm26XaPn98a81iRRw0dOUE4aBnMkIubANS28PSMqNyZrCBA0pM/JFpE4QXcpRIHAPLImx45Md8wjZzkjnoHGfBRQxPwX3qqdlnJD+TDhoVZ/2pEOYy9iC4JQw2uQM4ecXiIKZO9HB5DObg1gCKE2DQC6ARxv0Pr5toKU4Cwc9EKxWcA7NQ9n9Y42pOAAvEJn7OXevq93e4gL8NwAHSV/f8eiqP8ExRHAFnkfsvQAwKWl6hMJ49HJnucpsqpigUnRMXpVTF77Q/di0FYQ7VZSgPLOFpPgKkemLSSst95b5MdgmICWdg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 22/37] whpx: i386: add HV_X64_MSR_GUEST_IDLE when !kernel-irqchip Date: Wed, 22 Apr 2026 23:42:10 +0200 Message-ID: <20260422214225.2242-23-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: m9g-lEtEjFVIUQr6zWpTvE6K5sgoJH9B X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX3M+Y4peERC38 7TSnI8/XOW1AbsHICKYBKhc4uwQx/QURAOJWV1F2QoDjkKPgG0eitBMp9a1zhTavTEgSF47YcG2 gbwue877SPgBfmfT3sE15jWi7Ru25yn29lD2J4YH+0x83tl1BNZfv72pBzPS3DMNgs3e9iXG8mV SZHfLkvdKlPSl91bp3OXvUjerc0qwbNr//Obp5fOdDeGjbibN4Fd5vm/BZOnlu0Rul0eshjq24F F6XSVbKC1m52KyLKyNgeHwlo6RUeIgRCWU7/2giN5qZp/PikdxTqdzcwQzUU+LVZOI/cvxNKelM zs3g5B9UF+iN4HphZ38RbxMbqwBEEJ/T/oIduYSVzqUlXAogMYJeOA+6tXrRUk= X-Proofpoint-ORIG-GUID: m9g-lEtEjFVIUQr6zWpTvE6K5sgoJH9B X-Authority-Info-Out: v=2.4 cv=VZL6/Vp9 c=1 sm=1 tr=0 ts=69e940f0 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=mSEN7FZ2dYRJNo9PPvgA:9 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.114; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894427625158500 Content-Type: text/plain; charset="utf-8" Add support for an oddball HV_X64_MSR_GUEST_IDLE not-quite-an-HLT that wakes the vCPU even if EFLAGS.IF is set. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 46 ++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index cafcbf8bbb..f03f5a5115 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -52,6 +52,7 @@ /* for kernel-irqchip=3Doff */ #define HV_X64_MSR_APIC_FREQUENCY 0x40000023 #define HV_X64_MSR_VP_ASSIST_PAGE 0x40000073 +#define HV_X64_MSR_GUEST_IDLE 0x400000f0 =20 static bool is_modern_os =3D true; =20 @@ -1628,13 +1629,16 @@ static vaddr whpx_vcpu_get_pc(CPUState *cpu, bool e= xit_context_valid) } } =20 -static int whpx_handle_halt(CPUState *cpu) +static int whpx_handle_halt_generic(CPUState *cpu) { + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + int ret =3D 0; =20 bql_lock(); if (!(cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD) && - (cpu_env(cpu)->eflags & IF_MASK)) && + ((cpu_env(cpu)->eflags & IF_MASK) || env->hflags2 & HF2_HYPERV_H= LT_MASK)) && !cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI)) { cpu->exception_index =3D EXCP_HLT; cpu->halted =3D true; @@ -1645,6 +1649,27 @@ static int whpx_handle_halt(CPUState *cpu) return ret; } =20 +static int whpx_handle_halt(CPUState *cpu) +{ + int ret =3D 0; + + ret =3D whpx_handle_halt_generic(cpu); + + return ret; +} + +static int whpx_handle_hyperv_guestidle(CPUState *cpu) +{ + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + int ret =3D 0; + + env->hflags2 |=3D HF2_HYPERV_HLT_MASK; + ret =3D whpx_handle_halt_generic(cpu); + + return ret; +} + static void whpx_vcpu_kick_out_of_hlt(CPUState *cpu)=20 { WHV_REGISTER_VALUE reg; @@ -1848,9 +1873,10 @@ static void whpx_vcpu_process_async_events(CPUState = *cpu) } =20 if ((cpu_test_interrupt(cpu, CPU_INTERRUPT_HARD) && - (env->eflags & IF_MASK)) || + ((env->eflags & IF_MASK) || env->hflags2 & HF2_HYPERV_HLT_MASK)) = || cpu_test_interrupt(cpu, CPU_INTERRUPT_NMI)) { cpu->halted =3D false; + env->hflags2 &=3D ~HF2_HYPERV_HLT_MASK; } =20 if (cpu_test_interrupt(cpu, CPU_INTERRUPT_SIPI)) { @@ -2120,6 +2146,20 @@ int whpx_vcpu_run(CPUState *cpu) } } =20 + /* + * Windows and Linux both use this MSR. + * Windows 11 25H2 uses it even when not advertised. + */ + if (vcpu->exit_ctx.MsrAccess.MsrNumber =3D=3D HV_X64_MSR_GUEST= _IDLE + && !vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite + && !whpx_irqchip_in_kernel() + && whpx->hyperv_enlightenments_enabled) { + is_known_msr =3D 1; + whpx_bump_rip(cpu, &vcpu->exit_ctx); + ret =3D whpx_handle_hyperv_guestidle(cpu); + break; + } + /* * Linux tries to use it anyway even when not exposed. * Ignore the write as the VP assist page is not used. --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894278; cv=none; d=zohomail.com; s=zohoarc; b=Bjh6xvSNdPQ3GUKwQgDH2O0phdu4a6URYR7SVO/wWe5N+BmiB2BuoyqUEe97GOMgtpM9jwG5llrZRjD3jz5HqWVS4ia15KHcrsk0PpoQJnbUmpiXe/QrB9EetJIWOQBuVnmpbiyu6Qkyh8R26kD8O7qajfspF/WFBMCPSwePS9I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894278; 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=9xbxyGGfjNH/HWQDHlAQCg/qgFyvlvlu7VNj5bZOFog=; b=Xqe1pzP4ZHh1TmUC2ywZVYx7K+CptK0P1wBiR2et1R1SCjWqdwawsXylhTvhPhsF2smexHh+deBlGpOskaNuxLnINRCEYorX6Fh5LlJEhckTHbSx0M8LcRb8zN/bw2NPKAeIhZef4YFYT3bLZd5LSOSaogSv+9JHG51/EqoT7qY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894278649525.3093670673013; Wed, 22 Apr 2026 14:44:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLq-0008It-A3; Wed, 22 Apr 2026 17:43:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLn-0008DI-L4 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:16 -0400 Received: from p-east2-cluster1-host12-snip4-3.eps.apple.com ([57.103.76.56] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLl-0007OM-K1 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:15 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 9C9B018000AF; Wed, 22 Apr 2026 21:43:12 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id F20DE18000C7; Wed, 22 Apr 2026 21:43:10 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkGXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894192; x=1779486192; bh=9xbxyGGfjNH/HWQDHlAQCg/qgFyvlvlu7VNj5bZOFog=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=XgEvEHGxgjt3ObOuI1V527PFdl4F0QOsl4hD+M9sF9pUtfWGq1G5i18PrNqZBraaMrrHcaI5hLVwUfTJcYxJZNp2jWGPTqv9KznVr/GZu9nTCQFH+JVH+nLNpVJFJLK6bp8AeHqguzbKHF+BLmMsU+BGpxSFjWNO04c6tqKnrDAY5T0+qjsG2u8iV9YN9XYqyw293J+VCyZgfIgITytiPhN+UCgL0q2PErNiJoF6vwX8psVBplqHXo5Ia510uMwgrcG9RvnzfSqQvrBF+QWiX0NocLJkMTnd6Zq3mvaDrC+MgD+1cYk5VVRg/27qxFusKiSsdbgmRls+bVja9e0GOw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 23/37] whpx: i386: some x2APIC awareness Date: Wed, 22 Apr 2026 23:42:11 +0200 Message-ID: <20260422214225.2242-24-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: 6Ko38eZqYwASC_EF5TPIPWpCRzZKP_Cb X-Proofpoint-ORIG-GUID: 6Ko38eZqYwASC_EF5TPIPWpCRzZKP_Cb X-Authority-Info-Out: v=2.4 cv=GJUF0+NK c=1 sm=1 tr=0 ts=69e940f0 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=IZZkQHPJHa8VUPCOrf4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX2ja6vWTaQb/K RMS3VMFO/ljYvQWO0ixZcRNQUz/VzLjWarc3yuiUPYqGKgxDMo6znD68pLPah6vAqYixiZPUt5o wQUe1rmv3Q3dHV5uS7Y+hE9Hfi0u0g6NIQDmp8KF665+ZuW2fLknb6k7TnlL4oTpOLqqFF6ALKL 8K79873XdfITRXmnotEebQsDPwStlBV/dgWGQotd3Mk14BrTWg2MbpwDJoPDkIcKdrrEUedf1Ne bN7zeNUrT9fOlLCYEwjOjNSw7O9zZyT4xi9AAEXOwENm8vrCFsPuX+S2BG+XwAm23E89mrAaXOT 8QmY/ako8aRAUyprI0elYcAAqRq28cLFWFFF1bz4hBRiIjj0+ROIwONARuSVwU= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.56; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1776894280077154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-apic.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/target/i386/whpx/whpx-apic.c b/target/i386/whpx/whpx-apic.c index 65629ca45f..cc272f82a5 100644 --- a/target/i386/whpx/whpx-apic.c +++ b/target/i386/whpx/whpx-apic.c @@ -33,7 +33,11 @@ static void whpx_put_apic_state(APICCommonState *s, int i; =20 memset(kapic, 0, sizeof(*kapic)); - kapic->fields[0x2].data =3D s->id << 24; + if (s->apicbase & MSR_IA32_APICBASE_EXTD) { + kapic->fields[0x2].data =3D s->initial_apic_id; + } else { + kapic->fields[0x2].data =3D s->id << 24; + } kapic->fields[0x3].data =3D s->version | ((APIC_LVT_NB - 1) << 16); kapic->fields[0x8].data =3D s->tpr; kapic->fields[0xd].data =3D s->log_dest << 24; @@ -61,7 +65,11 @@ static void whpx_get_apic_state(APICCommonState *s, { int i, v; =20 - s->id =3D kapic->fields[0x2].data >> 24; + if (s->apicbase & MSR_IA32_APICBASE_EXTD) { + assert(kapic->fields[0x2].data =3D=3D s->initial_apic_id); + } else { + s->id =3D kapic->fields[0x2].data >> 24; + } s->tpr =3D kapic->fields[0x8].data; s->arb_id =3D kapic->fields[0x9].data; s->log_dest =3D kapic->fields[0xd].data >> 24; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894335; cv=none; d=zohomail.com; s=zohoarc; b=P7KsM1eXxGv6Dv0lp9bsrgELXDealo+jZ+4v2JcNUf8XRI0CcJ4eR3LCOBaWtesMC+iR1O0CzivS1b2LUn2bCtlHPIac2Drx+Owp2YJNBNM021dS6WKok82+vZ3qYE2sFNtbN4utYfjCWBBcI/dPtOt4ggwNDdIZEvoKxWd42Vk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894335; 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=fd3QXN9cMYXzSjHj8LHzGrAZcLC64tqXdSYCxl9xZqI=; b=Mc+9bHAXv6oIH1n0Ikw1xpTvosaOpDndGh6TY16Pedlmbfle93Qkt3rFnD25FhuYe/PPXV0csd0S3c/W8KeD3JNTBpticQ1eQDq68e5a9h76SObBWZq7pKPE/ymisFUWqrmOVZP3hon6EDmrYfgezmWiCfaSO3sTOlwsF20GJvA= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894335307437.70694849138374; Wed, 22 Apr 2026 14:45:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLs-0008P6-At; Wed, 22 Apr 2026 17:43:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLp-0008Ha-Mq for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:17 -0400 Received: from p-east2-cluster1-host3-snip4-10.eps.apple.com ([57.103.76.13] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLo-0007Pk-2N for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:17 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 7EC581800216; Wed, 22 Apr 2026 21:43:14 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id C47551800230; Wed, 22 Apr 2026 21:43:12 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkHXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894195; x=1779486195; bh=fd3QXN9cMYXzSjHj8LHzGrAZcLC64tqXdSYCxl9xZqI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CEHoBpFDLRr50nyEymGArLFSWAtXFNVq2sK7lNxYl6sbH4LjRw1UHN2/c1/N3Z/dAyLkd834FDziOrEDpqER17LxDQ/T264yiyLrO6nKTI0qA2+bWR31IyWboF6wRpz+AKiLvPMfwR28qZcKT727r5MVsc9+TjwrHvgKQZ97th3W+8ip+dm6Skf4yPsXjmk6BhVffn4X/fzMGEypLxaE3ztmE8/IWkvqJatC9dh2GM6uUHGVpdg2fGYV9TtgB/dd3Vj80bzF7iWmsIY5n3Nv4snAaYIx6kA7CH8H5Eybny564s0Al5wwd7sOGoZsc8fiwLPOxY5hgiP8istvq6BNQA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 24/37] whpx: i386: set WHvX64RegisterInitialApicId Date: Wed, 22 Apr 2026 23:42:12 +0200 Message-ID: <20260422214225.2242-25-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: tj2069GRXdf3nE2mzkcE3bMZ__Y9NP_j X-Authority-Info-Out: v=2.4 cv=QJVlhwLL c=1 sm=1 tr=0 ts=69e940f3 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=DsSKBDvzyVHF_5agjq4A:9 X-Proofpoint-ORIG-GUID: tj2069GRXdf3nE2mzkcE3bMZ__Y9NP_j X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX18bwYTYbu1uw Oz0Z0DVreGWROmOARlXTK3Vr43TUQwMZNO2ztJ/fohf8JfxHkZQhr79Hl+Ps0mjzsmhz5HfoI30 ts40DpxuAvG+pU7GNuNt64QQhecZy73vm++VuMMps8Zb03lHtndLSyIqyNkZi/w4Dce0LKe3+AW 464nRfnyZ7u/r6NdH7w0tjLBIO16hoMZY5emscNA5r/mldetfYchMFxXOVrpspFHFarI9XQlgDg MMNpsztees6L9xwbivfG2ARZRZxL2tmQjESUOAmsmHGDY57JWD/4d80g0GqAs/KnfHK+P4ujJMo R45Ihe1x4k9WJ4hEAPTvilLjuiluOS6eu51LZj6p0UpCBNFJ0yBblo2CoBXQHU= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.13; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, 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: 1776894336932154100 Content-Type: text/plain; charset="utf-8" Keep Hyper-V aware of the initial APIC ID chosen. Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index f03f5a5115..09ca7b5a53 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2475,6 +2475,11 @@ int whpx_init_vcpu(CPUState *cpu) goto error; } =20 + if (!whpx_irqchip_in_kernel()) { + WHV_REGISTER_VALUE apic_id =3D {.Reg64 =3D x86_cpu->apic_state->in= itial_apic_id}; + whpx_set_reg(cpu, WHvX64RegisterInitialApicId, apic_id); + } + /* * vcpu's TSC frequency is either specified by user, or use the value * provided by Hyper-V if the former is not present. In the latter cas= e, we --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894412; cv=none; d=zohomail.com; s=zohoarc; b=UECd91LW+j3IUJKO7xQumNmooqR5UjfL0ArGbRgEDX17JKnr1qfZ4JWP+aiGFlTr/ukPnVwPo73ZjdopUKLDGC9Tae1bntwgTMK8EE1NIijFIvXxnH2t6BAtFuxviNm0Is7riIwrAgoqRCEOOSqmJH/5TtraYRQIJBqeDEh3uOg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894412; 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=KGlSyiEn7EzenXn+uJJMW3fVczBtJ9Bohq4GV29ka30=; b=J1eGsvrht5Ps9jzPIxJmj9niYo451fmX2XMniPs6Zdg3uWg5JNE8fO28K73hFCcsDDLzuDq99h1+gvb7XsmvEoEr45yzNpkMrW5JPHTzwanRicFukZHKLamipC82o0MF2Qy4UWdUpHrmrxHluWcHQIKDlHjhDpZs0/PzRJvHBGU= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894412296914.6593119777579; Wed, 22 Apr 2026 14:46:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLt-0008QG-4F; Wed, 22 Apr 2026 17:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLr-0008M7-Az for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:19 -0400 Received: from p-east2-cluster1-host8-snip4-10.eps.apple.com ([57.103.76.83] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLp-0007Rt-Pt for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:18 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 5E78E180096A; Wed, 22 Apr 2026 21:43:16 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id A30161800956; Wed, 22 Apr 2026 21:43:14 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkEXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894196; x=1779486196; bh=KGlSyiEn7EzenXn+uJJMW3fVczBtJ9Bohq4GV29ka30=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=XgHrpO0x23bfzG8VxYDx4d9gb4RSNMcJ9jaSvVpjrkMkZ2xnWVsIED5KI+IElvARNpuGT1TN0iK7Opl95PmSv4tCAT8QqSP3KuL1wS9ku8uU5mf30YEcVou5QSh2c5w5vY2CRF/ClrEydXGBIY27YRk/Sz2ArHgo6nZMOi4csVwFJKZzKwqqQlIV6Q+Qhx1izUSvoEjkyNegGWBlxCz4X6qEI0w1nLvHh238GOkDd+YoxBmTHBS3ncMIJkR46G1Y6RCsj4DV3MjgWAmhlnJfMkWXzMXVW7F1Ixd3tnMNF9wiSc4akmIJDDoDlZcoSVsVCBigL0k+eIFcLyTdu55Qwg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 25/37] whpx: i386: Pause VM on fatal exception to be able to inspect state Date: Wed, 22 Apr 2026 23:42:13 +0200 Message-ID: <20260422214225.2242-26-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: oZZR6BRpPuLggXf98MdovbI8bJ96iuWu X-Proofpoint-ORIG-GUID: oZZR6BRpPuLggXf98MdovbI8bJ96iuWu X-Authority-Info-Out: v=2.4 cv=TY2bdBQh c=1 sm=1 tr=0 ts=69e940f4 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=CGn8axfqn9I_s65QuTEA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfXzUnxx8nJUHRs xjWFXHE5a3f041+yTEQetJn/1g3HKxreZKiiBpxNxXExp1Ugm6SlN5F4Hs+jWQ1sRkunk6ZmvYi cEEJPQS5/Uw/I07yvQc2hOzGK+X3nyTZ0P0btvzpwXkcJk7D6APG07y2PtbGg6mlUHIseEkVApO 4x3QPLG+Y6Uawd5rLy6DzdMijqwdrVdkmDctAdO4OZf9iiH/YCFSOhTdrD5bqz34swl9zqJ/WiN CTe0OFNpDx0GYajnGfPWDCVvow83OqpmPjHITEC5ddArGzcMQxPH8CXzRZehZLL6jQq4Gziwrv9 uxlpOphZgAf6bucE95RF3fjqKgcxX8ozRL7SxIUU07jgRss+L+1J/oVh75PR+s= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.83; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -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, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894414098154100 Content-Type: text/plain; charset="utf-8" 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 09ca7b5a53..8e54fcc403 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2387,7 +2387,7 @@ int whpx_vcpu_run(CPUState *cpu) vcpu->exit_ctx.ExitReason); whpx_get_registers(cpu, WHPX_LEVEL_FULL_STATE); bql_lock(); - qemu_system_guest_panicked(cpu_get_crash_info(cpu)); + vm_stop(RUN_STATE_PAUSED); bql_unlock(); break; } --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894396; cv=none; d=zohomail.com; s=zohoarc; b=Mbl+A674jET8O5PjaLjWKIOkZ1LKMrz+PieMBGeurBtHpkVbGHkd5Mu1XB7kCYRgb2Ra62xYySVa6fPovkufmRySVhXNc6+1nahRFD9fZSihWasFQDoo6KJXRhlW2pBRQXje/xJ+NSORD3jYwEJf7jkpuVLEATTpQRoigF1N71M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894396; 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=zKgMP02e3B1vI1/Ihfo5NS9pcmEl5Ljw2zF+qf50GhQ=; b=MkjNKZLALx78Jo4QY/dWlnJ8q9+yLTqVa0xgh0RpUsFzhaoUMtfipxAznXAgjsEPkEUIJNqJP0SyFRY+h9R994il5tnvfuUenzA9Wklk+BftIGyF5z7S2yTzafQw31+6GDqyu0EwnrbBNyytO6UCpO+UPWXH/hX4SSQ/BZZ6rdY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894396498400.6516843406191; Wed, 22 Apr 2026 14:46:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLy-0008UN-Ic; Wed, 22 Apr 2026 17:43:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLx-0008Tr-As for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:25 -0400 Received: from p-east2-cluster5-host1-snip4-1.eps.apple.com ([57.103.79.4] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLv-0007VX-UO for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:25 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 35D781800216; Wed, 22 Apr 2026 21:43:21 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 8211E1800C40; Wed, 22 Apr 2026 21:43:16 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkFXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894203; x=1779486203; bh=zKgMP02e3B1vI1/Ihfo5NS9pcmEl5Ljw2zF+qf50GhQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=fjUPfhCXFe/HgxHMf7MxJ7pcZRgNfUpobemzVBOlv9NDaeONudRkQjmqML6VKsuWqWfYg7yUACBSKTi9OCmG0KESaIG59/JGHKWGulWm0fhH8lHf457tmSMln+keHkVh5970J1fwfFVtD9b43PRwbr2PqMu2JWGtmlhsUJ/oZK8goX1fAJOikO4svFL82r+1vMOojA87G+v5J4IrtLNb1ITQLRcs4EZYsp4vpeeCPsZpGER3Z1FjPsrLz+FJ+rb58ewCsuZSeXXlkJ5nN9/+zGv2fD9NnnxuTS5cuveDJZfO4MmSFdBTFPnBuP5e0GtAun2Ts0ZwSenBaF9gLyDqDw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 26/37] target/i386: emulate: use exception_payload for fault address Date: Wed, 22 Apr 2026 23:42:14 +0200 Message-ID: <20260422214225.2242-27-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=H4TWAuYi c=1 sm=1 tr=0 ts=69e940f9 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=YcyI-53RcdBlrF1VUN8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX9n/SoLoOaaS5 XYpo/us7gfy5iQmfejXtji3jsvMZqRS1zI0NMC3pJY2PCdISWMWBVrWnAPUXz+k01zzYPJIpwfs b+f1eb/lRAl/IH1XfoqyzvG0bYC0wgYOamGRH2Du3hCEBaZQp+SxoamQ+cZdqQ1XRu4YMGWGxC1 oLy+8pTUDxmNiqYethFY1IPnSISRb5TuesLL3AkHmq8mxhUfbrSjjjFmQ1AT2eDk/npJQIiFL8+ M2o24MMj4WphqLoSgAnBiQ7pyBuxDPFbToUdOi48hew+O+3AwVZ4w73AvWtskoZPySrieuWdaUE HKBa6LrbI1rKocy8zjfzJf707fxcfrUDdMDaCSq1UY0ttSHVUn4pdf2PfMdHOY= X-Proofpoint-GUID: FEZx6ml0LN3-x_7yjDOEaMdblcv7DaxG X-Proofpoint-ORIG-GUID: FEZx6ml0LN3-x_7yjDOEaMdblcv7DaxG 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.4; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894397845154100 Content-Type: text/plain; charset="utf-8" Instead of directly putting it in cr[2], put it in exception_payload. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_mmu.c | 3 ++- target/i386/whpx/whpx-all.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/target/i386/emulate/x86_mmu.c b/target/i386/emulate/x86_mmu.c index 007de582de..8d4371467f 100644 --- a/target/i386/emulate/x86_mmu.c +++ b/target/i386/emulate/x86_mmu.c @@ -277,7 +277,8 @@ static MMUTranslateResult x86_write_mem_ex(CPUState *cp= u, void *data, target_ulo translate_res =3D mmu_gva_to_gpa(cpu, gva, &gpa, translate_flags); if (translate_res) { int error_code =3D translate_res_to_error_code(translate_res, = true, is_user(cpu)); - env->cr[2] =3D gva; + env->exception_has_payload =3D 1; + env->exception_payload =3D gva; x86_emul_raise_exception(env, EXCP0E_PAGE, error_code); return translate_res; } diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 8e54fcc403..8d51293384 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -1903,11 +1903,11 @@ static void whpx_inject_exceptions(CPUState* cpu) WHV_REGISTER_VALUE reg =3D {}; reg.ExceptionEvent.EventPending =3D 1; reg.ExceptionEvent.EventType =3D WHvX64PendingEventException; - reg.ExceptionEvent.DeliverErrorCode =3D 1; + reg.ExceptionEvent.DeliverErrorCode =3D env->has_error_code; reg.ExceptionEvent.Vector =3D env->exception_nr; reg.ExceptionEvent.ErrorCode =3D env->error_code; - if (env->exception_nr =3D=3D EXCP0E_PAGE) { - reg.ExceptionEvent.ExceptionParameter =3D env->cr[2]; + if (env->exception_has_payload) { + reg.ExceptionEvent.ExceptionParameter =3D env->exception_paylo= ad; } whpx_set_reg(cpu, WHvRegisterPendingEvent, reg); } --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894297; cv=none; d=zohomail.com; s=zohoarc; b=Uv/mTYn0S5Gyi0gIqFsoJG8XJD7cqZwmVNBdgMY0ZujS0uFqftzsXP9JmAZt3rIi/ZrarXPnbOFtr2724/yiksWpdknkVdfC7sOjQ7SKbRyOLRp9pYvm3SvxqpBudhfbs6eI5TRumOZ+R8FmACeo+qV4sTy1zT5ZN9s0eM8rN30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894297; 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=nflalHNpsd+cwF/uF35esRRPVFTNfgzM4VSaQ5bZG+E=; b=bf2f/bNuaadm0isXkFkYgH7iBjbLSmqtOghYryswIayfLCk22BQp23YJIV3OZ6A5iEaHds1cbaG36WVCKYtgxSQeyYjaNtIoDvUupYeTZsWlROh36EJt9MSbxUXScG72kPKdyZgw2A9xJJ3lt+aRws95854sM1YtH5ZivUTlSMc= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894297683382.96942081775705; Wed, 22 Apr 2026 14:44:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfLx-0008Tp-5J; Wed, 22 Apr 2026 17:43:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLv-0008Sj-Ai for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:23 -0400 Received: from p-east2-cluster1-host6-snip4-6.eps.apple.com ([57.103.76.99] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLt-0007UW-02 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:23 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 18D6D180095E; Wed, 22 Apr 2026 21:43:20 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 611B018006FB; Wed, 22 Apr 2026 21:43:18 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkKXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894200; x=1779486200; bh=nflalHNpsd+cwF/uF35esRRPVFTNfgzM4VSaQ5bZG+E=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=U9WpHyiIxhD6Zjh1nZ2HUELI1TAx6qNh/j6WStBNbd/ea2nBHiepun2kh7VsuvOfuoILsOrHUGGpP9951j6mF2qc77vCyeA4michdjYgmB5nF5VG6rh7ef/zbr17HhxX1nUF0q849Evrzpl+mozrHgl/5OcbLNZvficioNL7JogUly8KgEdrF7uGMiL3RjWW535V51A1FIsucI116DXkR4yX8Pi00M92OJEEvJ+Psbj5x9JdkZuPex01dHgvy3NlUytTDEemSvO9P3e6H830TrdJJeTbvYku7zxcO+Dk/pnJu83GArsblbPBYzt2Ir1Mw53Ii+joDuxJwGUT8IHBEg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 27/37] target/i386: make xsave_buf present unconditionally Date: Wed, 22 Apr 2026 23:42:15 +0200 Message-ID: <20260422214225.2242-28-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: BWpQPBG5CWTX2TnI6n7bd8jD7A6Q4HPi X-Proofpoint-ORIG-GUID: BWpQPBG5CWTX2TnI6n7bd8jD7A6Q4HPi X-Authority-Info-Out: v=2.4 cv=TY2bdBQh c=1 sm=1 tr=0 ts=69e940f8 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EWkIHKX3_8ZzwOJz1Y8A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX+dRIcZv1rR4Z Zt0om2PrlZ4mLfhoxLq0x3FcFL3CqRPyItr4nQXTEwGDlhi3xa3+6B2bpdypJLaD0HIxdXp9UUB wrVkvSbe2zYNj3NuFwFVtPZFeQwOfJBaBqylr6J1C19bktZergOlpej8x78SAxu+i8NbKdlAAjL Vm2hrQRnmg8yAtAu+dV+GdBphZtNHIHfkR+YJ+dnayiaxGjYqE5pVSLOaHNorp5OaetDBTB7EKG ovwlFqm536uSC/Tjs5A3urCIp3MoOye98FsJgiyL0XhOSLEBlxn+ogLJaxxYsnIRoYkEUlzgXM9 5LHJND93M9/yr+MrwtvJi0It0qtelGaC3wQfAIbTYZcB/xOSnTAO/NBrRMFG08= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.76.99; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894299018158500 Content-Type: text/plain; charset="utf-8" This is necessary for the xsave_helper helpers to compile. Signed-off-by: Mohamed Mediouni --- target/i386/cpu.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 67f508dc10..0af7bdf85a 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -2269,10 +2269,8 @@ typedef struct CPUArchState { int64_t user_tsc_khz; /* for sanity check only */ uint64_t apic_bus_freq; uint64_t tsc; -#if defined(CONFIG_KVM) || defined(CONFIG_HVF) void *xsave_buf; uint32_t xsave_buf_len; -#endif #if defined(CONFIG_KVM) struct kvm_nested_state *nested_state; MemoryRegion *xen_vcpu_info_mr; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894424; cv=none; d=zohomail.com; s=zohoarc; b=id1uzDvcWw/PEtaL4TxqlMaJekZqkYq1PoXHHTOEKp+oBPlJWFITXzzDmBcjhLsCXPVe8iqcmI/dQ7j1yyjiTPPhNLNmmWqCSr3pevmAzOp0RtPiYIoYDZAA7sGGeOlkysM77uhhBKnhizAt0wHBF/Y8whzyuU8FzOGr+DEcH1w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894424; 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=IUjKb0cE7ZzdVrzQoDPD3eOQWmDC4LH15sqwoM3HWHE=; b=Tm6ho17kDQirzJzTiifTXh1oNsVecc7FrcYPo0bqWmxRLQYYB8jxTdKOgfI1O9msZIBsVe2L+YxBZS+9vGtwc5hQSzBQmyOxBbQJ0xeBXES/OmARyOG7RS63H4pMBxcBHpVKoimkkoQC7MGlKtxAnQiuALxqo869tecDfbJ17cw= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894424345322.5840181610812; Wed, 22 Apr 2026 14:47:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfM2-00006T-Hb; Wed, 22 Apr 2026 17:43:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM0-00005p-K3 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:28 -0400 Received: from p-east2-cluster5-host3-snip4-6.eps.apple.com ([57.103.79.49] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfLy-0007Yz-Ca for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:28 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 8207A1800C4C; Wed, 22 Apr 2026 21:43:22 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 403601800C44; Wed, 22 Apr 2026 21:43:20 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAE1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlkLXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894205; x=1779486205; bh=IUjKb0cE7ZzdVrzQoDPD3eOQWmDC4LH15sqwoM3HWHE=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=EnBOPiF1LNmmqvFEJYQyBp/cDqVcC0IxQjKi1in9troecNAT+GBzbIsy+egbV8K8InaOcyo7iqxeq5d4P/d6pvY5DJJI5ADKsdX69rXEpbBK01NAein8iJllsefTfjYDMmurgASdJ4yOQePid8bKiPGpocXS8TCQmlALUpt2BH+4RFcYCtpqp+HB0KBYVeCse+b5gduvm/B8mnqprrw8LJAKZ2WWtvGpSBhtJCFcB3KPDYNi0kAzVix9pFhAM7lfYjFiAEoOLY4cbz67sDxn7m/WThzEdwZnaYtzhB2egX0zcQD0fJLYPK5Uo0mwjBuQaMJOw+M1ZtH052fL7YjkzQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini , Magnus Kulke Subject: [PATCH v3 28/37] target/i386: add de/compaction to xsave_helper Date: Wed, 22 Apr 2026 23:42:16 +0200 Message-ID: <20260422214225.2242-29-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=MK9tWcZl c=1 sm=1 tr=0 ts=69e940fb cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yMhMjlubAAAA:8 a=SWS4GvfA19jorXXodEoA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX+YRckQQLAE5k 0GOC7MITYx0XvAqQ0THnTON4Jz/aHukqGZuNE4SYoValx/EZFJMBTN1l9xLIPM/MsqoW/SAF81K 85m3lSrblBoZR/UFJ4i1wN51+JeMn4cOz9tVUX5WIUIQ34J9+b6Aq7z9XaJliFGHDnZNvniw+GE qgFUmUGyuzrz31MJGzJnx/krZOHDpGNUqELsV6nXLF2NyWIU2xt07nFM422OEMjl9PhoUCKx1Vl yDUOl1qUKfuYRxAVm5bTcD1WCiZXTPzg6y0DnYjlZJ1qOBANjOqRPONq0GwVUW+LQXzLw/v+SpX LxSXBgu0BnNyu44Ch0fF+m+1Y8UKP2cpI9DsaA2RXiwZg/teoMZWcDvR917Fe4= X-Proofpoint-ORIG-GUID: bt8x_kUW8LEaLSHFN8e-f1d_Pat8DIR2 X-Proofpoint-GUID: bt8x_kUW8LEaLSHFN8e-f1d_Pat8DIR2 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.49; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1776894425686158500 Content-Type: text/plain; charset="utf-8" From: Magnus Kulke HyperV use XSAVES which stores extended state in compacted format in which components are packed contiguously, while QEMU's internal XSAVE representation use the standard format in which each component is places at a fixed offset. Hence for this purpose we add two conversion fn's to the xsave helper to roundtrip XSAVE state in a migration. - decompact_xsave_area(): converts compacted format to standard. XSTATE_BV is masked to host XCR0 since IA32_XSS is managed by the hypervisor. - compact_xsave_area(): converts standard format back to compacted format. XCOMP_BV is set from the host's CPUID 0xD.0 rather than the guest's XCR0, as this is what the hypervisor expects. Both functions use the host's CPUID leaf 0xD subleaves to determine compone= nt sizes, offsets, and alignment requirements. There are situations when the host advertises features that we want to disable for the guest, e.g. AMX TILE. In this case we cannot rely on the host's xcr0, but instead we use the feature mask that has been generated in as part of the CPU realization process (x86_cpu_expand_features). Signed-off-by: Magnus Kulke [Fixup: made xsave_offset a size_t to fix macOS and OpenBSD builds] Signed-off-by: Mohamed Mediouni --- target/i386/cpu.h | 2 + target/i386/xsave_helper.c | 256 +++++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 0af7bdf85a..80cdc1cb2a 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -3023,6 +3023,8 @@ void x86_cpu_xrstor_all_areas(X86CPU *cpu, const void= *buf, uint32_t buflen); void x86_cpu_xsave_all_areas(X86CPU *cpu, void *buf, uint32_t buflen); uint32_t xsave_area_size(uint64_t mask, bool compacted); void x86_update_hflags(CPUX86State* env); +int decompact_xsave_area(const void *buf, size_t buflen, CPUX86State *env); +int compact_xsave_area(CPUX86State *env, void *buf, size_t buflen); =20 static inline bool hyperv_feat_enabled(X86CPU *cpu, int feat) { diff --git a/target/i386/xsave_helper.c b/target/i386/xsave_helper.c index bab2258732..625bae103a 100644 --- a/target/i386/xsave_helper.c +++ b/target/i386/xsave_helper.c @@ -3,6 +3,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" =20 #include "cpu.h" =20 @@ -293,3 +294,258 @@ void x86_cpu_xrstor_all_areas(X86CPU *cpu, const void= *buf, uint32_t buflen) } #endif } + +#define XSTATE_BV_IN_HDR offsetof(X86XSaveHeader, xstate_bv) +#define XCOMP_BV_IN_HDR offsetof(X86XSaveHeader, xcomp_bvo) + +typedef struct X86XSaveAreaView { + /* 512 bytes */ + X86LegacyXSaveArea legacy; + /* 64 bytes */ + X86XSaveHeader header; + /* ...followed by individual xsave areas */ +} X86XSaveAreaView; + +#define XSAVE_XSTATE_BV_OFFSET offsetof(X86XSaveAreaView, header.xstate_b= v) +#define XSAVE_XCOMP_BV_OFFSET offsetof(X86XSaveAreaView, header.xcomp_bv) +#define XSAVE_EXT_OFFSET (sizeof(X86LegacyXSaveArea) + \ + sizeof(X86XSaveHeader)) + +/** + * decompact_xsave_area - Convert compacted XSAVE format to standard format + * @buf: Source buffer containing compacted XSAVE data + * @buflen: Size of source buffer + * @env: CPU state where the standard format buffer will be written to + * + * Accelerator backends like MSHV might return XSAVE state in compacted fo= rmat + * (XSAVEC). The state components have to be packed contiguously without g= aps. + * The XSAVE qemu buffers are in standard format where each component has a + * fixed offset. + * + * Returns: 0 on success, negative errno on failure + */ +int decompact_xsave_area(const void *buf, size_t buflen, CPUX86State *env) +{ + uint64_t compacted_xstate_bv, compacted_xcomp_bv, compacted_layout_bv; + size_t xsave_offset; + uint64_t *xcomp_bv; + size_t i; + uint32_t eax, ebx, ecx, edx; + uint32_t size, dst_off; + bool align64; + uint64_t guest_xcr0, *xstate_bv; + + compacted_xstate_bv =3D *(uint64_t *)(buf + XSAVE_XSTATE_BV_OFFSET); + compacted_xcomp_bv =3D *(uint64_t *)(buf + XSAVE_XCOMP_BV_OFFSET); + + /* This function only handles compacted format (bit 63 set) */ + assert((compacted_xcomp_bv >> 63) & 1); + + /* Low bits of XCOMP_BV describe which components are in the layout */ + compacted_layout_bv =3D compacted_xcomp_bv & ~(1ULL << 63); + + /* Zero out buffer, then copy legacy region (FP + SSE) and header as-i= s */ + memset(env->xsave_buf, 0, env->xsave_buf_len); + memcpy(env->xsave_buf, buf, XSAVE_EXT_OFFSET); + + /* + * We mask XSTATE_BV with the guest's supported XCR0 because: + * 1. Supervisor state (IA32_XSS) is hypervisor-managed, we don't use + * this state for migration. + * 2. Features disabled at partition creation (e.g. AMX) must be exclu= ded + */ + guest_xcr0 =3D ((uint64_t)env->features[FEAT_XSAVE_XCR0_HI] << 32) | + env->features[FEAT_XSAVE_XCR0_LO]; + xstate_bv =3D (uint64_t *)(env->xsave_buf + XSAVE_XSTATE_BV_OFFSET); + *xstate_bv &=3D guest_xcr0; + + /* Clear bit 63 - output is standard format, not compacted */ + xcomp_bv =3D (uint64_t *)(env->xsave_buf + XSAVE_XCOMP_BV_OFFSET); + *xcomp_bv =3D *xcomp_bv & ~(1ULL << 63); + + /* + * Process each extended state component in the compacted layout. + * Components 0 and 1 (FP and SSE) are in the legacy region, so we + * start at component 2. For each component: + * - Calculate its offset in the compacted source (contiguous layout) + * - Get its fixed offset in the standard destination from CPUID + * - Copy if the component has non-init state (bit set in XSTATE_BV) + */ + xsave_offset =3D XSAVE_EXT_OFFSET; + for (i =3D 2; i < 63; i++) { + if (((compacted_layout_bv >> i) & 1) =3D=3D 0) { + continue; + } + + /* Query guest CPUID for this component's size and standard offset= */ + cpu_x86_cpuid(env, 0xD, i, &eax, &ebx, &ecx, &edx); + + size =3D eax; + dst_off =3D ebx; + align64 =3D (ecx & (1u << 1)) !=3D 0; + + /* Component is in the layout but unknown to the guest CPUID model= */ + if (size =3D=3D 0) { + /* + * The hypervisor might expose a component that has no + * representation in the guest CPUID model. We query the host = to + * retrieve the size of the component, so we can skip over it. + */ + host_cpuid(0xD, i, &eax, &ebx, &ecx, &edx); + size =3D eax; + align64 =3D (ecx & (1u << 1)) !=3D 0; + if (size =3D=3D 0) { + error_report("xsave component %zu: size unknown to both " + "guest and host CPUID", i); + return -EINVAL; + } + + if (align64) { + xsave_offset =3D QEMU_ALIGN_UP(xsave_offset, 64); + } + + if (xsave_offset + size > buflen) { + error_report("xsave component %zu overruns source buffer: " + "offset=3D%zu size=3D%u buflen=3D%zu", + i, xsave_offset, size, buflen); + return -E2BIG; + } + + xsave_offset +=3D size; + continue; + } + + if (align64) { + xsave_offset =3D QEMU_ALIGN_UP(xsave_offset, 64); + } + + if ((xsave_offset + size) > buflen) { + error_report("xsave component %zu overruns source buffer: " + "offset=3D%zu size=3D%u buflen=3D%zu", + i, xsave_offset, size, buflen); + return -E2BIG; + } + + if ((dst_off + size) > env->xsave_buf_len) { + error_report("xsave component %zu overruns destination buffer:= " + "offset=3D%u size=3D%u buflen=3D%zu", + i, dst_off, size, (size_t)env->xsave_buf_len); + return -E2BIG; + } + + /* Copy components marked present in XSTATE_BV to guest model */ + if (((compacted_xstate_bv >> i) & 1) !=3D 0) { + memcpy(env->xsave_buf + dst_off, buf + xsave_offset, size); + } + + xsave_offset +=3D size; + } + + return 0; +} + +/** + * compact_xsave_area - Convert standard XSAVE format to compacted format + * @env: CPU state containing the standard format XSAVE buffer + * @buf: Destination buffer for compacted XSAVE data (to send to hyperviso= r) + * @buflen: Size of destination buffer + * + * Accelerator backends like MSHV might expect XSAVE state in compacted fo= rmat + * (XSAVEC). The state components are packed contiguously without gaps. + * The XSAVE qemu buffers are in standard format where each component has a + * fixed offset. + * + * This function converts from standard to compacted format, it accepts a + * pre-allocated destination buffer of sufficient size, it is the + * responsibility of the caller to ensure the buffer is big enough. + * + * Returns: total size of compacted XSAVE data written to @buf + */ +int compact_xsave_area(CPUX86State *env, void *buf, size_t buflen) +{ + uint64_t *xcomp_bv; + size_t i; + uint32_t eax, ebx, ecx, edx; + uint32_t size, src_off; + bool align64; + size_t compact_offset; + uint64_t host_xcr0_mask, guest_xcr0; + + /* Zero out buffer, then copy legacy region (FP + SSE) and header as-i= s */ + memset(buf, 0, buflen); + memcpy(buf, env->xsave_buf, XSAVE_EXT_OFFSET); + + /* + * Set XCOMP_BV to indicate compacted format (bit 63) and which + * components are in the layout. + * + * We must explicitly set XCOMP_BV because x86_cpu_xsave_all_areas() + * produces standard format with XCOMP_BV=3D0 (buffer is zeroed and on= ly + * XSTATE_BV is set in the header). + * + * XCOMP_BV must reflect the partition's XSAVE capability, not the + * guest's current XCR0 (env->xcr0). These differ b/c: + * - A guest's XCR0 is what the guest OS has enabled via XSETBV + * - The partition's XCR0 mask is the hypervisor's save/restore capabi= lity + * + * The hypervisor uses XSAVES which saves based on its capability, so = the + * XCOMP_BV value in the buffer we send back must match that capabilit= y. + * + * We intersect the host XCR0 with the guest's supported XCR0 features + * (FEAT_XSAVE_XCR0_*) so that features disabled at partition creation + * (e.g. AMX) are excluded from the compacted layout. + */ + host_cpuid(0xD, 0, &eax, &ebx, &ecx, &edx); + host_xcr0_mask =3D ((uint64_t)edx << 32) | eax; + guest_xcr0 =3D ((uint64_t)env->features[FEAT_XSAVE_XCR0_HI] << 32) | + env->features[FEAT_XSAVE_XCR0_LO]; + host_xcr0_mask &=3D guest_xcr0; + xcomp_bv =3D buf + XSAVE_XCOMP_BV_OFFSET; + *xcomp_bv =3D host_xcr0_mask | (1ULL << 63); + + /* + * Process each extended state component in the host's XCR0. + * The compacted layout must match XCOMP_BV (host capability). + * + * For each component: + * - Get its size and standard offset from host CPUID + * - Apply 64-byte alignment if required + * - Copy data only if guest has this component (bit set in env->xcr0) + * - Always advance offset to maintain correct layout + */ + compact_offset =3D XSAVE_EXT_OFFSET; + for (i =3D 2; i < 63; i++) { + if (!((host_xcr0_mask >> i) & 1)) { + continue; + } + + /* Query host CPUID for this component's size and standard offset = */ + host_cpuid(0xD, i, &eax, &ebx, &ecx, &edx); + size =3D eax; + src_off =3D ebx; + align64 =3D (ecx >> 1) & 1; + + if (size =3D=3D 0) { + /* Component in host xcr0 but unknown - shouldn't happen */ + continue; + } + + /* Apply 64-byte alignment if required by this component */ + if (align64) { + compact_offset =3D QEMU_ALIGN_UP(compact_offset, 64); + } + + /* + * Only copy data if guest has this component enabled in XCR0. + * Otherwise the component remains zeroed (init state), but we + * still advance the offset to maintain the correct layout. + */ + if ((env->xcr0 >> i) & 1) { + memcpy(buf + compact_offset, env->xsave_buf + src_off, size); + } + + compact_offset +=3D size; + } + + return compact_offset; +} --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894339; cv=none; d=zohomail.com; s=zohoarc; b=J7T3ga68+Twc8ZJafy8Izu9VncreeM/aFevcxyIl+/NpRsdJ5IP19KOOA5nIwBTSN6l5Tqx/u/e++O4PVZv/6gmsTVS2HHx/4BOZVERx5eFjzcAbmTvSo5ZbuwcDBOOuKZ6XBbrGZuRZUxESyZ3X5skt9ec5sQuKd3LQFdTDa04= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894339; 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=EpILGpRCcEmqUbhtfCMdpllimxOXdJsP/YnYaF9ysEo=; b=kAWOAroV/yY0sunyg/MwiEd32FyP5ODjqSRw1nsW8bBbtDFtBYPwBILN5sE0Ngl+ffLNM+TpiNrpBjIGeFzPX/qZ+gvUR8sxqALK5v4buyZ52ASbQaB/735q2PNtcC4xeNPsPKWWjKEnUpL5/hnGlpqAx+PyOnBZaWUcV9LHQ7E= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177689433899286.30928316302288; Wed, 22 Apr 2026 14:45:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMJ-0000BF-Fi; Wed, 22 Apr 2026 17:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM3-00007B-7N for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:32 -0400 Received: from p-east2-cluster5-host6-snip4-10.eps.apple.com ([57.103.79.103] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM0-0007ag-LW for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:30 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id AE32A18006EF; Wed, 22 Apr 2026 21:43:24 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 326A618000BE; Wed, 22 Apr 2026 21:43:22 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgCXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894208; x=1779486208; bh=EpILGpRCcEmqUbhtfCMdpllimxOXdJsP/YnYaF9ysEo=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=Y8S7hb+M1Kk+kIHxsXu7mWYlHSqeXPzJkt/EuAgT07UMjKHettJSzlK2NJ+bp/0IsOVZcrlgtSf38rlljEPVJ2rjf1nS0v8qWOPRJCz5mJM1h6LKe/glg+TmK5XwGzaFGU7HVmhJKDT2LHCjK05tjxUwWgI2Xdb3YlvfKv7jb/W92UYgpxkVgoziVkP00jsTNFWPUYxXFLH9FDcHrYbnxVFWCrcWKqDLqYPK0I2ZYbhMIIILQJx6bDYMVEleadZNPhkxFHdfAoe526NI3fiG+kwh5XsReiEseplfegzOej+iKggwhdQFEOzhw8IvW+KItZIyBWj0JRn0APutNZiJoA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 29/37] whpx: xsave support Date: Wed, 22 Apr 2026 23:42:17 +0200 Message-ID: <20260422214225.2242-30-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX3V+BrJz3UzlL MKb6BOn+H5Dc8HSAYkoEGf9hsBUz14ZVFGVRiN4lmnYMeH67anC8kJP36Dc+3a7vJpXG28Kclmd 247EO+2xBSqx4x5MgO+/56t/QTQ529jLgL3UgyvD0QwztW+zvFc2NwS/d9cU8ZgmQtERkfiBzbU Chm+gPvXqmOb7DDwfW/TyNufGTiV42e3nTVDSg6+S6jw9L+U39twZpWBidtOgVjfJAf/LI/pPZX mBWgt1cSy20RmXCLnXWiAoRmzmHBnY8sVzpDL8LqLb/JQW/UxDG4fCSG64X8Y7w5WZaYIjvUjOG tydaieO8eYoxHCSlXNc4KYHIor6BvuYuASmoDYe2o8M9jSNyYW1JC0YOhaFpbc= X-Proofpoint-GUID: ffHdwbxs3keGBvtJAeQSp1wQfzxu923U X-Authority-Info-Out: v=2.4 cv=XbuEDY55 c=1 sm=1 tr=0 ts=69e940fe cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=pIzSZyhXsI4QXQPOM_AA:9 X-Proofpoint-ORIG-GUID: ffHdwbxs3keGBvtJAeQSp1wQfzxu923U 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.103; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894341134154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- include/system/whpx-internal.h | 16 ++ target/i386/whpx/whpx-all.c | 379 ++++++++++++++++++++++++--------- 2 files changed, 292 insertions(+), 103 deletions(-) diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 86639627b3..0aae83bd7c 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -99,6 +99,22 @@ void whpx_apic_get(APICCommonState *s); UINT32 StateSize)) \ X(HRESULT, WHvResetPartition, \ (WHV_PARTITION_HANDLE Partition)) \ + X(HRESULT, WHvGetVirtualProcessorXsaveState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + PVOID Buffer, \ + UINT32 BufferSizeInBytes, UINT32 *BytesWritten)) \ + X(HRESULT, WHvSetVirtualProcessorXsaveState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + PVOID Buffer, \ + UINT32 BufferSizeInBytes)) \ + X(HRESULT, WHvGetVirtualProcessorState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, PVOID Buffer, \ + UINT32 BufferSizeInBytes, UINT32 *BytesWritten)) \ + X(HRESULT, WHvSetVirtualProcessorState, \ + (WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, \ + WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, PVOID Buffer, \ + UINT32 BufferSizeInBytes)) \ LIST_WINHVPLATFORM_FUNCTIONS_SUPPLEMENTAL_ARCH(X) =20 #define WHP_DEFINE_TYPE(return_type, function_name, signature) \ diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 8d51293384..3562decfaf 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -10,6 +10,7 @@ =20 #include "qemu/osdep.h" #include "cpu.h" +#include "qemu/typedefs.h" #include "system/address-spaces.h" #include "system/ioport.h" #include "gdbstub/helpers.h" @@ -20,6 +21,7 @@ #include "system/cpus.h" #include "system/runstate.h" #include "qemu/main-loop.h" +#include "qemu/memalign.h" #include "hw/core/boards.h" #include "hw/intc/ioapic.h" #include "hw/intc/i8259.h" @@ -108,34 +110,6 @@ static const WHV_REGISTER_NAME whpx_register_names[] = =3D { * WHvX64RegisterDr7, */ =20 - /* X64 Floating Point and Vector Registers */ - WHvX64RegisterXmm0, - WHvX64RegisterXmm1, - WHvX64RegisterXmm2, - WHvX64RegisterXmm3, - WHvX64RegisterXmm4, - WHvX64RegisterXmm5, - WHvX64RegisterXmm6, - WHvX64RegisterXmm7, - WHvX64RegisterXmm8, - WHvX64RegisterXmm9, - WHvX64RegisterXmm10, - WHvX64RegisterXmm11, - WHvX64RegisterXmm12, - WHvX64RegisterXmm13, - WHvX64RegisterXmm14, - WHvX64RegisterXmm15, - WHvX64RegisterFpMmx0, - WHvX64RegisterFpMmx1, - WHvX64RegisterFpMmx2, - WHvX64RegisterFpMmx3, - WHvX64RegisterFpMmx4, - WHvX64RegisterFpMmx5, - WHvX64RegisterFpMmx6, - WHvX64RegisterFpMmx7, - WHvX64RegisterFpControlStatus, - WHvX64RegisterXmmControlStatus, - /* X64 MSRs */ WHvX64RegisterEfer, #ifdef TARGET_X86_64 @@ -182,6 +156,36 @@ static const WHV_REGISTER_NAME whpx_register_names_for= _vmexit[] =3D { WHvX64RegisterR15, }; =20 +static const WHV_REGISTER_NAME whpx_register_names_legacy_fp[] =3D { + /* X64 Floating Point and Vector Registers (non-xsave) */ + WHvX64RegisterXmm0, + WHvX64RegisterXmm1, + WHvX64RegisterXmm2, + WHvX64RegisterXmm3, + WHvX64RegisterXmm4, + WHvX64RegisterXmm5, + WHvX64RegisterXmm6, + WHvX64RegisterXmm7, + WHvX64RegisterXmm8, + WHvX64RegisterXmm9, + WHvX64RegisterXmm10, + WHvX64RegisterXmm11, + WHvX64RegisterXmm12, + WHvX64RegisterXmm13, + WHvX64RegisterXmm14, + WHvX64RegisterXmm15, + WHvX64RegisterFpMmx0, + WHvX64RegisterFpMmx1, + WHvX64RegisterFpMmx2, + WHvX64RegisterFpMmx3, + WHvX64RegisterFpMmx4, + WHvX64RegisterFpMmx5, + WHvX64RegisterFpMmx6, + WHvX64RegisterFpMmx7, + WHvX64RegisterFpControlStatus, + WHvX64RegisterXmmControlStatus, +}; + struct whpx_register_set { WHV_REGISTER_VALUE values[RTL_NUMBER_OF(whpx_register_names)]; }; @@ -392,6 +396,123 @@ static int whpx_set_tsc(CPUState *cpu) return 0; } =20 +static bool whpx_is_xsave_enabled(CPUState *cpu) +{ + CPUX86State *env =3D &X86_CPU(cpu)->env; + return env->cr[4] & CR4_OSXSAVE_MASK; +} + +static size_t whpx_get_xsave_max_len(void) +{ + return whpx_get_supported_cpuid(0xd, 0, R_ECX); +} + +static int whpx_set_xsave_state(const CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + X86CPU *x86cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86cpu->env; + HRESULT hr; + void *xsavec_buf; + size_t page =3D qemu_real_host_page_size(); + size_t xsavec_buf_len; + + /* allocate and populate compacted buffer */ + xsavec_buf_len =3D whpx_get_xsave_max_len(); + xsavec_buf =3D qemu_memalign(page, xsavec_buf_len); + + /* save registers to standard format buffer */ + x86_cpu_xsave_all_areas(x86cpu, env->xsave_buf, env->xsave_buf_len); + + /* store compacted version of xsave area in xsavec_buf */ + compact_xsave_area(env, xsavec_buf, xsavec_buf_len); + + if (!whpx_is_legacy_os()) { + hr =3D whp_dispatch.WHvSetVirtualProcessorState( + whpx->partition, cpu->cpu_index, + WHvVirtualProcessorStateTypeXsaveState, + xsavec_buf, + xsavec_buf_len); + } else { + hr =3D whp_dispatch.WHvSetVirtualProcessorXsaveState( + whpx->partition, cpu->cpu_index, + xsavec_buf, + xsavec_buf_len); + } + + qemu_vfree(xsavec_buf); + if (FAILED(hr)) { + error_report("WHPX: Failed to get virtual processor context, hr=3D= %08lx", + hr); + } + + return 0; +} + +static void whpx_set_legacy_fp_registers(CPUState *cpu, WHPXStateLevel lev= el) +{ + struct whpx_state *whpx =3D &whpx_global; + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + struct whpx_register_set vcxt; + HRESULT hr; + int idx =3D 0; + int i; + int idx_next; + + assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu)); + + /* 16 XMM registers */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterXmm0); + idx_next =3D idx + 16; + for (i =3D 0; i < sizeof(env->xmm_regs) / sizeof(ZMMReg); i +=3D 1, id= x +=3D 1) { + vcxt.values[idx].Reg128.Low64 =3D env->xmm_regs[i].ZMM_Q(0); + vcxt.values[idx].Reg128.High64 =3D env->xmm_regs[i].ZMM_Q(1); + } + idx =3D idx_next; + + /* 8 FP registers */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterFpMmx0); + for (i =3D 0; i < 8; i +=3D 1, idx +=3D 1) { + vcxt.values[idx].Fp.AsUINT128.Low64 =3D env->fpregs[i].mmx.MMX_Q(0= ); + /* vcxt.values[idx].Fp.AsUINT128.High64 =3D + env->fpregs[i].mmx.MMX_Q(1); + */ + } + + /* FP control status register */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterFpContr= olStatus); + vcxt.values[idx].FpControlStatus.FpControl =3D env->fpuc; + vcxt.values[idx].FpControlStatus.FpStatus =3D + (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11; + vcxt.values[idx].FpControlStatus.FpTag =3D 0; + for (i =3D 0; i < 8; ++i) { + vcxt.values[idx].FpControlStatus.FpTag |=3D (!env->fptags[i]) << i; + } + vcxt.values[idx].FpControlStatus.Reserved =3D 0; + vcxt.values[idx].FpControlStatus.LastFpOp =3D env->fpop; + vcxt.values[idx].FpControlStatus.LastFpRip =3D env->fpip; + idx +=3D 1; + + /* XMM control status register */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterXmmCont= rolStatus); + vcxt.values[idx].XmmControlStatus.LastFpRdp =3D 0; + vcxt.values[idx].XmmControlStatus.XmmStatusControl =3D env->mxcsr; + vcxt.values[idx].XmmControlStatus.XmmStatusControlMask =3D 0x0000ffff; + idx +=3D 1; + + hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( + whpx->partition, cpu->cpu_index, + whpx_register_names_legacy_fp, + idx, + &vcxt.values[0]); + + if (FAILED(hr)) { + error_report("WHPX: Failed to set virtual processor context, hr=3D= %08lx", + hr); + } +} + void whpx_set_registers(CPUState *cpu, WHPXStateLevel level) { struct whpx_state *whpx =3D &whpx_global; @@ -491,45 +612,11 @@ void whpx_set_registers(CPUState *cpu, WHPXStateLevel= level) */ whpx_set_xcrs(cpu); =20 - /* 16 XMM registers */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmm0); - idx_next =3D idx + 16; - for (i =3D 0; i < sizeof(env->xmm_regs) / sizeof(ZMMReg); i +=3D 1= , idx +=3D 1) { - vcxt.values[idx].Reg128.Low64 =3D env->xmm_regs[i].ZMM_Q(0); - vcxt.values[idx].Reg128.High64 =3D env->xmm_regs[i].ZMM_Q(1); - } - idx =3D idx_next; - - /* 8 FP registers */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterFpMmx0); - for (i =3D 0; i < 8; i +=3D 1, idx +=3D 1) { - vcxt.values[idx].Fp.AsUINT128.Low64 =3D env->fpregs[i].mmx.MMX= _Q(0); - /* vcxt.values[idx].Fp.AsUINT128.High64 =3D - env->fpregs[i].mmx.MMX_Q(1); - */ - } - - /* FP control status register */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterFpControlStat= us); - vcxt.values[idx].FpControlStatus.FpControl =3D env->fpuc; - vcxt.values[idx].FpControlStatus.FpStatus =3D - (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11; - vcxt.values[idx].FpControlStatus.FpTag =3D 0; - for (i =3D 0; i < 8; ++i) { - vcxt.values[idx].FpControlStatus.FpTag |=3D (!env->fptags[i]) = << i; + if (whpx_is_xsave_enabled(cpu)) { + whpx_set_xsave_state(cpu); + } else { + whpx_set_legacy_fp_registers(cpu, level); } - vcxt.values[idx].FpControlStatus.Reserved =3D 0; - vcxt.values[idx].FpControlStatus.LastFpOp =3D env->fpop; - vcxt.values[idx].FpControlStatus.LastFpRip =3D env->fpip; - idx +=3D 1; - - /* XMM control status register */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmmControlSta= tus); - vcxt.values[idx].XmmControlStatus.LastFpRdp =3D 0; - vcxt.values[idx].XmmControlStatus.XmmStatusControl =3D env->mxcsr; - vcxt.values[idx].XmmControlStatus.XmmStatusControlMask =3D 0x0000f= fff; - idx +=3D 1; - /* MSRs */ assert(whpx_register_names[idx] =3D=3D WHvX64RegisterEfer); vcxt.values[idx++].Reg64 =3D env->efer; @@ -662,6 +749,110 @@ static void whpx_get_registers_for_vmexit(CPUState *c= pu, WHPXStateLevel level) x86_update_hflags(env); } =20 +static void whpx_get_legacy_fp_registers(CPUState *cpu, WHPXStateLevel lev= el) +{ + struct whpx_state *whpx =3D &whpx_global; + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + struct whpx_register_set vcxt; + HRESULT hr; + int i; + 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_legacy_fp, + RTL_NUMBER_OF(whpx_register_names_legacy_fp), + &vcxt.values[0]); + + if (FAILED(hr)) { + error_report("WHPX: Failed to get virtual processor context, hr=3D= %08lx", + hr); + } + + idx =3D 0; + /* 16 XMM registers */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterXmm0); + idx_next =3D idx + 16; + for (i =3D 0; i < sizeof(env->xmm_regs) / sizeof(ZMMReg); i +=3D 1, id= x +=3D 1) { + env->xmm_regs[i].ZMM_Q(0) =3D vcxt.values[idx].Reg128.Low64; + env->xmm_regs[i].ZMM_Q(1) =3D vcxt.values[idx].Reg128.High64; + } + idx =3D idx_next; + + /* 8 FP registers */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterFpMmx0); + for (i =3D 0; i < 8; i +=3D 1, idx +=3D 1) { + env->fpregs[i].mmx.MMX_Q(0) =3D vcxt.values[idx].Fp.AsUINT128.Low6= 4; + /* env->fpregs[i].mmx.MMX_Q(1) =3D + vcxt.values[idx].Fp.AsUINT128.High64; + */ + } + + /* FP control status register */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterFpContr= olStatus); + env->fpuc =3D vcxt.values[idx].FpControlStatus.FpControl; + env->fpstt =3D (vcxt.values[idx].FpControlStatus.FpStatus >> 11) & 0x7; + env->fpus =3D vcxt.values[idx].FpControlStatus.FpStatus & ~0x3800; + for (i =3D 0; i < 8; ++i) { + env->fptags[i] =3D !((vcxt.values[idx].FpControlStatus.FpTag >> i)= & 1); + } + env->fpop =3D vcxt.values[idx].FpControlStatus.LastFpOp; + env->fpip =3D vcxt.values[idx].FpControlStatus.LastFpRip; + idx +=3D 1; + + /* XMM control status register */ + assert(whpx_register_names_legacy_fp[idx] =3D=3D WHvX64RegisterXmmCont= rolStatus); + env->mxcsr =3D vcxt.values[idx].XmmControlStatus.XmmStatusControl; + idx +=3D 1; +} + +static int whpx_get_xsave_state(CPUState *cpu) +{ + struct whpx_state *whpx =3D &whpx_global; + X86CPU *x86cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86cpu->env; + int ret; + HRESULT hr; + void *xsavec_buf; + const size_t page =3D qemu_real_host_page_size(); + size_t xsavec_buf_len =3D whpx_get_xsave_max_len(); + UINT32 bytes_written; + + xsavec_buf =3D qemu_memalign(page, xsavec_buf_len); + memset(xsavec_buf, 0, xsavec_buf_len); + + if (!whpx_is_legacy_os()) { + hr =3D whp_dispatch.WHvGetVirtualProcessorState( + whpx->partition, cpu->cpu_index, + WHvVirtualProcessorStateTypeXsaveState, + xsavec_buf, + xsavec_buf_len, &bytes_written); + } else { + hr =3D whp_dispatch.WHvGetVirtualProcessorXsaveState( + whpx->partition, cpu->cpu_index, + xsavec_buf, + xsavec_buf_len, &bytes_written); + } + if (FAILED(hr) || bytes_written =3D=3D 0) { + error_report("failed to get xsave state: %s", strerror(errno)); + return -errno; + } + + ret =3D decompact_xsave_area(xsavec_buf, xsavec_buf_len, env); + qemu_vfree(xsavec_buf); + if (ret < 0) { + error_report("failed to decompact xsave area"); + return ret; + } + x86_cpu_xrstor_all_areas(x86cpu, env->xsave_buf, env->xsave_buf_len); + + return 0; +} + void whpx_get_registers(CPUState *cpu, WHPXStateLevel level) { struct whpx_state *whpx =3D &whpx_global; @@ -758,40 +949,11 @@ void whpx_get_registers(CPUState *cpu, WHPXStateLevel= level) */ whpx_get_xcrs(cpu); =20 - /* 16 XMM registers */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmm0); - idx_next =3D idx + 16; - for (i =3D 0; i < sizeof(env->xmm_regs) / sizeof(ZMMReg); i +=3D 1, id= x +=3D 1) { - env->xmm_regs[i].ZMM_Q(0) =3D vcxt.values[idx].Reg128.Low64; - env->xmm_regs[i].ZMM_Q(1) =3D vcxt.values[idx].Reg128.High64; - } - idx =3D idx_next; - - /* 8 FP registers */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterFpMmx0); - for (i =3D 0; i < 8; i +=3D 1, idx +=3D 1) { - env->fpregs[i].mmx.MMX_Q(0) =3D vcxt.values[idx].Fp.AsUINT128.Low6= 4; - /* env->fpregs[i].mmx.MMX_Q(1) =3D - vcxt.values[idx].Fp.AsUINT128.High64; - */ - } - - /* FP control status register */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterFpControlStatus); - env->fpuc =3D vcxt.values[idx].FpControlStatus.FpControl; - env->fpstt =3D (vcxt.values[idx].FpControlStatus.FpStatus >> 11) & 0x7; - env->fpus =3D vcxt.values[idx].FpControlStatus.FpStatus & ~0x3800; - for (i =3D 0; i < 8; ++i) { - env->fptags[i] =3D !((vcxt.values[idx].FpControlStatus.FpTag >> i)= & 1); + if (whpx_is_xsave_enabled(cpu)) { + whpx_get_xsave_state(cpu); + } else { + whpx_get_legacy_fp_registers(cpu, level); } - env->fpop =3D vcxt.values[idx].FpControlStatus.LastFpOp; - env->fpip =3D vcxt.values[idx].FpControlStatus.LastFpRip; - idx +=3D 1; - - /* XMM control status register */ - assert(whpx_register_names[idx] =3D=3D WHvX64RegisterXmmControlStatus); - env->mxcsr =3D vcxt.values[idx].XmmControlStatus.XmmStatusControl; - idx +=3D 1; =20 /* MSRs */ assert(whpx_register_names[idx] =3D=3D WHvX64RegisterEfer); @@ -1586,6 +1748,9 @@ void whpx_arch_destroy_vcpu(CPUState *cpu) X86CPU *x86cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86cpu->env; g_free(env->emu_mmio_buf); + qemu_vfree(env->xsave_buf); + env->xsave_buf =3D NULL; + env->xsave_buf_len =3D 0; } =20 /* Returns the address of the next instruction that is about to be execute= d. */ @@ -2446,6 +2611,9 @@ int whpx_init_vcpu(CPUState *cpu) Error *local_error =3D NULL; X86CPU *x86_cpu =3D X86_CPU(cpu); CPUX86State *env =3D &x86_cpu->env; + X86XSaveHeader *header; + size_t page_size =3D qemu_real_host_page_size(); + size_t xsave_len; UINT64 freq =3D 0; int ret; =20 @@ -2522,6 +2690,15 @@ int whpx_init_vcpu(CPUState *cpu) qemu_add_vm_change_state_handler(whpx_cpu_update_state, env); =20 env->emu_mmio_buf =3D g_new(char, 4096); + /* Initialize XSAVE buffer page-aligned */ + xsave_len =3D whpx_get_xsave_max_len(); + env->xsave_buf =3D qemu_memalign(page_size, xsave_len); + env->xsave_buf_len =3D xsave_len; + memset(env->xsave_buf, 0, env->xsave_buf_len); + + /* we need to set the compacted format bit in xsave header for Hyper-V= */ + header =3D (X86XSaveHeader *)(env->xsave_buf + sizeof(X86LegacyXSaveAr= ea)); + header->xcomp_bv =3D header->xstate_bv | (1ULL << 63); =20 return 0; =20 @@ -2722,10 +2899,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) error_report("WHPX: Failed to query XSAVE capability, hr=3D%08lx",= hr); } =20 - if (!whpx_has_xsave()) { - printf("WHPX: Partition is not XSAVE capable\n"); - } - memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.ProcessorCount =3D ms->smp.cpus; hr =3D whp_dispatch.WHvSetPartitionProperty( --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894321; cv=none; d=zohomail.com; s=zohoarc; b=C06rgwHb70SiocJIk0PeKDZs+rkS4CnfCSJVGFlxtjVtNOq+HuS2EAk7EZbfW/B7KfDRoPBvzTJRednjNRvZgBZPQ4k6W9g8AwBj+CQzjarido3lQYElkEl6JQnXvTg7E5HNaRRldZhjUyP6dp0xwcIJsN/0UJRWE3vj7wQOKcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894321; 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=Yb8MZdG4bYTj2R/5rdlrYd3KIDfipgWFm4dgORDLS64=; b=EFyEfLRHIuF91iHuVPzAkmsDWmmsW3Q9PgTdSRyTRbyujZa2ob57CRzgB4mBjl0+HeyAF/udI6Gq+HBUcsfMQTq/G60cw9FD5s4FKHnuW52DntqOiqFwx/Q2JjIVAKHSDSHk0Oj2X+gfa0/DxQEiUlpM8ogsLd/ae7ky175Zvfo= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894321576702.9514866475712; Wed, 22 Apr 2026 14:45:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMJ-0000Dn-Nq; Wed, 22 Apr 2026 17:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM5-00007X-0E for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:36 -0400 Received: from p-east2-cluster5-host8-snip4-1.eps.apple.com ([57.103.79.34] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM2-0007bS-OP for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:32 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 850CF180095E; Wed, 22 Apr 2026 21:43:26 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 0758A18000C7; Wed, 22 Apr 2026 21:43:23 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgDXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894209; x=1779486209; bh=Yb8MZdG4bYTj2R/5rdlrYd3KIDfipgWFm4dgORDLS64=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=NiejURubwGAzPHgkH2zUURbDernhu4xp4grF89QpiIbsphH6lAelQGx9HTaRRhobBPDvIS7rh2XsphpmkAQn4vYOebJd9G82+3hThOpyq6AXaJXXZf1r6QcyvKW/s18AgfD/bkazLwFQntrpVegaqAJ3b5WOmexe/R/uP50gXt3TwcKBUkfifqHiZvXMZRG3WouYbmZkm9BygWhARMyoPwQQGRKpyjQX63s7mGlZXSCe181hmLtsFQ03n+xAg9qWP3LQaARqE7FT+ITo8EDWNzlYbOPKBRiTIOAaL8R2QOAUssYIRKwyf7T33vn/kcNCtzObcXSA4yV+9DHxU18uHA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 30/37] whpx: i386: set APIC ID only when APIC present Date: Wed, 22 Apr 2026 23:42:18 +0200 Message-ID: <20260422214225.2242-31-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfX8HXVzbI6fgpv Dc5pzPuTC9qMswKaBlfVtHcZeN/v9bRSGHkuFvd8eHLVX3tIO74z+FycHqP0GYp4FDU8Sb/2Niy xyU7S12kO8rw/haVpCfkphB1W0yvrClI/jxf2+d18TiA7B6gRykyOuzfkRA7OD8rcb3wtSCk31v hY5WFkmCkqpyroMWDFAisdsaAgo/vjyjue/eSktI6SMAV9EbRjx1LSjMSXRIY5/epwOr9/NwKMY 8XL6cJinntoxfOLl2C7jiqwZS098pObZI+YADtjmlSW7TkpC+rvoZp4SOD9R82a/mmGa5LoXEbO sN0gMGRB+voo8ASN6khCytAeQpHxyxJ9IgaxuXtfap9OkE2ci18cGdFMTglBi8= X-Authority-Info-Out: v=2.4 cv=PvGergM3 c=1 sm=1 tr=0 ts=69e94100 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=WHe3jrWR342bzmf78BwA:9 X-Proofpoint-GUID: ByAdUR_rIvyG8ygm3eGx0EJl1h2EMu4z X-Proofpoint-ORIG-GUID: ByAdUR_rIvyG8ygm3eGx0EJl1h2EMu4z 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.34; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894322786154100 Content-Type: text/plain; charset="utf-8" -M isapc doesn't have an APIC 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 3562decfaf..53ff0d3f7c 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2643,7 +2643,7 @@ int whpx_init_vcpu(CPUState *cpu) goto error; } =20 - if (!whpx_irqchip_in_kernel()) { + if (!whpx_irqchip_in_kernel() && x86_cpu->apic_state !=3D NULL) { WHV_REGISTER_VALUE apic_id =3D {.Reg64 =3D x86_cpu->apic_state->in= itial_apic_id}; whpx_set_reg(cpu, WHvX64RegisterInitialApicId, apic_id); } --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894472; cv=none; d=zohomail.com; s=zohoarc; b=EsWlOOPr2hz5X2ngEMM7GVfHkbQE99BqZhgZjdS2tiTyIL2zymLX5EyyOdgCwS9LRMzPxcOZ9WmPrpRfXXAnsgLYyrOKhGQAiThwwgEwDIzepWGhsspj4WrB6fNr/tPRu7TQcDDTvzRmi01o2hplJlSUVEhOrAYnCMb3lFnJmlE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894472; 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=rq6HEVajfOcpJr7IHYS/4PVc8cfDW5A9Y6pS3DgXnLA=; b=lF/YJrfxtdyWlQrAAq6b1ajswxSSAa9/45HMN4ZrZ5PWQs0OIdnFUDPX9Ag8XgvwW4ITyJP3aeI6+0bvXbd0GHIkKpCDyCuSSoRvU5JzLXJuFIx4w/aYk1UfxeBUr4ux1O1KMP5sUuOFHO1HJgX5J1nII3C/u62M7uEwyCswjJY= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894472081210.62077940051108; Wed, 22 Apr 2026 14:47:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfML-0000Iz-3Y; Wed, 22 Apr 2026 17:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM6-00007c-0J for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:36 -0400 Received: from p-east2-cluster5-host2-snip4-10.eps.apple.com ([57.103.79.23] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM4-0007eb-MI for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:33 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 60FE318000BE; Wed, 22 Apr 2026 21:43:28 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id DADF81800942; Wed, 22 Apr 2026 21:43:25 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgAXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894211; x=1779486211; bh=rq6HEVajfOcpJr7IHYS/4PVc8cfDW5A9Y6pS3DgXnLA=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VwKPUi2m2z7DZGdzQNB+YkM+ALmKkzBzMqyDkfpYrD5PqVZsrqG36wUq484pcMWMumC4GBhdLgT9U0zOOpX6JcIe7q6/6gV4msn5Tbuu3ZoPhnmsBlAchs66hJEJkskyTbtzZZGS3qFHStt+SHVNHEssYSDPzDcl708fbRgJrSfzcuas0HsexlR002ZNGggHlAAcFAAVRiPUnI5jINbZGn2QJXWmTuF4pQMRABDPy1RUnHl4CCTHgYx0FFg3fRppq7uqorkuRh+GGwXI/vRJh5YYwknio1U692YFalhpOY7WMIrN49uypRRrKdCmkkpGs68u3oq8b8awxcDDMc1RzQ== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 31/37] whpx: i386: update migration blocker message Date: Wed, 22 Apr 2026 23:42:19 +0200 Message-ID: <20260422214225.2242-32-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMSBTYWx0ZWRfXzlpqIisaNtu0 +SaVoxkndWuLdxM84V1TQPVzdm+fsYBrP+egup6WvhHRVx9CawJ/3rvGXUcOu8redx4JGr+b/uM pGNCuxUks5xM4Sb+r7+UmrUqADoiDtLZg6UwAXP2+1LQiZdw/Q9MoG5SK+gEVwO4qN1Ilm2Br5K O+52uBMe1Ju0GUkcnt6THR2yScx4mwQnh6FlH9HxR0Tsi9Qj0AKgdb4EZxT3dnGlINTA6Nfd8T1 RCc7JEY1nq9iqchSO5ygmwPW8QsqpIbNgY1DuCKOVf3IhOPjfcms3V/jSH53GdnxlFlnnenqlSe WGHqOfn14wLcv4pytlEKVgKbnQZaWSl3SAwkaRTGvgmUucrC8bgcYzPjeMf5TM= X-Proofpoint-ORIG-GUID: JRgBQl-Dm5rShUcgz6wmvRiiKIezObEW X-Authority-Info-Out: v=2.4 cv=Vrkuwu2n c=1 sm=1 tr=0 ts=69e94102 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=0IeqtQ1xXW1zzRo-U5sA:9 a=ZXulRonScM0A:10 X-Proofpoint-GUID: JRgBQl-Dm5rShUcgz6wmvRiiKIezObEW 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.23; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=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: 1776894472969154100 Content-Type: text/plain; charset="utf-8" Quite a part of it is from older times... Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 53ff0d3f7c..6845f96ea6 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2622,8 +2622,8 @@ int whpx_init_vcpu(CPUState *cpu) */ if (whpx_migration_blocker =3D=3D NULL) { error_setg(&whpx_migration_blocker, - "State blocked due to non-migratable CPUID feature support," - "dirty memory tracking support, and XSAVE/XRSTOR support"); + "State blocked due to missing dirty memory tracking support= ," + "And some system register/state save-restore "); =20 if (migrate_add_blocker(&whpx_migration_blocker, &local_error) < 0= ) { error_report_err(local_error); --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894329; cv=none; d=zohomail.com; s=zohoarc; b=kpNKhquFgOTQHoo7ry/jex31YU/s3oJxVTbbi6lNmtpO8b/BePf/OvGXRgwhwvEpIzuaZUdrbGr6qe8WX9xDoi7vsO0TpG680Z6gzydmUj9glVF0qQ06IeDZzJGuiSyfl+Tl5uNGZ9vGa11GqlQH2nGkezp/7lzhOzfUFUoE5/g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894329; 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=FA6Y8ttrbFxZ+orHRdeG19yDqOaDqIU7TL3dmM72EL0=; b=bh0b18V1TtLJSRA3Eauvypz2NLEECVfwz8LLmUUm0z1ufDTfGouhyGkvBDh9e8SwGrOKNGjsgwiwRHBkKdS9BB2Twox9Ddw4olwXfpMsDR9qZA6yqgvLadCirmkyMfW/zowkm+Mch5mdeQ9eguLawJyVu/RCLCZG5LDnHLDeGzk= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894329342607.0462111972693; Wed, 22 Apr 2026 14:45:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMK-0000Hc-Ec; Wed, 22 Apr 2026 17:43:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM4-00007O-W9 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:36 -0400 Received: from p-east2-cluster5-host4-snip4-8.eps.apple.com ([57.103.79.61] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM2-0007bV-HC for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:31 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 62B5B1800227; Wed, 22 Apr 2026 21:43:29 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id B312418000CF; Wed, 22 Apr 2026 21:43:27 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgBXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894209; x=1779486209; bh=FA6Y8ttrbFxZ+orHRdeG19yDqOaDqIU7TL3dmM72EL0=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=VhV2A0rG1CM2s0JhDgK2wxbZqssXqlmfrBl27+Z9or6UH5SBQc7mJXo1zmHBUfWxleB8y5np5Niw8aGGmCaUmchJRMZh1iHbFcc4CAKHHz874qPY6CK2KAJOiQom83ese29L8o5GVnlauUxCp5IoQYXCMQI5+Yj+td8tRR57EDbwZJa/YnwLmNWAXwB75jLwWNZRzvbGukx/zV2QuYz/Rvo5U5EEuODE3RNZlSm7W+ih59qwexHsg5pMgIS+COGSxXar3bPgdats8pmLANNEdiaTZ4upY48uqIJspWP+cds/KHjyNsQrwWKERYPl9dzxsvemEnCn8r5KjTVdefSZDg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 32/37] whpx: i386: don't increment eip on MSR access raising GPF Date: Wed, 22 Apr 2026 23:42:20 +0200 Message-ID: <20260422214225.2242-33-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: FvcmyQmGWGUcg_VrlZabGRj3Nldl6dce X-Authority-Info-Out: v=2.4 cv=JuP8bc4C c=1 sm=1 tr=0 ts=69e94101 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=N0YEvnU7VqbRQIRMxcMA:9 X-Proofpoint-ORIG-GUID: FvcmyQmGWGUcg_VrlZabGRj3Nldl6dce X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX8Dtrj6UB1Vro /rNnVb9R/2fdrxz4VkJmB3XWNNobH93bdXeHo3AbOPo9+tCqNJcxteqZGP1BhO234shC5nrQXa/ oXQQ9oyai7ZUrcva1u8WeIB+HP1zUjGR04AsbRBQ/jyB+2I6hwOQwig0JOxqpvlxDlzyWpKp5QP xBNuACrHT72Vq3k/uj5U8FgazUnI7OKdfZ9zKmV9X0V2AFGD4gfxDYBumIz6+zh4avg6sITopS3 35DBHGsZwjIp/ispSKQHFBnHgTiQhS9Y7HeBym08Wpw2Cl20CW6jU5fji/QiR/0bD3pievCz1Yf nvGr1eCHXTeHmo3/FCcODbgay2x1Ma5AwTpoOowzmQiv0BsiU/n/YpjLAVbSU0= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.61; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=0.001, 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: 1776894330847154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- target/i386/whpx/whpx-all.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 6845f96ea6..830d8acd2b 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2240,6 +2240,7 @@ int whpx_vcpu_run(CPUState *cpu) WHV_REGISTER_NAME reg_names[3]; UINT32 reg_count; bool is_known_msr =3D 0;=20 + bool raises_gpf =3D false; uint64_t val; =20 if (vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { @@ -2272,6 +2273,7 @@ int whpx_vcpu_run(CPUState *cpu) is_known_msr =3D 1; if (val & MSR_IA32_APICBASE_RESERVED) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GP= F, 0); + raises_gpf =3D true; } if (!vcpu->exit_ctx.MsrAccess.AccessInfo.IsWrite) { /* Read path unreachable on Hyper-V */ @@ -2281,6 +2283,7 @@ int whpx_vcpu_run(CPUState *cpu) int msr_ret =3D cpu_set_apic_base(X86_CPU(cpu)->apic_s= tate, val); if (msr_ret < 0) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + raises_gpf =3D true; } else { whpx_set_reg(cpu, WHvX64RegisterApicBase, reg); } @@ -2300,6 +2303,7 @@ int whpx_vcpu_run(CPUState *cpu) reg_values[1].Reg64 =3D val; if (msr_ret < 0) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + raises_gpf =3D true; } } else { bql_lock(); @@ -2307,6 +2311,7 @@ int whpx_vcpu_run(CPUState *cpu) bql_unlock(); if (msr_ret < 0) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0= D_GPF, 0); + raises_gpf =3D true; } } } @@ -2356,6 +2361,13 @@ int whpx_vcpu_run(CPUState *cpu) =20 if (!is_known_msr && !whpx->ignore_unknown_msr) { x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GPF, 0= ); + raises_gpf =3D true; + } + + /* When a GPF is raised, do not change Rip. */ + if (raises_gpf) { + reg_values[0].Reg64 =3D + vcpu->exit_ctx.VpContext.Rip; } =20 hr =3D whp_dispatch.WHvSetVirtualProcessorRegisters( --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894245; cv=none; d=zohomail.com; s=zohoarc; b=gnLhpWMVb3YuD1pCZq1prz+VYVAdhI4iDkAzDwt/UGNVBfDdtMB8a3gcfHzaQpoJ13SsNCb6PMiT2BSYTwowNMeAfdhAaeEpryZfXRNjdO60JtALNee/ZmLPYCSr6xLYgwV5MTohDEb0ZqZr6KOlkv49g5fdVHeyrDy1NGYi6s8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894245; 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=Kn5qWVg//2Ad45UT8zwcr0uimx3B8gbWXGnh6Te9WXU=; b=jlzwE0B6j71pF4ozBZmG15Abf+2S/AqHJz/DZtc+3MW0ZIejFppTMIR9up5oDobFo/33F0Dl9s+4QuFgJz9EszEkCpfaKfV/EPTA0cD2qI2X0UroSpo2b3C3IGFOkA12sgNQS13YnHWJu3TMHAMaAnj0Esz7TlN1rE9ZjcOC/ok= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894245537502.42676926780507; Wed, 22 Apr 2026 14:44:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMM-0000OL-Ts; Wed, 22 Apr 2026 17:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMG-0000BU-89 for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:45 -0400 Received: from p-east2-cluster5-host9-snip4-1.eps.apple.com ([57.103.79.104] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMD-0007mF-Lx for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:43 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 055FA18006F2; Wed, 22 Apr 2026 21:43:31 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 8A3F01800230; Wed, 22 Apr 2026 21:43:29 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgGXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894218; x=1779486218; bh=Kn5qWVg//2Ad45UT8zwcr0uimx3B8gbWXGnh6Te9WXU=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=GD/yfRt3ppu8b66v+LaQn+A6ewhNfvN0979/BygHWp2SBWF6AaMZOr3foqwuNGAKOJV/3vYbnVnOPGm5z4prgee0GsKIu7qTVzB40US40jTqsebOHjvXnqGx0S3oA+HUVTOWiJrTKbZIS81WHENUAVwZwr4fjgLdRApTAV3HqPvNvHO3d3i10RCh5NT/cdKthlGLgOczGCI1Us7Jql9XXJ3ySckcOfpKF/GtZxnf51IgAp8j82n4A5VZClBqXhMdSDxZ/+SgHUoVhbfVwyGaO56CVOs4ZzvwA3f9uk827y2e26w2ipuYQK7oZ0qCpWBav6o8D5OkxfWq3dbu+9tS3A== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 33/37] target/i386: emulate, hvf: rdmsr/wrmsr GPF handling Date: Wed, 22 Apr 2026 23:42:21 +0200 Message-ID: <20260422214225.2242-34-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX/sjTyrXqbONY cXYQ+RVVvF5X4c8ppWRwXjW0xBF5Xi3G5GXU8gDy++Y6vhE5S5SBEd6gVFwFaT0SsjGAsWFWBvN lp8hroKT4kdo5Pjp/HCYv/lHdchud/SEcsjNtK/v1S7hqreEtS4dIdBwGd4/0M1QPdAxIjaBAh4 EL97Uji7yu/Tww5wC7FCrOWQ/ojlrLbOle5lZMHm2goeJ0FeN0P9+KHLuP/FdfXVd/W922ksbO5 S4iA2akdO4yvvlQ7rIftfCMfk/hH4TvFLxU2lIXi2TYrBEBCJsu7hmq/5zU+uq3lxBuT0IWmZj0 4vcLm3jXQUvqvbYDtmeNHl+9eZeHC9TKJe+V4NGzVVb3SG6qSAJxYYAnTdRLfU= X-Proofpoint-ORIG-GUID: sev8Q10vcorok3vUVoER2ip5t-DRIOfk X-Authority-Info-Out: v=2.4 cv=Vrkuwu2n c=1 sm=1 tr=0 ts=69e94108 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=D0rFuASKtNlKNcT_3-8A:9 X-Proofpoint-GUID: sev8Q10vcorok3vUVoER2ip5t-DRIOfk 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.104; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894247334158500 Content-Type: text/plain; charset="utf-8" In that case, the instruction pointer mustn't be incremented. Signed-off-by: Mohamed Mediouni --- target/i386/emulate/x86_emu.c | 10 ++++++---- target/i386/emulate/x86_emu.h | 4 ++-- target/i386/hvf/hvf-i386.h | 4 ++-- target/i386/hvf/hvf.c | 9 +++++++-- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/target/i386/emulate/x86_emu.c b/target/i386/emulate/x86_emu.c index c2da1a133f..c6ea854290 100644 --- a/target/i386/emulate/x86_emu.c +++ b/target/i386/emulate/x86_emu.c @@ -792,15 +792,17 @@ void x86_emul_raise_exception(CPUX86State *env, int e= xception_index, int error_c =20 static bool exec_rdmsr(CPUX86State *env, struct x86_decode *decode) { - emul_ops->simulate_rdmsr(env_cpu(env)); - env->eip +=3D decode->len; + if (!emul_ops->simulate_rdmsr(env_cpu(env))) { + env->eip +=3D decode->len; + } return 0; } =20 static bool exec_wrmsr(CPUX86State *env, struct x86_decode *decode) { - emul_ops->simulate_wrmsr(env_cpu(env)); - env->eip +=3D decode->len; + if (!emul_ops->simulate_wrmsr(env_cpu(env))) { + env->eip +=3D decode->len; + } return 0; } =20 diff --git a/target/i386/emulate/x86_emu.h b/target/i386/emulate/x86_emu.h index a8d4c93098..b985240b90 100644 --- a/target/i386/emulate/x86_emu.h +++ b/target/i386/emulate/x86_emu.h @@ -31,8 +31,8 @@ struct x86_emul_ops { 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); - void (*simulate_wrmsr)(CPUState *cs); + bool (*simulate_rdmsr)(CPUState *cs); + bool (*simulate_wrmsr)(CPUState *cs); bool (*is_protected_mode)(CPUState *cpu); bool (*is_long_mode)(CPUState *cpu); bool (*is_user_mode)(CPUState *cpu); diff --git a/target/i386/hvf/hvf-i386.h b/target/i386/hvf/hvf-i386.h index 8c42ae6b01..b91c17e2fc 100644 --- a/target/i386/hvf/hvf-i386.h +++ b/target/i386/hvf/hvf-i386.h @@ -19,8 +19,8 @@ uint32_t hvf_get_supported_cpuid(uint32_t func, uint32_t idx, int reg); =20 void hvf_handle_io(CPUState *, uint16_t, void *, int, int, int); -void hvf_simulate_rdmsr(CPUState *cpu); -void hvf_simulate_wrmsr(CPUState *cpu); +bool hvf_simulate_rdmsr(CPUState *cpu); +bool hvf_simulate_wrmsr(CPUState *cpu); =20 /* Host specific functions */ int hvf_inject_interrupt(CPUArchState *env, int vector); diff --git a/target/i386/hvf/hvf.c b/target/i386/hvf/hvf.c index c0d028b147..dfe7500010 100644 --- a/target/i386/hvf/hvf.c +++ b/target/i386/hvf/hvf.c @@ -536,7 +536,7 @@ void hvf_store_regs(CPUState *cs) macvm_set_rip(cs, env->eip); } =20 -void hvf_simulate_rdmsr(CPUState *cs) +bool hvf_simulate_rdmsr(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); CPUX86State *env =3D &cpu->env; @@ -557,6 +557,7 @@ void hvf_simulate_rdmsr(CPUState *cs) ret =3D apic_msr_read(cpu->apic_state, index, &val); if (ret < 0) { x86_emul_raise_exception(env, EXCP0D_GPF, 0); + return 1; } =20 break; @@ -639,9 +640,10 @@ void hvf_simulate_rdmsr(CPUState *cs) =20 RAX(env) =3D (uint32_t)val; RDX(env) =3D (uint32_t)(val >> 32); + return 0; } =20 -void hvf_simulate_wrmsr(CPUState *cs) +bool hvf_simulate_wrmsr(CPUState *cs) { X86CPU *cpu =3D X86_CPU(cs); CPUX86State *env =3D &cpu->env; @@ -657,6 +659,7 @@ void hvf_simulate_wrmsr(CPUState *cs) r =3D cpu_set_apic_base(cpu->apic_state, data); if (r < 0) { x86_emul_raise_exception(env, EXCP0D_GPF, 0); + return 1; } =20 break; @@ -668,6 +671,7 @@ void hvf_simulate_wrmsr(CPUState *cs) ret =3D apic_msr_write(cpu->apic_state, index, data); if (ret < 0) { x86_emul_raise_exception(env, EXCP0D_GPF, 0); + return 1; } =20 break; @@ -746,6 +750,7 @@ void hvf_simulate_wrmsr(CPUState *cs) g_hypervisor_iface->wrmsr_handler(cs, msr, data); =20 printf("write msr %llx\n", RCX(cs));*/ + return 0; } =20 static int hvf_handle_vmexit(CPUState *cpu) --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894273; cv=none; d=zohomail.com; s=zohoarc; b=fiZpkc32CDyX7ahRuDeHyhAsg2B4Rbjgh0XFesbnfb6M0ohVekz4HpQAtCWrqyhsnnFaSxbeIhA9y1E8mpPTHfS5+FYV9dOK70Gq0saeC1WIxMc05sb3BPsKgcd7kK7FAqclZDlGQm3sWDARMyF5fCQb+rIrQq5p/oQViVi40ro= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894273; 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=rh+VPyFbTbBoMCGE2E8OsoUc1C/vaCGQq7uuR+/6qVM=; b=BmImR3TAFzPgWnMtlX009gzTOBUCCINF6w0E1T2i28ojdok93Z3CZ2pco78bFCgvPLFlyeI54P5mXZo9CZEXJ2GiOOeLIJxp0NMRBE4BUcBX5LD9Fs+Iys7a18zImS3ozi068JlbuA5pW5XFMfRzRwof5kUpcUhjWk5Zfeqazl8= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894273444177.48027817289756; Wed, 22 Apr 2026 14:44:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMM-0000Lc-2e; Wed, 22 Apr 2026 17:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMD-0000BI-9Z for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:43 -0400 Received: from p-east2-cluster5-host8-snip4-10.eps.apple.com ([57.103.79.43] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfM6-0007hy-2X for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:35 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 18A151800C40; Wed, 22 Apr 2026 21:43:33 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 5F9F418000CB; Wed, 22 Apr 2026 21:43:31 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgHXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894213; x=1779486213; bh=rh+VPyFbTbBoMCGE2E8OsoUc1C/vaCGQq7uuR+/6qVM=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=JyiMCAzz4NTjHlW+xo+aH+2u/znI7MxKhz1gUN3EapnMdBvSxqWllPG210A4v9Ha18V8RgJGpT+c+v3xCANUP0I4Yb1OtdZpN80+Sk9DKX7ex3D2RS7oQ/14tMCzS0KvvyUq5vwQJoNDycX8DVOFiPbzu1OrliId6mwrSX3T0pXUzV/V6YUr/7vGs2SqCp8oio7Hv2mmVr/aSWMGInesCYY2asqsbXm83Ychpqf7KC4ngMG0YQp02FiGuBCL7LxqoNME7og7OsRAm6mP2DtHo6fnGc9GlwKZrnwUno/bL11wazNWOUIaa2rGnDcZoBUAz42HYaddt4lEkjpDqQ4yFg== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 34/37] whpx: i386: add feature to intercept #GP MSR accesses Date: Wed, 22 Apr 2026 23:42:22 +0200 Message-ID: <20260422214225.2242-35-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: 8WqBt4xTL8QcDYoqHnaQnAaVevEzz06Y X-Authority-Info-Out: v=2.4 cv=J7anLQnS c=1 sm=1 tr=0 ts=69e94105 cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=CoAbg4nstuYx8jGKVk0A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfXzllHvflRTjQG BTIp1CeMZQOxRZCnTT5wmBJJLMKcU2LlAnHw+ziz0XXI73dTgVqJADhz4diqBVFim6DGNj5bZi1 LF1ct8PR24d0nGmej6n1e7IHyxCHA4mzLJ/JMV+T1+j1SzY2nip2MAxInrN3p6dXQ0Fq34TrfVd 5Finb5i9RhrxfUvoBfx5/1G+tS7zXFdinnwqrN/CJ8YXZ1H+pVKdHuhbyaty+ueGCL1Yp39S0M6 Xtw2BGTSVvlpzgCRUWv+qTS1P5QGapoFHiXgLqXf7CRDwIBAm25EZMTCHlQTTKSJfyGQRLUOyG5 Uuo+sllw5pnAloakOhLtqXEWlEhwnp4ne1Z6Fbv0mczUvk5JO7uyxlx0n0gBD8= X-Proofpoint-GUID: 8WqBt4xTL8QcDYoqHnaQnAaVevEzz06Y 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.43; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=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: 1776894275056158500 Content-Type: text/plain; charset="utf-8" It turns out they're not that uncommon, so have a feature around to log those. Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 1 + include/system/whpx-internal.h | 1 + target/i386/whpx/whpx-all.c | 183 +++++++++++++++++++++++++++++---- 3 files changed, 166 insertions(+), 19 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 497c03138e..d846e08714 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -555,6 +555,7 @@ static void whpx_accel_instance_init(Object *obj) /* Value determined at whpx_accel_init */ whpx->hyperv_enlightenments_enabled =3D false; whpx->ignore_unknown_msr =3D true; + whpx->intercept_msr_gp =3D false; } =20 static const TypeInfo whpx_accel_type =3D { diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 0aae83bd7c..15027a7d52 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -48,6 +48,7 @@ struct whpx_state { bool hyperv_enlightenments_enabled; =20 bool ignore_unknown_msr; + bool intercept_msr_gp; }; =20 extern struct whpx_state whpx_global; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 830d8acd2b..ea5d1e535c 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -1008,6 +1008,27 @@ static int emulate_instruction(CPUState *cpu, const = uint8_t *insn_bytes, size_t return 0; } =20 +static int emulate_msr_instruction(CPUState *cpu, + const uint8_t *insn_bytes, size_t insn_len) +{ + X86CPU *x86_cpu =3D X86_CPU(cpu); + CPUX86State *env =3D &x86_cpu->env; + struct x86_decode decode =3D { 0 }; + x86_insn_stream stream =3D { .bytes =3D insn_bytes, .len =3D insn_len = }; + + whpx_get_registers(cpu, WHPX_LEVEL_FAST_RUNTIME_STATE); + decode_instruction_stream(env, &decode, &stream); + + if (decode.cmd !=3D X86_DECODE_CMD_RDMSR + && decode.cmd !=3D X86_DECODE_CMD_WRMSR) { + return 1; + } + + exec_instruction(env, &decode); + whpx_set_registers(cpu, WHPX_LEVEL_FAST_RUNTIME_STATE); + return 0; +} + static int whpx_handle_mmio(CPUState *cpu, WHV_RUN_VP_EXIT_CONTEXT *exit_c= tx) { WHV_MEMORY_ACCESS_CONTEXT *ctx =3D &exit_ctx->MemoryAccess; @@ -1022,6 +1043,45 @@ static int whpx_handle_mmio(CPUState *cpu, WHV_RUN_V= P_EXIT_CONTEXT *exit_ctx) return 0; } =20 +static int whpx_handle_msr_from_gpf(CPUState *cpu) +{ + WHV_VP_EXCEPTION_CONTEXT *ctx =3D &cpu->accel->exit_ctx.VpException; + int ret; + + ret =3D emulate_msr_instruction(cpu, ctx->InstructionBytes, ctx->Instr= uctionByteCount); + if (ret =3D=3D 1) { + /* Not an MSR instruction */ + return 1; + } + + return 0; +} + +static void whpx_inject_back_gpf(CPUState *cpu) +{ + WHV_VP_EXCEPTION_CONTEXT *ctx =3D &cpu->accel->exit_ctx.VpException; + WHV_REGISTER_VALUE reg =3D {}; + + if (ctx->ExceptionInfo.SoftwareException) { + /* TODO */ + warn_report("Was asked to inject software exception."); + return; + } + + if (ctx->ExceptionType !=3D EXCP0D_GPF) { + warn_report("Was asked to inject exception other than GPF."); + return; + } + + reg.ExceptionEvent.EventPending =3D 1; + reg.ExceptionEvent.EventType =3D WHvX64PendingEventException; + reg.ExceptionEvent.DeliverErrorCode =3D ctx->ExceptionInfo.ErrorCodeVa= lid; + reg.ExceptionEvent.Vector =3D ctx->ExceptionType; + reg.ExceptionEvent.ErrorCode =3D ctx->ErrorCode; + reg.ExceptionEvent.ExceptionParameter =3D ctx->ExceptionParameter; + whpx_set_reg(cpu, WHvRegisterPendingEvent, reg); +} + static void handle_io(CPUState *env, uint16_t port, void *buffer, int direction, int size, int count) { @@ -1210,13 +1270,54 @@ static target_ulong read_cr(CPUState *cpu, int cr) return val.Reg64; } =20 +static bool whpx_simulate_rdmsr(CPUState *cs) +{ + X86CPU *cpu =3D X86_CPU(cs); + CPUX86State *env =3D &cpu->env; + uint32_t msr =3D ECX(env); + uint64_t val =3D 0; + + switch (msr) { + default: + error_report("WHPX: unknown msr 0x%x", msr); + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GPF, 0); + return 1; + break; + } + + RAX(env) =3D (uint32_t)val; + RDX(env) =3D (uint32_t)(val >> 32); + + return 0; +} + +static bool whpx_simulate_wrmsr(CPUState *cs) +{ + X86CPU *cpu =3D X86_CPU(cs); + CPUX86State *env =3D &cpu->env; + uint32_t msr =3D ECX(env); + uint64_t data =3D ((uint64_t)EDX(env) << 32) | EAX(env); + + switch (msr) { + default: + error_report("WHPX: unknown msr 0x%x val %llx", msr, data); + x86_emul_raise_exception(&X86_CPU(cpu)->env, EXCP0D_GPF, 0); + return 1; + break; + } + + return 0; +} + 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, - .read_cr =3D read_cr + .read_cr =3D read_cr, + .simulate_rdmsr =3D whpx_simulate_rdmsr, + .simulate_wrmsr =3D whpx_simulate_wrmsr }; =20 static void whpx_init_emu(void) @@ -1356,6 +1457,18 @@ uint64_t whpx_get_supported_msr_feature(uint32_t ind= ex) return 0; } =20 +static UINT64 whpx_get_default_exceptions(void) +{ + struct whpx_state *whpx =3D &whpx_global; + UINT64 intercepts =3D 0; + + if (whpx->intercept_msr_gp) { + intercepts |=3D 1UL << WHvX64ExceptionTypeGeneralProtectionFault; + } + + return intercepts; +} + /* * Controls whether we should intercept various exceptions on the guest, * namely breakpoint/single-step events. @@ -1378,7 +1491,7 @@ HRESULT whpx_set_exception_exit_bitmap(UINT64 excepti= ons) prop.ExtendedVmExits.X64MsrExit =3D 1; prop.ExtendedVmExits.X64CpuidExit =3D 1; =20 - if (exceptions !=3D 0) { + if (exceptions !=3D 0 || whpx_get_default_exceptions() !=3D 0) { prop.ExtendedVmExits.ExceptionExit =3D 1; } =20 @@ -1393,7 +1506,7 @@ HRESULT whpx_set_exception_exit_bitmap(UINT64 excepti= ons) } =20 memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); - prop.ExceptionExitBitmap =3D exceptions; + prop.ExceptionExitBitmap =3D exceptions | whpx_get_default_exceptions(= ); =20 hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, @@ -1403,6 +1516,8 @@ HRESULT whpx_set_exception_exit_bitmap(UINT64 excepti= ons) =20 if (SUCCEEDED(hr)) { whpx->exception_exit_bitmap =3D exceptions; + } else { + error_report("WHPX: Failed to set exception exit bitmap, hr=3D%08l= x", hr); } =20 return hr; @@ -2530,6 +2645,15 @@ int whpx_vcpu_run(CPUState *cpu) break; } case WHvRunVpExitReasonException: + if (vcpu->exit_ctx.VpException.ExceptionType =3D=3D + WHvX64ExceptionTypeGeneralProtectionFault) { + if (whpx_handle_msr_from_gpf(cpu)) { + whpx_inject_back_gpf(cpu); + } + ret =3D 0; + break; + } + whpx_get_registers(cpu, WHPX_LEVEL_FULL_STATE); =20 if ((vcpu->exit_ctx.VpException.ExceptionType =3D=3D @@ -2818,6 +2942,38 @@ static void whpx_set_unknown_msr(Object *obj, Visito= r *v, } } =20 +static void whpx_set_intercept_msr_gp(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffAuto mode; + + if (!visit_type_OnOffAuto(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_AUTO_ON: + whpx->intercept_msr_gp =3D true; + break; + + case ON_OFF_AUTO_OFF: + whpx->intercept_msr_gp =3D false; + break; + + case ON_OFF_AUTO_AUTO: + whpx->intercept_msr_gp =3D false; + break; + default: + /* + * The value was checked in visit_type_OnOffAuto() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + void whpx_arch_accel_class_init(ObjectClass *oc) { object_class_property_add(oc, "ignore-unknown-msr", "OnOffAuto", @@ -2825,6 +2981,11 @@ void whpx_arch_accel_class_init(ObjectClass *oc) NULL, NULL); object_class_property_set_description(oc, "ignore-unknown-msr", "Configure unknown MSR behavior"); + object_class_property_add(oc, "intercept-msr-gp", "OnOffAuto", + NULL, whpx_set_intercept_msr_gp, + NULL, NULL); + object_class_property_set_description(oc, "intercept-msr-gp", + "Intercept #GP to log erroring MSR accesses."); } =20 int whpx_accel_init(AccelState *as, MachineState *ms) @@ -3079,22 +3240,6 @@ int whpx_accel_init(AccelState *as, MachineState *ms) goto error; } =20 - /* Register for MSR and CPUID exits */ - memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); - prop.ExtendedVmExits.X64MsrExit =3D 1; - prop.ExtendedVmExits.X64CpuidExit =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); - ret =3D -EINVAL; - goto error; - } - memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.X64MsrExitBitmap.UnhandledMsrs =3D 1; prop.X64MsrExitBitmap.ApicBaseMsrWrite =3D 1; --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894407; cv=none; d=zohomail.com; s=zohoarc; b=RhIB5114gOVm2GGYlN/4f/TZHYpTFQlo+j+ulvmOG3kU6pCb/SlI+yZPNHaKIwyzdmLXZBIIk562PNfwua9z0VYr91cYUcrcdy1SrCn45uq+jZN07nkVi5jdxZSUwKcDIWl4Vrhx8eldI6S2W4PGLipKNeuM8lZJikduQP2a4cA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894407; 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=fW1u47ze30rJgld8zY70vRzg5SwPNuoMbTd0WP/7YIY=; b=ga2Y9p3ksxPavhKt7pq2pKm9ruIyjxU+LuZ6zIGANHhdfCmBws7knWjkAtAzcv878rJGdtp7kqFstODbxe3MRif65c369ETji+RVI8V1XTYDpvod2jk1XY+CshzeWLHCfkn5LDEBx8gAiQwUwgT25T4kTJdrc6D7Q0Z0JdCs3A8= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894407038172.85081001287858; Wed, 22 Apr 2026 14:46:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfML-0000Ik-2l; Wed, 22 Apr 2026 17:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMG-0000BY-Ee for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:45 -0400 Received: from p-east2-cluster5-host5-snip4-1.eps.apple.com ([57.103.79.84] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMD-0007mr-Mq for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:44 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id EC9AC1800219; Wed, 22 Apr 2026 21:43:35 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 3EC57180020A; Wed, 22 Apr 2026 21:43:33 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgEXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894220; x=1779486220; bh=fW1u47ze30rJgld8zY70vRzg5SwPNuoMbTd0WP/7YIY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=YunTlq9UNMraO+3ivVWkrPMsgaQZEwdRkNREaLdyOxO4TleB45gNTxfLdgmftlzuq8Y17YZA/PWQw2OngXqFn9+A3UAVcA85hZrFoaXCSsaTfavMxIqxTWQOeK1yRWBQMBoBV2MEjQmlZmSAuxTGCJMMwBlM+Pyxkv+JhQHlmWdT1vHTSmO/W1X12N294Xnzs0Z8ADEA94GzOhr3pfYTZdt4gd98niNi84ha3iHO/OhYnGO/nwXfSqf8m/1lW2vF7ALYnOlkI2DDdOe8CTauN3Lkjj3xpJ0gdVnHLGLNeXIRKvZg3WT7ycrXvK6MBXk0PcKpJtcn7Sl1du0If+UFaA== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 35/37] whpx: i386: nested virt settings Date: Wed, 22 Apr 2026 23:42:23 +0200 Message-ID: <20260422214225.2242-36-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=a4U9NESF c=1 sm=1 tr=0 ts=69e9410a cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20kCj1oTBhCq6H0YB64A:9 X-Proofpoint-ORIG-GUID: RGN4i7LvkEGStE27k1_LBWOjRKbi_5r_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfXznMUZpcdKttZ vizU05v6cQ0mxtZXjSxqOTrD6xCX/gngajIsw5+a3HoFtgdUQ4SVsaT5Ft31a+DBlF6XTdQFemc y8NjpZ0YIQbHKZgpB+IuUU8mdprcMK9CCQ/0CxqFVc+bod0kkQlMD572MnWZ6U7pGU9KQcXl7p7 wCowXB8nZcAxJiTnOhOpoiKx52zQSsb1wNoDk3n8C3F45/GD01howYrmpePX1W5j0HA7ovTjiFn R2pO66pvE0llJSahP7WbV871Qs12c3/6bymhldsDf6LL++bj3ZbeGKazfsxZ+SvuRNt1PT0kARy xSsDm8hWY3015WPUOzVKpzJKxC3Q/uz6cSg/QZNKpZW89SVBEXlZ2DtySBMkhg= X-Proofpoint-GUID: RGN4i7LvkEGStE27k1_LBWOjRKbi_5r_ 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.84; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, 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: 1776894408124154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 1 + include/system/whpx-internal.h | 2 + target/i386/whpx/whpx-all.c | 68 +++++++++++++++++++++++++++++++--- 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index d846e08714..305b2ae1d0 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -556,6 +556,7 @@ static void whpx_accel_instance_init(Object *obj) whpx->hyperv_enlightenments_enabled =3D false; whpx->ignore_unknown_msr =3D true; whpx->intercept_msr_gp =3D false; + whpx->nested_virt_enabled =3D true; } =20 static const TypeInfo whpx_accel_type =3D { diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 15027a7d52..4436cfe6ba 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -47,6 +47,8 @@ struct whpx_state { bool hyperv_enlightenments_required; bool hyperv_enlightenments_enabled; =20 + bool nested_virt_enabled; + bool ignore_unknown_msr; bool intercept_msr_gp; }; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index ea5d1e535c..d17db73cff 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -2974,6 +2974,39 @@ static void whpx_set_intercept_msr_gp(Object *obj, V= isitor *v, } } =20 +static void whpx_set_nested_virt(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffAuto mode; + + if (!visit_type_OnOffAuto(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_AUTO_ON: + whpx->nested_virt_enabled =3D true; + break; + + case ON_OFF_AUTO_OFF: + whpx->nested_virt_enabled =3D false; + break; + + case ON_OFF_AUTO_AUTO: + whpx->nested_virt_enabled =3D true; + break; + default: + /* + * The value was checked in visit_type_OnOffAuto() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + + void whpx_arch_accel_class_init(ObjectClass *oc) { object_class_property_add(oc, "ignore-unknown-msr", "OnOffAuto", @@ -2986,6 +3019,11 @@ void whpx_arch_accel_class_init(ObjectClass *oc) NULL, NULL); object_class_property_set_description(oc, "intercept-msr-gp", "Intercept #GP to log erroring MSR accesses."); + object_class_property_add(oc, "nested", "OnOffAuto", + NULL, whpx_set_nested_virt, + NULL, NULL); + object_class_property_set_description(oc, "intercept-msr-gp", + "Toggle nested virtualization off/on."); } =20 int whpx_accel_init(AccelState *as, MachineState *ms) @@ -3166,7 +3204,8 @@ int whpx_accel_init(AccelState *as, MachineState *ms) whpx_rdtsc_cap =3D processor_features.Bank0.RdtscpSupport; whpx_invpcid_cap =3D processor_features.Bank0.InvpcidSupport; =20 - if (whpx_irqchip_in_kernel() && processor_features.Bank1.NestedVirtSup= port) { + if (whpx_irqchip_in_kernel() && whpx->nested_virt_enabled + && processor_features.Bank1.NestedVirtSupport) { memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); prop.NestedVirtualization =3D 1; hr =3D whp_dispatch.WHvSetPartitionProperty( @@ -3174,11 +3213,14 @@ int whpx_accel_init(AccelState *as, MachineState *m= s) WHvPartitionPropertyCodeNestedVirtualization, &prop, sizeof(WHV_PARTITION_PROPERTY)); - if (FAILED(hr)) { - error_report("WHPX: Failed to enable nested virtualization= , hr=3D%08lx", hr); - ret =3D -EINVAL; - goto error; + if (FAILED(hr)) { + error_report("WHPX: Failed to enable nested virtualization, hr= =3D%08lx", hr); + ret =3D -EINVAL; + goto error; } + } else if (whpx->nested_virt_enabled) { + whpx->nested_virt_enabled =3D 0; + info_report("WHPX: nested virtualisation not available"); } =20 hr =3D whp_dispatch.WHvSetPartitionProperty( @@ -3222,6 +3264,22 @@ int whpx_accel_init(AccelState *as, MachineState *ms) synthetic_features.Bank0.EnableExtendedGvaRangesForFlushVirtualAdd= ressList =3D 1; } =20 + if (whpx->nested_virt_enabled) { + /* enlightened VMCS is an Intel-specific enlightenment. */ + hr =3D whp_dispatch.WHvGetCapability( + WHvCapabilityCodeProcessorVendor, &whpx_cap, + sizeof(whpx_cap), &whpx_cap_size); + if (FAILED(hr)) { + error_report("WHPX: Failed to query processor vendor, hr=3D%08= lx", hr); + ret =3D -ENOSPC; + goto error; + } + if (whpx_cap.ProcessorVendor =3D=3D WHvProcessorVendorIntel) { + synthetic_features.Bank0.EnlightenedVmcs =3D 1; + synthetic_features.Bank0.NestedDebugCtl =3D 1; + } + } + if (is_modern_os && whpx->hyperv_enlightenments_allowed) { whpx->hyperv_enlightenments_enabled =3D true; hr =3D whp_dispatch.WHvSetPartitionProperty( --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894335; cv=none; d=zohomail.com; s=zohoarc; b=V8b5O483qb3xVyM0rVXlhpByNhlAfgSEvfSsu4UbSbDlKcLdxdnAh05s/K8jxtg4f8QyZOccsKkiPTqtVApJQzbs/8gnVXxkEiFYGEZwjQm14BEBnrFtOokhSzXM4FBTBDZvfdYOZU7ORcAmJ3ozx1BgQuwbI7jt+mJG+42UNPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894335; 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=C5WRRvURtBayyBiG835j2KXKO2FgKSgzzKn5mAraQ9M=; b=Qu80Vht516kciub4PcY73CBpgvOSPeZMenhxrTFXRbxwjS5jhSMUy4qvo1aD2iGdL5wHwAPzHN4gcQjWbXm+SZ9+vxBY1d8rPOSdbwpTDUuhMtx2D3QfpYpNURFT9Gbd/j34ECCUBAyZY1r7XfO5pmwcIVoGMosddDLE7uF8+r4= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894335842825.7653505727154; Wed, 22 Apr 2026 14:45:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMP-0000YX-2I; Wed, 22 Apr 2026 17:43:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMK-0000ID-Qr for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:48 -0400 Received: from p-east2-cluster5-host1-snip4-10.eps.apple.com ([57.103.79.13] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMI-0007uH-7K for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:48 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id 33EAC1800235; Wed, 22 Apr 2026 21:43:40 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 28FDF180023C; Wed, 22 Apr 2026 21:43:35 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgFXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894225; x=1779486225; bh=C5WRRvURtBayyBiG835j2KXKO2FgKSgzzKn5mAraQ9M=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=gcjJEN+8NuwFKU7XcWiq5Nm+z5321MM2VMrr+LKzCHhTUYu6HdcWtlS0sTh0eo3Nm7E+idcNr2a2wd7RyMGTO00YDvd8gEWuV2XkPFUNN2k/emhmHdhrYDIO/kNYEAcE0hAoCAMpy4Itfi/BGq9ZAHyZLvmVe+uM1S+KfQB275iDbu7iGSeY23WSFfo3wHp2iJXdp3lm6d/q9dX6bIE0Lf3CWrQ88mpwS8C+Stf3rg22qU2aF3rqRgFWKQE/VsmlyX8tRylTDp2L0iRjCU828D0xw3Ammk8ZGeHNJcbgL6+bAYJEb6RSX3ztxZwzHJGf3d39AUFDr8g7u6GZObvy1w== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 36/37] whpx: i386: add SeparateSecurityDomain flag and make default Date: Wed, 22 Apr 2026 23:42:24 +0200 Message-ID: <20260422214225.2242-37-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfX9oTjBs4MnP3V VXfgh++ldqwJunPdVg05KdaNjofSaSc4ZGdrAbGb099el/30DS2enICL2tZQtGo5apL0v+n9weB oNDLZCyGOpFpONQXfpvTsw2/1zShQrXezecSw48nIQ4GfMQyxMaZProXbigU4c/qsgSRzacIOfa PVaZJbTpHR5HQSj9QoZY2ZmVta8Cnjh3tqSqrWcIvwlioNqXx+vxiKG/k5ytP4mL5bPDhaPNIml Bk+AT4ofo6XHmnhvOiu5GkH0ajnMTNW9sKYYaTv4Ths9pFHDxZuEtQpyDrB1N89fPknquufNAbg 7h3dKiEuNVK3alo6glLyz96sh4HEdZlhKOwrCHD9OVCFBXpTzEdGfkRHA/F9Mw= X-Proofpoint-GUID: r-kcIHqkpANMylvvMitAtNLeP4rw2eCh X-Authority-Info-Out: v=2.4 cv=Uplu9uwB c=1 sm=1 tr=0 ts=69e9410f cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=sJaswNuOvxcMbF25v3wA:9 X-Proofpoint-ORIG-GUID: r-kcIHqkpANMylvvMitAtNLeP4rw2eCh 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.13; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @unpredictable.fr) X-ZM-MESSAGEID: 1776894337275158500 Content-Type: text/plain; charset="utf-8" For workloads where isolation is less important, -accel whpx,ssd=3Doff will provide significantly higher MMIO performance. Signed-off-by: Mohamed Mediouni --- accel/whpx/whpx-common.c | 1 + include/system/whpx-internal.h | 1 + target/i386/whpx/whpx-all.c | 63 ++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c index 305b2ae1d0..e5dabb6bdf 100644 --- a/accel/whpx/whpx-common.c +++ b/accel/whpx/whpx-common.c @@ -557,6 +557,7 @@ static void whpx_accel_instance_init(Object *obj) whpx->ignore_unknown_msr =3D true; whpx->intercept_msr_gp =3D false; whpx->nested_virt_enabled =3D true; + whpx->separate_security_domain =3D true; } =20 static const TypeInfo whpx_accel_type =3D { diff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h index 4436cfe6ba..08a49706ff 100644 --- a/include/system/whpx-internal.h +++ b/include/system/whpx-internal.h @@ -48,6 +48,7 @@ struct whpx_state { bool hyperv_enlightenments_enabled; =20 bool nested_virt_enabled; + bool separate_security_domain; =20 bool ignore_unknown_msr; bool intercept_msr_gp; diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index d17db73cff..035a8231b7 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -3006,6 +3006,38 @@ static void whpx_set_nested_virt(Object *obj, Visito= r *v, } } =20 +static void whpx_set_ssd(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + struct whpx_state *whpx =3D &whpx_global; + OnOffAuto mode; + + if (!visit_type_OnOffAuto(v, name, &mode, errp)) { + return; + } + + switch (mode) { + case ON_OFF_AUTO_ON: + whpx->separate_security_domain =3D true; + break; + + case ON_OFF_AUTO_OFF: + whpx->separate_security_domain =3D false; + break; + + case ON_OFF_AUTO_AUTO: + whpx->separate_security_domain =3D true; + break; + default: + /* + * The value was checked in visit_type_OnOffAuto() above. If + * we get here, then something is wrong in QEMU. + */ + abort(); + } +} + =20 void whpx_arch_accel_class_init(ObjectClass *oc) { @@ -3024,6 +3056,11 @@ void whpx_arch_accel_class_init(ObjectClass *oc) NULL, NULL); object_class_property_set_description(oc, "intercept-msr-gp", "Toggle nested virtualization off/on."); + object_class_property_add(oc, "ssd", "OnOffAuto", + NULL, whpx_set_ssd, + NULL, NULL); + object_class_property_set_description(oc, "ssd", + "Separate security domain"); } =20 int whpx_accel_init(AccelState *as, MachineState *ms) @@ -3223,6 +3260,32 @@ int whpx_accel_init(AccelState *as, MachineState *ms) info_report("WHPX: nested virtualisation not available"); } =20 + /* + * The combination of separate security domain off + * and disabling specifically these features results + * in a significant vmexit performance improvement + * by skipping speculative execution mitigations. + */ + if (!whpx->separate_security_domain) { + processor_features.Bank0.IbrsSupport =3D 0; + processor_features.Bank0.StibpSupport =3D 0; + processor_features.Bank0.IbpbSupport =3D 0; + processor_features.Bank0.SsbdSupport =3D 0; + processor_features.Bank0.IbrsAllSupport =3D 0; + processor_features.Bank1.PsfdSupport =3D 0; + memset(&prop, 0, sizeof(WHV_PARTITION_PROPERTY)); + prop.SeparateSecurityDomain =3D 0; + hr =3D whp_dispatch.WHvSetPartitionProperty( + whpx->partition, + WHvPartitionPropertyCodeSeparateSecurityDomain, + &prop, + sizeof(WHV_PARTITION_PROPERTY)); + if (FAILED(hr)) { + error_report("WHPX: failed to unset separate security domain, = hr=3D%08lx", hr); + /* Some old Windows 10 releases didn't have this, so not fatal= */ + } + } + hr =3D whp_dispatch.WHvSetPartitionProperty( whpx->partition, WHvPartitionPropertyCodeProcessorFeaturesBanks, --=20 2.50.1 (Apple Git-155) From nobody Sat May 30 20:11:19 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=1776894448; cv=none; d=zohomail.com; s=zohoarc; b=Rxix3n0mmAi/kfa3syFlor0xu9WrEHNG04E8PSDOd5wVTCuXBtIzYUUy0LZ22KSzI1GW9vsOemZ5YUbEg+/tt5glhhVdj08VzmPF3czwcJw46TORjUt6qZZkmUQ8gln5pF5TViyLNNms/XzI5A4fhcC/5+Yjq/o5MiOcdLjGEuU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776894448; 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=v+52HVYpW3INL47PWIYPp5HJAsIPBwIJXcoInsCco2s=; b=kNNXYb7uP9/lnq+i/Ym9C1Szh6KyRqTRxf8MxyyWDyOLQD4QtVxbm0eRk4Wa77KuVUZpNi6MAvXybeTA7oMOawP8q65zbDYLKu3xtNTsYj89KwNxhsNE9v6h5QlD1yK2tt/u0Tqac1LOah1dxtxyDZS3pZaHY9uAz8X9VYZJUro= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1776894448751970.6255383240099; Wed, 22 Apr 2026 14:47:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wFfMO-0000YA-P0; Wed, 22 Apr 2026 17:43:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMI-0000Ds-DI for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:47 -0400 Received: from p-east2-cluster5-host9-snip4-3.eps.apple.com ([57.103.79.106] helo=outbound.st.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wFfMG-0007qX-As for qemu-devel@nongnu.org; Wed, 22 Apr 2026 17:43:46 -0400 Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPS id AD5A61800230; Wed, 22 Apr 2026 21:43:39 +0000 (UTC) Received: from localhost.localdomain (unknown [17.42.251.67]) by p00-icloudmta-asmtp-us-east-1a-100-percent-1 (Postfix) with ESMTPSA id 0752D18000C7; Wed, 22 Apr 2026 21:43:36 +0000 (UTC) X-ICL-Out-Info: HUtFAUMHWwJACUgBTUQeDx5WFlZNRAJCTQFIHV8DWRxBAUkdXw9LVxQEFVwFVgZXFHkNXR1FDlYZWgxSD1sOHBZLWFUJCgZdGFgVVgl3HlwASx1XBFQfUxJVHR0LRUtAEwRJAU1fDl4fBBdGGVUERx5dVkAZGQJRHFYNV0NUBF9QSQxBUGxaAEcXSB1dGVlvUF0cDhhZG0AVXRFQGVYJXhUXHkFNWgJWTQVKA18BWwZCC0oCWQVZB14LSgdfGlgKXVQXWwxaDlYwTBZDH1IPWxNNGVEBUkVUAgdYRxRHDg8TTAtHAlo0Vh9UGVoD Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1776894223; x=1779486223; bh=v+52HVYpW3INL47PWIYPp5HJAsIPBwIJXcoInsCco2s=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=XOEMsno30+UadhseLMaCSNHJN6nm+lMKkFKF5wJgRE8e7PLB6HRWyWQye/Pw/YhdQf3hop4on2TIYn4WpN0Khb/IyTWklTIxMMbfpDHewDO2K3V8eHCpGlywwd6XlyjOLfpgh7t+cUJpZOc9Y7HrwVqVnZCQmy7TLD12JhQiJKHzlva07K9p8vWJIi23rEXd/eyKqKPDY6hIfBfELTQXOlFJWJCV4NGX87JQOFkiCX3evS1nlc+4SmnALDdFfHbzdhftgajqUeeLop1vJt8p8L1Vc/LVcFT89fqxCpGj/ewEouwGL1F3ukCRxiPXAot77oT3TdrPKcj8KAA5+W1mIw== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Pedro Barbuda , qemu-arm@nongnu.org, Pierrick Bouvier , Mohamed Mediouni , Roman Bolshakov , "Michael S. Tsirkin" , Wei Liu , Phil Dennis-Jordan , Peter Maydell , Zhao Liu , Paolo Bonzini Subject: [PATCH v3 37/37] whpx: i386: documentation update Date: Wed, 22 Apr 2026 23:42:25 +0200 Message-ID: <20260422214225.2242-38-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260422214225.2242-1-mohamed@unpredictable.fr> References: <20260422214225.2242-1-mohamed@unpredictable.fr> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=c92mgB9l c=1 sm=1 tr=0 ts=69e9410d cx=c_apl:c_pps:t_out a=YrL12D//S6tul8v/L+6tKg==:117 a=YrL12D//S6tul8v/L+6tKg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=ktjdnHLW_yDM15NnqX0A:9 X-Proofpoint-GUID: h1_NzvU4zbmdvpYXRrvfGPpUCTNM7nO9 X-Proofpoint-ORIG-GUID: h1_NzvU4zbmdvpYXRrvfGPpUCTNM7nO9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDIyMDIxMiBTYWx0ZWRfXzz5wZ0F/EjOv R5iV3DeWWu5n3MbRQm3DxOmPWBc0uqDnohJejrLnkcPQkvykSThIR5kbY0/HH09pbsNDeoEx1yv 7dnl5DuicAvtXF1qbxNwbT0DtC/bL/CyDpR7Y2cCMsqZNn6kTNh7nefJ0nwz3EQGYJ7d2X+FjJh jlu8dwAZXmh/hIrAyhQdsXmWAukJFRhqVnvca8ZK6/UQp8+OYKDooo7F2eADJPIWk4tlAU3u5j3 TyYnx3WE/egoZzlKU6423mn6OPGR4R/Zez94EJV+tK7tIqbLNg90P3uAuREpUYbWa9U25Rhh2Qw iZUBu6pIks97PncjwCbs00ChuUfcTITYgk3NB3cCCc4qJCcRqdTWsSQiTfTCMk= 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=lists1p.gnu.org; Received-SPF: pass client-ip=57.103.79.106; envelope-from=mohamed@unpredictable.fr; helo=outbound.st.icloud.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, 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: 1776894450681154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mohamed Mediouni --- docs/system/whpx.rst | 40 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/docs/system/whpx.rst b/docs/system/whpx.rst index 3e1979028c..9909e86831 100644 --- a/docs/system/whpx.rst +++ b/docs/system/whpx.rst @@ -63,7 +63,7 @@ additional functionality compared to ``-device ramfb``, b= ut is incompatible with Windows's UEFI GOP implementation, which expects a linear framebuffer to be available. =20 -Some tracing options +Accelerator options -------------------- =20 x86_64 @@ -75,6 +75,11 @@ to undocumented MSRs. ``-d invalid_mem`` allows to trace accesses to unmapped GPAs. =20 +``-accel whpx,ssd=3Doff`` disables the separate security domain feature, +as in a BTB flush when entering/exiting the guest. This results in a +significant MMIO performance increase at the detriment of security +mitigations. + Known issues on x86_64 ---------------------- =20 @@ -96,45 +101,22 @@ MMX, SSE or AVX instructions for access to MMIO memory= ranges. Attempts to run such guests will result in an ``Unimplemented handler`` warning for MMX and a failure to decode for newer instructions. =20 -``-M isapc`` -^^^^^^^^^^^^ - -``-M isapc`` doesn't disable the Hyper-V LAPIC on its own yet. To -be able to use that machine, use ``-accel whpx,hyperv=3Doff,kernel-irqchip= =3Doff``. - -However, in QEMU 11.0, the guest will still be a 64-bit x86 -ISA machine with all the corresponding CPUID leaves exposed. - -gdbstub -^^^^^^^ - -As save/restore of xsave state is not currently present, state -exposed through GDB will be incomplete. - -The same also applies to ``info registers``. - -``-cpu type`` ignored -^^^^^^^^^^^^^^^^^^^^^ - -In this release, -cpu is an ignored argument.=20 - PIC interrupts on Windows 10 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ =20 On Windows 10, a legacy PIC interrupt injected does not wake the guest from an HLT when using the Hyper-V provided interrupt controller. =20 -This has been addressed in QEMU 11.0 on Windows 11 platforms but -functionality to make it available on Windows 10 isn't present. +As such, on Windows 10, using the Hyper-V interrupt controller is +disabled by default. You can enable it via ``-M q35,pic=3Doff`` which +disables the PIC. In that configuration, using a UEFI is recommended. =20 -Workaround: for affected use cases, use ``-M kernel-irqchip=3Doff``. +On this release, ``-M kernel-irqchip=3D`` is not expected to be manually +set during normal operation. It remains as a debugging option. =20 Known issues on Windows 11 ^^^^^^^^^^^^^^^^^^^^^^^^^^ =20 -Nested virtualisation-specific Hyper-V enlightenments are not -currently exposed. - arm64 ----- =20 --=20 2.50.1 (Apple Git-155)