{"id":2216010,"url":"http://patchwork.ozlabs.org/api/patches/2216010/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260325164453.72127-5-pbonzini@redhat.com/","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":"<20260325164453.72127-5-pbonzini@redhat.com>","list_archive_url":null,"date":"2026-03-25T16:44:38","name":"[PULL,04/19] whpx: i386: workaround for Windows 10 support","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"ebde2bff7423663d7112a435c352ae4943053eb7","submitter":{"id":2701,"url":"http://patchwork.ozlabs.org/api/people/2701/?format=json","name":"Paolo Bonzini","email":"pbonzini@redhat.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260325164453.72127-5-pbonzini@redhat.com/mbox/","series":[{"id":497473,"url":"http://patchwork.ozlabs.org/api/series/497473/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=497473","date":"2026-03-25T16:44:34","name":"[PULL,01/19] tests/functional: preserve PYTHONPATH entries","version":1,"mbox":"http://patchwork.ozlabs.org/series/497473/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2216010/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2216010/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 (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=SZXSlNwr;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=google header.b=cZbYqNco;\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 4fgt8M3k6Kz1xy3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 03:46:11 +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 1w5RLz-0004oj-JJ; Wed, 25 Mar 2026 12:45:11 -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 <pbonzini@redhat.com>)\n id 1w5RLy-0004o6-0a\n for qemu-devel@nongnu.org; Wed, 25 Mar 2026 12:45:10 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)\n id 1w5RLw-0004bh-6O\n for qemu-devel@nongnu.org; Wed, 25 Mar 2026 12:45:09 -0400","from mail-wr1-f69.google.com (mail-wr1-f69.google.com\n [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-446-roHaWIXBMouDodFMBpdjaw-1; Wed, 25 Mar 2026 12:45:06 -0400","by mail-wr1-f69.google.com with SMTP id\n ffacd0b85a97d-43b86de58d9so6301f8f.0\n for <qemu-devel@nongnu.org>; Wed, 25 Mar 2026 09:45:05 -0700 (PDT)","from [192.168.10.48] ([151.49.85.67])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43b919cf2b2sm1028327f8f.18.2026.03.25.09.45.02\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 25 Mar 2026 09:45:02 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1774457107;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=xdIMymluD0FqXgTYee5QoJgAjn56Il4INcG1bLrCfmE=;\n b=SZXSlNwr+94K0yjf6KoBsI0cnSIB9f+rR/EbC56rwxnXa/bk/oZvTngBbOD2YRPwHhQWf+\n SMaOf42CBgxSSdM5SRSaOj8TlLPPnwqG3fGXMlNWVx0diz/ZCgrJ53uX/zqPmHxKSKNw/8\n hgGkOO4L9ZYUc8lTEUCCiTGu0gdCtyU=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1774457104; x=1775061904; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=xdIMymluD0FqXgTYee5QoJgAjn56Il4INcG1bLrCfmE=;\n b=cZbYqNcoGYnWabsJHFBvOPc8XJzhoyWVtnQh8B2w1BaisjkZ8R67MTa2u4NaFKertZ\n 9DBxGd+im5ASxPkBQhHx8gbRhQk8/PPZeE7rl2FXHL+z4Ne+NJjQhVhzL/Y2MF9FYcQh\n B/1UOlI9JVZWa4uxYDo1sB9DXkaPfuyOGJk0wMKL7ZLFgIyXxMVT+WLLeI6XmE+TS8cE\n aNSbcpSBrP1iO7EmzCK2cPVMFCxPg/fAXnuWASpaR+JHqxZvlgU3+JIJIgfCzD4UVJWi\n 9vE/vAm0C31M7Rbp/ATdHe7gUEAc8qK6JCC+HVvdNBSa2MVfkEScuXMNTYAoSeiXqehq\n ObgA=="],"X-MC-Unique":"roHaWIXBMouDodFMBpdjaw-1","X-Mimecast-MFC-AGG-ID":"roHaWIXBMouDodFMBpdjaw_1774457105","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774457104; x=1775061904;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=xdIMymluD0FqXgTYee5QoJgAjn56Il4INcG1bLrCfmE=;\n b=CP+ozUzGVdpw3iKupNLqGYGYwOJwj80n4zPh7Nh3PaTcGxYqRUMfnT9M5zfPMivsqF\n LoBn5RpBN1zxYlXTcAhWK+PlgdP1yFzzNVNy224t62tKgySQpio3N4ZR52Vnb31bcXJl\n /Mm+5AMTxSDKKgsRIvbcFjBlPIL9VprE7W16cU9NAYqVaYUOJZAJCFWMKm5loJD1wH6m\n fh8P/rDK05HCSOKpoOblnuMRvp8PsuwOKSSzVSp9TEFk5vpUlmTGbozvm8GYVRAvodIc\n l6xW0Fh97gWxaK6qRLDKJkvVN7iHhC1WS4q7M+6ouNluexboi1B36Jv0tAP0eRLMW9rk\n R57g==","X-Gm-Message-State":"AOJu0Yy+AjDVzuz907eexdr+kOiV5snfilEBkc+TZdifFee2cUGsCH1a\n 6K0WtELs3SsZcPpFtGviUn14qCdAnCLnNIMokC1u/Kp1KD9plmW2mFlVZlzjVZ4BMISwimUjjTt\n Nm2Wn3fhwxsPc/sO7lrSnJ3kP2pTgGCodN0o1cxxP4ChEXJNL/ZyexMdXNa6qiWNgYGOjq/o+yR\n 7b7G3fVbVI8OPwpEW2Yxi4xGIw0kZLQ+qPTwkhQl5/","X-Gm-Gg":"ATEYQzyeWGrmz5UtNiWD/ktA3Oa4B9ooODT2EyHdehztSHPJiuW4bTR0E0PPTHisX2a\n Lj4eih1QpACzE+i8RI18SzJnCVCPTBpTTgqAk0TFAJtuNu35baCzY/iGmGtKA4sJKmkSpBY5CBb\n wuTLsVj4qauql8z4/biiro2VEgh6/InQxf7EEnT8Dww5dRdI2qFr8em/JFkEfz0eQV2g2uJerIF\n Rrx13Wlwb2RtGk5u0qcNwca4kSy/hIJ/gJshj5wmffMQ6JHGQ5lQhjbItWzrWUz4bn7R/0Z9wnF\n pzV5n1vWaHqtqwv6btCRs6sgbMoiYtpLf/dCDbZn7Melz4T7i1hm0fDvI4d9OXEOxectysJS3jY\n ZOIcppmwOQYcU9sbuYJ3SlVoiHDQN2o6xJRLiPTg1Lo2guZv9U0TTBcUCTzeG7TLU3/M9KscLvn\n Sh3pAToWUMPgVO9foLehSugll9","X-Received":["by 2002:a05:600c:3511:b0:487:467:42a2 with SMTP id\n 5b1f17b1804b1-487160438e2mr66714425e9.18.1774457103743;\n Wed, 25 Mar 2026 09:45:03 -0700 (PDT)","by 2002:a05:600c:3511:b0:487:467:42a2 with SMTP id\n 5b1f17b1804b1-487160438e2mr66713775e9.18.1774457102993;\n Wed, 25 Mar 2026 09:45:02 -0700 (PDT)"],"From":"Paolo Bonzini <pbonzini@redhat.com>","To":"qemu-devel@nongnu.org","Cc":"Mohamed Mediouni <mohamed@unpredictable.fr>","Subject":"[PULL 04/19] whpx: i386: workaround for Windows 10 support","Date":"Wed, 25 Mar 2026 17:44:38 +0100","Message-ID":"<20260325164453.72127-5-pbonzini@redhat.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260325164453.72127-1-pbonzini@redhat.com>","References":"<20260325164453.72127-1-pbonzini@redhat.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=170.10.133.124;\n envelope-from=pbonzini@redhat.com;\n helo=us-smtp-delivery-124.mimecast.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, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n 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 <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":"From: Mohamed Mediouni <mohamed@unpredictable.fr>\n\nWindows Server 2022 and later support\nWHvCapabilityCodeProcessorPerfmonFeatures and\nWHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks.\n\nWindows 10 supports neither of those.\n\nAs the QEMU executable doesn't have a manifest, OS version\nqueries do not return the actual Windows version but 6.2.9200\nwhich corresponds to Windows 8. Windows Server 2022 and Windows\n11 still use the 10.0 number, with distinction being the build\nnumber.\n\nAs such, use the absence of perf monitoring feature query as\na cutoff to detect if a legacy OS is present.\n\nSigned-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>\nLink: https://lore.kernel.org/r/20260324151323.74473-2-mohamed@unpredictable.fr\nSigned-off-by: Paolo Bonzini <pbonzini@redhat.com>\n---\n target/i386/whpx/whpx-all.c | 43 ++++++++++++++++++++++++-------------\n 1 file changed, 28 insertions(+), 15 deletions(-)","diff":"diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c\nindex 4d5d3dbd243..015c0f1dc99 100644\n--- a/target/i386/whpx/whpx-all.c\n+++ b/target/i386/whpx/whpx-all.c\n@@ -1948,6 +1948,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n     WHV_CAPABILITY_FEATURES features = {0};\n     WHV_PROCESSOR_FEATURES_BANKS processor_features;\n     WHV_PROCESSOR_PERFMON_FEATURES perfmon_features;\n+    bool is_legacy_os = false;\n \n     whpx = &whpx_global;\n \n@@ -2096,21 +2097,29 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n     hr = whp_dispatch.WHvGetCapability(\n         WHvCapabilityCodeProcessorPerfmonFeatures, &perfmon_features,\n         sizeof(WHV_PROCESSOR_PERFMON_FEATURES), &whpx_cap_size);\n+    /*\n+     * Relying on this is a crutch to maintain Windows 10 support.\n+     *\n+     * WHvCapabilityCodeProcessorPerfmonFeatures and\n+     * WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks\n+     * are implemented starting from Windows Server 2022 (build 20348).\n+     */\n     if (FAILED(hr)) {\n-        error_report(\"WHPX: Failed to get performance monitoring features, hr=%08lx\", hr);\n-        ret = -ENOSPC;\n-        goto error;\n-    }\n-\n-    hr = whp_dispatch.WHvSetPartitionProperty(\n-            whpx->partition,\n-            WHvPartitionPropertyCodeProcessorPerfmonFeatures,\n-            &perfmon_features,\n-            sizeof(WHV_PROCESSOR_PERFMON_FEATURES));\n-    if (FAILED(hr)) {\n-        error_report(\"WHPX: Failed to set performance monitoring features, hr=%08lx\", hr);\n-        ret = -EINVAL;\n-        goto error;\n+        warn_report(\"WHPX: Failed to get performance \"\n+                    \"monitoring features, hr=%08lx\", hr);\n+        is_legacy_os = true;\n+    } else {\n+        hr = whp_dispatch.WHvSetPartitionProperty(\n+                whpx->partition,\n+                WHvPartitionPropertyCodeProcessorPerfmonFeatures,\n+                &perfmon_features,\n+                sizeof(WHV_PROCESSOR_PERFMON_FEATURES));\n+        if (FAILED(hr)) {\n+            error_report(\"WHPX: Failed to set performance \"\n+                         \"monitoring features, hr=%08lx\", hr);\n+            ret = -EINVAL;\n+            goto error;\n+        }\n     }\n \n     /* Enable synthetic processor features */\n@@ -2138,7 +2147,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n         synthetic_features.Bank0.DirectSyntheticTimers = 1;\n     }\n \n-    if (whpx->hyperv_enlightenments_allowed) {\n+    if (!is_legacy_os && whpx->hyperv_enlightenments_allowed) {\n         hr = whp_dispatch.WHvSetPartitionProperty(\n                 whpx->partition,\n                 WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks,\n@@ -2149,6 +2158,10 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n             ret = -EINVAL;\n             goto error;\n         }\n+    } else if (is_legacy_os && whpx->hyperv_enlightenments_required) {\n+        error_report(\"Hyper-V enlightenments not available on legacy Windows\");\n+        ret = -EINVAL;\n+        goto error;\n     }\n \n     /* Register for MSR and CPUID exits */\n","prefixes":["PULL","04/19"]}