{"id":2219027,"url":"http://patchwork.ozlabs.org/api/patches/2219027/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402100535.42960-3-mohamed@unpredictable.fr/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260402100535.42960-3-mohamed@unpredictable.fr>","list_archive_url":null,"date":"2026-04-02T10:05:35","name":"[2/2] whpx: i386: reintroduce enlightenments for Windows 10","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"bba15ec665e6b07d822a6ba6b5d255dc81b80e94","submitter":{"id":91318,"url":"http://patchwork.ozlabs.org/api/people/91318/?format=json","name":"Mohamed Mediouni","email":"mohamed@unpredictable.fr"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402100535.42960-3-mohamed@unpredictable.fr/mbox/","series":[{"id":498464,"url":"http://patchwork.ozlabs.org/api/series/498464/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=498464","date":"2026-04-02T10:05:33","name":"whpx: x2apic emulation for kernel-irqchip=off follow-up","version":1,"mbox":"http://patchwork.ozlabs.org/series/498464/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2219027/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2219027/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=unpredictable.fr header.i=@unpredictable.fr\n header.a=rsa-sha256 header.s=sig1 header.b=AWR8xgWa;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmcvj19Dkz1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 21:06:41 +1100 (AEDT)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w8Ew6-0006xE-CO; Thu, 02 Apr 2026 06:06:02 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mohamed@unpredictable.fr>)\n id 1w8Evs-0006q7-LN\n for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:50 -0400","from qs-2004g-snip4-8.eps.apple.com ([57.103.84.71]\n helo=outbound.qs.icloud.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <mohamed@unpredictable.fr>)\n id 1w8Evo-0003mn-Fm\n for qemu-devel@nongnu.org; Thu, 02 Apr 2026 06:05:48 -0400","from outbound.qs.icloud.com (unknown [127.0.0.2])\n by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPS id\n 1BB923000139; Thu, 02 Apr 2026 10:05:40 +0000 (UTC)","from localhost.localdomain (unknown [17.57.155.37])\n by p00-icloudmta-asmtp-us-east-2d-10-percent-1 (Postfix) with ESMTPSA id\n 9F72F30000AF; Thu, 02 Apr 2026 10:05:39 +0000 (UTC)"],"Dkim-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr;\n s=sig1; t=1775124343; x=1777716343;\n bh=GLvxS3ZXniVWZSo6nScZk1ySvLSYx1kbrzXjMB1npTo=;\n h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme;\n b=AWR8xgWaZghBhzw/siuPqqfp7MTX9Z9YMq3vdzmG7Xi+knB1sBWX01Mm7pFNxtjV2uBC15hahF3DAuRG5bDDlwYL/0OAsSR2cnMfF0ba0IYGIxwStjzWoL/S7xyOLS0eBsM8ksEG+gBcs9KnbgFPeT642XYHegSuyfZ3uVV2syM2Rb2olEAmpfnho+p0V8o7F7/V0g1PwZCj5wiJIMqvcCfffsCbkBSM5EFWLhdzj4Eg48AAIQBg7N8BPykmV/486ZrrtRfezg+SwG6+ULyjcJthb5R4wEV9N4/QmnsI6b3edEC6I/55ekGAkoJMriOZhI79FFIJua6cPInsw90ZLA==","mail-alias-created-date":"1752046281608","From":"Mohamed Mediouni <mohamed@unpredictable.fr>","To":"qemu-devel@nongnu.org","Cc":"Mohamed Mediouni <mohamed@unpredictable.fr>,\n Pedro Barbuda <pbarbuda@microsoft.com>","Subject":"[PATCH 2/2] whpx: i386: reintroduce enlightenments for Windows 10","Date":"Thu,  2 Apr 2026 12:05:35 +0200","Message-ID":"<20260402100535.42960-3-mohamed@unpredictable.fr>","X-Mailer":"git-send-email 2.50.1","In-Reply-To":"<20260402100535.42960-1-mohamed@unpredictable.fr>","References":"<20260402100535.42960-1-mohamed@unpredictable.fr>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Proofpoint-GUID":"4Oyofk0OczscGxahp1QHjl9DsdsdxQuf","X-Authority-Info-Out":"v=2.4 cv=GMsF0+NK c=1 sm=1 tr=0 ts=69ce3f75\n cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117\n a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=7Tkn1UfjudUksutfP3gA:9","X-Proofpoint-ORIG-GUID":"4Oyofk0OczscGxahp1QHjl9DsdsdxQuf","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDAyMDA5MCBTYWx0ZWRfXyHu52Jk7k3O6\n ohC1Wh/U1CVHw8sHAsbhPsFKyQ2Y94s6QoEaj32bgWOLxPFM66HeNf95u23MonHQ9Fe9n9QkmCw\n jwpl9JEoTy6jAaEqAil5ZcJ4zEIc2/auxc/0kSramG4KAA425RAiHdh1Ee5SXvdrLZnuQwFsJ9i\n hSqP7BIYjVGGsIKNrLzUoE1fEwQDCduIrNN/+1FUXNh+93DKQjICphpwqvCCle/s6fL8F2VFoQ1\n TR55aVgTtjqJi2Uq/rW3RZ8Cfz2XJfdupCApgosk5TTh5uR598Z0WdMK0niierWXw8DDt2nYx5s\n 4MFuITBOsbDZapcXk9c3Wj/ijI1rNPLZvPHkRJfxPM5cn0fxhcVkaIsctbxyNY=","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-02_01,2026-04-02_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=notspam policy=default score=0 mlxscore=0\n spamscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0\n clxscore=1030 mlxlogscore=699 bulkscore=0 adultscore=0 classifier=spam\n authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000\n definitions=main-2604020090","Received-SPF":"pass client-ip=57.103.84.71;\n envelope-from=mohamed@unpredictable.fr; helo=outbound.qs.icloud.com","X-Spam_score_int":"0","X-Spam_score":"-0.1","X-Spam_bar":"/","X-Spam_report":"(-0.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"Was removed in 2c08624 but it's still useful for\nWindows 10 so reintroduce it there.\n\nAnd this time, actually make it work by reporting\nthe hypervisor bit in CPUID.\n\nAlso pretend to be KVM, with the only capability\nreported being X2APIC support.\n\nAlthough looks like Linux doesn't use that vmware leaf...\n\nSigned-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>\n---\n target/i386/whpx/whpx-all.c | 64 ++++++++++++++++++++++++++++++++-----\n 1 file changed, 56 insertions(+), 8 deletions(-)","diff":"diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c\nindex 5460207bdb..e4f297eec1 100644\n--- a/target/i386/whpx/whpx-all.c\n+++ b/target/i386/whpx/whpx-all.c\n@@ -2071,15 +2071,45 @@ int whpx_vcpu_run(CPUState *cpu)\n                 vcpu->exit_ctx.VpContext.Rip +\n                 vcpu->exit_ctx.VpContext.InstructionLength;\n \n-            reg_values[1].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRax;\n-            reg_values[2].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRcx;\n-            reg_values[3].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRdx;\n-            reg_values[4].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRbx;\n-\n-            if (vcpu->exit_ctx.CpuidAccess.Rax == 1) {\n-                if (cpu_has_x2apic_feature(env)) {\n-                    reg_values[2].Reg64 |= CPUID_EXT_X2APIC;\n+            if (whpx_is_legacy_os()) {\n+                reg_values[1].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRax;\n+                reg_values[2].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRcx;\n+                reg_values[3].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRdx;\n+                reg_values[4].Reg64 = vcpu->exit_ctx.CpuidAccess.DefaultResultRbx;\n+                switch (vcpu->exit_ctx.CpuidAccess.Rax) {\n+                case 1:\n+                    if (cpu_has_x2apic_feature(env)) {\n+                        reg_values[2].Reg64 |= CPUID_EXT_X2APIC;\n+                    }\n+                    reg_values[2].Reg64 |= CPUID_EXT_HYPERVISOR;\n+                    break;\n+                case 0x40000000:\n+                    /* report KVM */\n+                    if (x86_cpu->vmware_cpuid_freq) {\n+                        reg_values[1].Reg64 = 0x40000010;\n+                    } else {\n+                        reg_values[1].Reg64 = 0x40000001;\n+                    }\n+                    reg_values[4].Reg64 = 0x4b4d564b;\n+                    reg_values[2].Reg64 = 0x564b4d56;\n+                    reg_values[3].Reg64 = 0x4d;\n+                    break;\n+                case 0x40000001:\n+                    /* report X2APIC */\n+                    reg_values[1].Reg64 = reg_values[4].Reg64 = reg_values[2].Reg64 = 1 << 15;\n+                    break;\n+                case 0x40000010:\n+                    if (x86_cpu->vmware_cpuid_freq) {\n+                        reg_values[1].Reg64 = env->tsc_khz;\n+                        reg_values[4].Reg64 = env->apic_bus_freq / 1000; /* Hz to KHz */\n+                    }\n+                    break;\n                 }\n+            } else {\n+                cpu_x86_cpuid(env, vcpu->exit_ctx.CpuidAccess.Rax, 0, \n+                    (UINT32 *)&reg_values[1].Reg32,\n+                    (UINT32 *)&reg_values[4].Reg32, (UINT32 *)&reg_values[2].Reg32,\n+                    (UINT32 *)&reg_values[3].Reg32);\n             }\n \n             hr = whp_dispatch.WHvSetVirtualProcessorRegisters(\n@@ -2253,6 +2283,24 @@ int whpx_init_vcpu(CPUState *cpu)\n         env->apic_bus_freq = 1000000000;\n     }\n \n+    /* Windows 10 doesn't provide Hyper-V enlightenments. */\n+    if (whpx_is_legacy_os()) {\n+         UINT32 cpuidExitList[] = {1, 0x40000000, 0x40000001, 0x40000010};\n+\n+         hr = whp_dispatch.WHvSetPartitionProperty(\n+                 whpx->partition,\n+                 WHvPartitionPropertyCodeCpuidExitList,\n+                 cpuidExitList,\n+                 RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32));\n+\n+         if (FAILED(hr)) {\n+             error_report(\"WHPX: Failed to set partition CpuidExitList hr=%08lx\",\n+                         hr);\n+             ret = -EINVAL;\n+             goto error;\n+         }\n+     }\n+\n     vcpu->interruptable = true;\n     cpu->vcpu_dirty = true;\n     cpu->accel = vcpu;\n","prefixes":["2/2"]}