From nobody Sun Apr 12 04:21:37 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=1771964872; cv=none; d=zohomail.com; s=zohoarc; b=QaL1TAMkIt94GRxns/4IQgBE8BSplM1Kd7yQJIekhbho0eS8If1lMDnVaUhNOX/dwiTPA4VJVqAtrzQ3TMASUeSW0ZUfUiJpWTqPk1/O6lIxOIHc97DyfHOIXUhFjoijHBADDSTZWykXwOT+QSOC+p0QTBzOOFXz1QY0pGHeeC8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771964872; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=c6qJ7DQXPShPjf8MFVN5j9t59Q1gBGP4ELIE+5IJfMw=; b=TjqjbLA1yeZXEqVv+a8NKOJtwLZLSErBbatccgBZAB3MQ2gpIaWci0DfwZzj1Y9UsOiwiI5gpW2zm10JPVxaxR1iR/R5E4XBs0atAQcqEpgUSRXhkBkYoGnU+PkFz3orIV6Dwf4VlsXsTnB3HMM6y0eSM0kbd7XREd8MGs4Zito= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771964871192976.2772367374641; Tue, 24 Feb 2026 12:27:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuz0B-0004wJ-5o; Tue, 24 Feb 2026 15:27:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuz07-0004w6-Bh for qemu-devel@nongnu.org; Tue, 24 Feb 2026 15:27:23 -0500 Received: from p-west1-cluster2-host1-snip4-10.eps.apple.com ([57.103.64.181] helo=outbound.pv.icloud.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuz05-0001ia-6y for qemu-devel@nongnu.org; Tue, 24 Feb 2026 15:27:23 -0500 Received: from outbound.pv.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-1a-60-percent-3 (Postfix) with ESMTPS id 6A0541800136; Tue, 24 Feb 2026 20:27:17 +0000 (UTC) Received: from localhost.localdomain (unknown [17.56.9.36]) by p00-icloudmta-asmtp-us-west-1a-60-percent-3 (Postfix) with ESMTPSA id 4918718000BA; Tue, 24 Feb 2026 20:27:15 +0000 (UTC) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=unpredictable.fr; s=sig1; t=1771964839; x=1774556839; bh=c6qJ7DQXPShPjf8MFVN5j9t59Q1gBGP4ELIE+5IJfMw=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DwBRN278ceFsbr8ghhyWeqdkM2+8atLvD+mq+tvDKyRmEkKXjDR4Sck0g9vxsECimt9sbpAm1tdpqs0B8KVWmM9od7apErC08teMw/KSCCKyZkoG4PtD1WH/s4wkqmjTUHzoBpbhDybo84yC4vA/DZKyU/UqnMr1xwcrFZWkpCMbc5iAGC4DIJCBmnG7wNCkOWUelIKAyHExcS7JyaPSCMJVt80Fql8rPRCCBZWTcdrxRcaZm32quRYxuPzdzpOMG2CIbglVGVRV5EfZtBB8q5zVkRQ6prXDbrPJTiQVUyLlaCCx31hsoTbo9ECWzZTK63VYqVDHGbMF2baVRXIN/Q== mail-alias-created-date: 1752046281608 From: Mohamed Mediouni To: qemu-devel@nongnu.org Cc: Eduardo Habkost , "Michael S. Tsirkin" , Marcel Apfelbaum , Paolo Bonzini , Richard Henderson , Mohamed Mediouni Subject: [PATCH] hw: i386: vapic: enable on WHPX with user-mode irqchip Date: Tue, 24 Feb 2026 21:27:12 +0100 Message-ID: <20260224202712.71511-1-mohamed@unpredictable.fr> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: dyYzfzMcLoukxfXti5HgW1KQ3QdBmVcy X-Proofpoint-GUID: dyYzfzMcLoukxfXti5HgW1KQ3QdBmVcy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI0MDE3NSBTYWx0ZWRfX24NC+d/3EU4B +HIycNjYuZZyo5Wd2dCL+kkYLPRcSe766lhQGEtrHCKSPOKbwtLs6qL27NjpN+vPo+2VJujVl6n T6b4CTEaD+NpHzVuf5YW18qeXGE07eMC2pALHqtJNIWmmBZqEO1vVPxy9qJO9/IeYO/loTAeuei JKl5HRRoZrNnvHAOHNxTGF5eCeRBg06ZRNHVCsmG3eFDhPQhXcCL3xBkZQa7ELOPl/GGLz5vP92 4/dGCXJAi5Flt7RRuWUuYtY98ClgN0KrBj3gCUXVx9JPYAJ73GwRhA9c9QxdYYF7fEkCRL441sM /oiaq9PORM2rSQVLq82JTcGlvhBqJuB+Q5pdd3QgTnfkkac4xva79320LGPob0= X-Authority-Info-Out: v=2.4 cv=HeEZjyE8 c=1 sm=1 tr=0 ts=699e09a5 cx=c_apl:c_apl_out:c_pps a=azHRBMxVc17uSn+fyuI/eg==:117 a=azHRBMxVc17uSn+fyuI/eg==:17 a=HzLeVaNsDn8A:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=SuDxGJzo5uN7fQlDX74A:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-24_02,2026-02-23_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 phishscore=0 adultscore=0 mlxscore=0 malwarescore=0 lowpriorityscore=0 spamscore=0 clxscore=1030 bulkscore=0 mlxlogscore=892 classifier=spam authscore=0 adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602240175 X-JNJ: AAAAAAABrs0i9Gnu2PRNvksBovgiDXZKnNBv8x73CrqIvHYY+X0ZzfknEjpTf8ImbX03MaLQy3rSIsQDlIcJ7wJU3MqnFQW4yosx+u2biiV8S2dh40Lnl0SRaQ99+AMQyAzRMSfm/EROjmLR+6K/pMYNVFgK/qhsBH98yf+QgfgOID4OQOF4Bnc4avgkeF4eeRgLTj0e2MNIIrJmA5DL2Qbr9LYZkpd1rywuH7R2gttSIj0mgQ4CzOkcRsFLmwJ4vP66Ym9+4aRRsADwOUAabti4OZC4FjMh8VcwIowCfNkXgK+BQa0ITMnPJgAukvFgRdyz9a3r0FIoGCy9oqNX1aDgHVoDBEeZUTC1y1IjtYgwQEWftc5N4HGd9JErwhWeJHrY/F1/HghzDQ760VKhqAoOVlXhKgGFETsvbt8VP899MoJm+pyyWUiKOb37wyex6gl0Qa+7mwm7XvS/Zk3mRSRfL1Bpg2buMFRNaqpyJ4V69wWlXuOsVqnAXb5jlxZaw0H30wdwJVwtF31XDjgIx7wcdOLDf6VMeDyDRc2ejkO1G3Q08X0G7Ry6wLA2o10DGP4LAImzFVJl1/lNCkBz8+JqlOfoYJM/n/qwXw3SXnpuC1JwsongTfQuQypUDZ+hjc1+pgurwdoK7fkyFZa4YrJvSNTA6l35nzk2DBykP8UdPkorPs02zkaRu3GkWYBPam1nvhb6HQO5EQHcIMWx Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=57.103.64.181; envelope-from=mohamed@unpredictable.fr; helo=outbound.pv.icloud.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.358, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.659, 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 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: 1771964876563158500 Content-Type: text/plain; charset="utf-8" Alleviate a performance bottleneck on legacy Windows guests. In my test setup, this makes Windows XP boot times be 20x faster than they're otherwise. Signed-off-by: Mohamed Mediouni --- hw/i386/vapic.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/hw/i386/vapic.c b/hw/i386/vapic.c index 670a50524d..699f91fb56 100644 --- a/hw/i386/vapic.c +++ b/hw/i386/vapic.c @@ -16,6 +16,7 @@ #include "system/cpus.h" #include "system/hw_accel.h" #include "system/kvm.h" +#include "system/whpx.h" #include "system/runstate.h" #include "system/address-spaces.h" #include "hw/i386/apic_internal.h" @@ -229,7 +230,8 @@ static int evaluate_tpr_instruction(VAPICROMState *s, X= 86CPU *cpu, return -1; } =20 - if (kvm_enabled() && !kvm_irqchip_in_kernel()) { + if ((kvm_enabled() && !kvm_irqchip_in_kernel())=20 + || (whpx_enabled() && !whpx_irqchip_in_kernel())) { /* * KVM without kernel-based TPR access reporting will pass an IP t= hat * points after the accessing instruction. So we need to look back= ward @@ -549,7 +551,7 @@ static int patch_hypercalls(VAPICROMState *s) cpu_physical_memory_read(rom_paddr, rom, s->rom_size); =20 for (pos =3D 0; pos < s->rom_size - sizeof(vmcall_pattern); pos++) { - if (kvm_irqchip_in_kernel()) { + if (kvm_enabled() && kvm_irqchip_in_kernel()) { pattern =3D outl_pattern; alternates[0] =3D outl_pattern[7]; alternates[1] =3D outl_pattern[7]; @@ -679,16 +681,26 @@ static void vapic_write(void *opaque, hwaddr addr, ui= nt64_t data, } break; case 1: - if (kvm_enabled()) { + if (kvm_enabled() || (whpx_enabled() && !whpx_irqchip_in_kernel())= ) { /* * Disable triggering instruction in ROM by writing a NOP. * * We cannot do this in TCG mode as the reported IP is not * accurate. + * + * Oddly enough, KVM increments EIP _before_ the execution + * of the instruction is finished. */ pause_all_vcpus(); - patch_byte(cpu, env->eip - 2, 0x66); - patch_byte(cpu, env->eip - 1, 0x90); + if (!kvm_enabled()) { + patch_byte(cpu, env->eip, 0x66); + patch_byte(cpu, env->eip + 1, 0x90); + } + else { + patch_byte(cpu, env->eip - 2, 0x66); + patch_byte(cpu, env->eip - 1, 0x90); + + } resume_all_vcpus(); } =20 @@ -705,7 +717,8 @@ static void vapic_write(void *opaque, hwaddr addr, uint= 64_t data, break; default: case 4: - if (!kvm_irqchip_in_kernel()) { + if ((kvm_enabled() && !kvm_irqchip_in_kernel())=20 + || (whpx_enabled() && !whpx_irqchip_in_kernel())) { apic_poll_irq(cpu->apic_state); } break; --=20 2.50.1 (Apple Git-155)