get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2219307/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2219307,
    "url": "http://patchwork.ozlabs.org/api/patches/2219307/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402193104.56331-7-mohamed@unpredictable.fr/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "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": "<20260402193104.56331-7-mohamed@unpredictable.fr>",
    "list_archive_url": null,
    "date": "2026-04-02T19:31:04",
    "name": "[v2,6/6] whpx: i386: reintroduce enlightenments for Windows 10",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "b7456bdfa4086b81aa3fd49569f95b2ff67feed6",
    "submitter": {
        "id": 91318,
        "url": "http://patchwork.ozlabs.org/api/people/91318/?format=api",
        "name": "Mohamed Mediouni",
        "email": "mohamed@unpredictable.fr"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402193104.56331-7-mohamed@unpredictable.fr/mbox/",
    "series": [
        {
            "id": 498547,
            "url": "http://patchwork.ozlabs.org/api/series/498547/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=498547",
            "date": "2026-04-02T19:30:58",
            "name": "whpx: i386: x2apic emulation for kernel-irqchip=off, feature probing",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/498547/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2219307/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2219307/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=JPt4jXyH;\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 4fmsSh46R6z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 06:32:36 +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 1w8Nlc-0000Oz-W8; Thu, 02 Apr 2026 15:31:49 -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 1w8NlO-0000Lq-7I\n for qemu-devel@nongnu.org; Thu, 02 Apr 2026 15:31:39 -0400",
            "from pv-2002j-snip4-3.eps.apple.com ([57.103.64.144]\n helo=outbound.pv.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 1w8NlI-0008HC-67\n for qemu-devel@nongnu.org; Thu, 02 Apr 2026 15:31:30 -0400",
            "from outbound.pv.icloud.com (unknown [127.0.0.2])\n by p00-icloudmta-asmtp-us-west-1a-20-percent-1 (Postfix) with ESMTPS id\n 91A1F1800161; Thu, 02 Apr 2026 19:31:24 +0000 (UTC)",
            "from localhost.localdomain (unknown [17.56.9.36])\n by p00-icloudmta-asmtp-us-west-1a-20-percent-1 (Postfix) with ESMTPSA id\n 383941800166; Thu, 02 Apr 2026 19:31:22 +0000 (UTC)"
        ],
        "Dkim-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr;\n s=sig1; t=1775158286; x=1777750286;\n bh=DJiQcN+R2DoS0VUEx1nwHZdiISPegzTmeoPCfvvpPAA=;\n h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme;\n b=JPt4jXyHExwsBN3yRflU64Mop3wrZTfSLdvoEeYKK7p9yYwD15gpfB4O5ozCdnlBUxaqltYSD/Zlq9Otr8NGswN1n2Ehn0tMoIgVc4LP+gYlSuE408QEG8qYHYwZTn9HGyOnJjpJCq/D82hE8BBlkTPIZund89zLB3WiWrJD03Uhf6S/ClcJgHFTThf7Ty7jblmofJqFEtB82wDIcrEUi/Wz8RbJcGau1xVBDkNT7Y/n80UePWHwZH59VXWNFONtAN/L6KWCO+/GiWoUAVuAD2sVGR3nV/mOUTS1xoblTHphrG/yrKoCcLRz6mcUCNEeMTqL8lFNLYdg4MUnGIY4bg==",
        "mail-alias-created-date": "1752046281608",
        "From": "Mohamed Mediouni <mohamed@unpredictable.fr>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "qemu-arm@nongnu.org, Mohamed Mediouni <mohamed@unpredictable.fr>,\n Paolo Bonzini <pbonzini@redhat.com>,\n Peter Maydell <peter.maydell@linaro.org>, Zhao Liu <zhao1.liu@intel.com>,\n Roman Bolshakov <rbolshakov@ddn.com>, Wei Liu <wei.liu@kernel.org>,\n Pedro Barbuda <pbarbuda@microsoft.com>,\n Phil Dennis-Jordan <phil@philjordan.eu>",
        "Subject": "[PATCH v2 6/6] whpx: i386: reintroduce enlightenments for Windows 10",
        "Date": "Thu,  2 Apr 2026 21:31:04 +0200",
        "Message-ID": "<20260402193104.56331-7-mohamed@unpredictable.fr>",
        "X-Mailer": "git-send-email 2.50.1",
        "In-Reply-To": "<20260402193104.56331-1-mohamed@unpredictable.fr>",
        "References": "<20260402193104.56331-1-mohamed@unpredictable.fr>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAyMDE3NSBTYWx0ZWRfX98CdvnNC8KgV\n ztIJSyZ32lOdeAiq0LJvBa+IdxzVK75WZn8EG5X21y03aBBHnX3ewpgeaYjJ1gslWPPItUwPB86\n MsAmIYv5ncwAbt0abK4/+xSgHI1Y8etNrDVG5ONTLMpEpgrVvYatqOCLNkYGovWjRG6TPAjsBjd\n j0b0PwCt63YPR3lTz7fAQuQYHJU7rsYMIJoHyyXVS7Rs3fsmqlIEacKQD7pZTpF6Kk/HE9rO5+1\n 3XqHazF0s2PfBFgzicBCA/gsudBCURkQ0AEbogV0+PRCLhe4OFCuuh6MPL10ywCwCY6MSGBGTG3\n v9mMMYS47/xWkhMxQRT7dSx3PiiGhVNPqfS+eIFIukGLx2TajTDTL1gP9NpyBE=",
        "X-Proofpoint-GUID": "HsktXxGOi5Zk_rkYOiND54WOm5OaaT4A",
        "X-Proofpoint-ORIG-GUID": "HsktXxGOi5Zk_rkYOiND54WOm5OaaT4A",
        "X-Authority-Info-Out": "v=2.4 cv=Qr9THFyd c=1 sm=1 tr=0 ts=69cec40d\n cx=c_apl:c_pps:t_out a=azHRBMxVc17uSn+fyuI/eg==:117\n a=azHRBMxVc17uSn+fyuI/eg==:17 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=1av6p83xj7LwzDHaJJEA:9",
        "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_03,2026-04-02_05,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=notspam policy=default score=0 mlxscore=0\n mlxlogscore=999 clxscore=1030 spamscore=0 malwarescore=0 lowpriorityscore=0\n suspectscore=0 adultscore=0 bulkscore=0 phishscore=0 classifier=spam\n authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000\n definitions=main-2604020175",
        "Received-SPF": "pass client-ip=57.103.64.144;\n envelope-from=mohamed@unpredictable.fr; helo=outbound.pv.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,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001,\n 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 <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 accel/whpx/whpx-common.c       |  2 +\n include/system/whpx-internal.h |  1 +\n target/arm/whpx/whpx-all.c     |  1 +\n target/i386/whpx/whpx-all.c    | 68 ++++++++++++++++++++++++++++++----\n 4 files changed, 64 insertions(+), 8 deletions(-)",
    "diff": "diff --git a/accel/whpx/whpx-common.c b/accel/whpx/whpx-common.c\nindex b813a5d9d2..59be996aef 100644\n--- a/accel/whpx/whpx-common.c\n+++ b/accel/whpx/whpx-common.c\n@@ -550,6 +550,8 @@ static void whpx_accel_instance_init(Object *obj)\n \n     whpx->hyperv_enlightenments_allowed = true;\n     whpx->hyperv_enlightenments_required = false;\n+    /* Value determined at whpx_accel_init */\n+    whpx->hyperv_enlightenments_enabled = false;\n }\n \n static const TypeInfo whpx_accel_type = {\ndiff --git a/include/system/whpx-internal.h b/include/system/whpx-internal.h\nindex 480d05fdca..576587ec3b 100644\n--- a/include/system/whpx-internal.h\n+++ b/include/system/whpx-internal.h\n@@ -45,6 +45,7 @@ struct whpx_state {\n \n     bool hyperv_enlightenments_allowed;\n     bool hyperv_enlightenments_required;\n+    bool hyperv_enlightenments_enabled;\n \n };\n \ndiff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c\nindex bbf0f6be96..4019a513aa 100644\n--- a/target/arm/whpx/whpx-all.c\n+++ b/target/arm/whpx/whpx-all.c\n@@ -968,6 +968,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n      * as they're not needed for performance.\n      */\n     if (whpx->hyperv_enlightenments_required) {\n+        whpx->hyperv_enlightenments_enabled = true;\n         hr = whp_dispatch.WHvSetPartitionProperty(\n                 whpx->partition,\n                 WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks,\ndiff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c\nindex b8f53ca532..b62377cb41 100644\n--- a/target/i386/whpx/whpx-all.c\n+++ b/target/i386/whpx/whpx-all.c\n@@ -2077,14 +2077,47 @@ 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+            } 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+            if (!whpx->hyperv_enlightenments_enabled) {\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             }\n \n@@ -2259,6 +2292,24 @@ int whpx_init_vcpu(CPUState *cpu)\n         env->apic_bus_freq = 1000000000;\n     }\n \n+    /* When Hyper-V enlightenments are not active, fall back to the KVM ones */\n+    if (!whpx->hyperv_enlightenments_enabled) {\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@@ -2507,6 +2558,7 @@ int whpx_accel_init(AccelState *as, MachineState *ms)\n     }\n \n     if (!is_legacy_os && whpx->hyperv_enlightenments_allowed) {\n+        whpx->hyperv_enlightenments_enabled = true;\n         hr = whp_dispatch.WHvSetPartitionProperty(\n                 whpx->partition,\n                 WHvPartitionPropertyCodeSyntheticProcessorFeaturesBanks,\n",
    "prefixes": [
        "v2",
        "6/6"
    ]
}