From nobody Thu Oct 30 22:54:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1752565908; cv=none; d=zohomail.com; s=zohoarc; b=ElGjwfAtG9HA0aGpLqzMpyENwF9Az+CNgVPh3G/8Es+2M2wMmNT65+yY3Hfvcvq1D22udp6tCCTn1UStBBXAYOOYzLJ3+a7HP9g/sGo0xQ+Ej7BWE0Pf2/P604yvA6Z2RegNs+g+T+cWM+36DpvYqqNpGb0llgHMNxz0b9Ipq6Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752565908; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iV7BcCJ9wDrvWJMr9zxpPwmj+MXGvNAcQNyzCrRDmCI=; b=bCCprNnZ6HuAubi4ZEvsqEtkMFNE+UDqJhlPgTdsoq28AmtbB9YDwEP9KT3r8OsoRLYV2WgTvmJl8pNrRIztMwaPe/Uvda669tlJdfqjMQo9ifMUBPc9KuYmQVmQt4Xcap6Xzk5LTJaOu8yK6T3ybrtX3odxjvrFgR9s3R6RxD8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1752565907829356.92239465742296; Tue, 15 Jul 2025 00:51:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1043653.1413656 (Exim 4.92) (envelope-from ) id 1ubaRq-00086t-WC; Tue, 15 Jul 2025 07:51:34 +0000 Received: by outflank-mailman (output) from mailman id 1043653.1413656; Tue, 15 Jul 2025 07:51:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ubaRq-00086m-T2; Tue, 15 Jul 2025 07:51:34 +0000 Received: by outflank-mailman (input) for mailman id 1043653; Tue, 15 Jul 2025 07:51:33 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ubaNG-0003TX-01 for xen-devel@lists.xenproject.org; Tue, 15 Jul 2025 07:46:50 +0000 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [2a00:1450:4864:20::32a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id dcbc02c2-614f-11f0-b894-0df219b8e170; Tue, 15 Jul 2025 09:46:48 +0200 (CEST) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-455b00339c8so25626705e9.3 for ; Tue, 15 Jul 2025 00:46:48 -0700 (PDT) Received: from localhost (112.pool92-178-7.dynamic.orange.es. [92.178.7.112]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-45626cde7aasm8506585e9.1.2025.07.15.00.46.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Jul 2025 00:46:46 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: dcbc02c2-614f-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1752565607; x=1753170407; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iV7BcCJ9wDrvWJMr9zxpPwmj+MXGvNAcQNyzCrRDmCI=; b=wB7W08P0nYQ53Nb5vyEbX7By1GqxQdyenFRS9R0Upxwy1uxNnCI0vMOyyiQ0SleWjF 9gERectBYXDDz9hc7ZYZ+hwAIo2Uvi4CwLIIjWsw6WkquUhbi3s79POpaNjDSjzNEv6A cVxsPxYiWgjXMRF3Q9zTBzWj4i1sCVtfpWyGM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752565607; x=1753170407; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iV7BcCJ9wDrvWJMr9zxpPwmj+MXGvNAcQNyzCrRDmCI=; b=bko7j3cHNk3+Lp0NWjrvCPWDkEaRCn7YuCRP3s0oy50xrE4LfoIsWVUvgC/yspxQcp VY7N0kdr7SNZ3rRAOwMaVQrC2IdQF9Uvd+DGMznzrtiNQlor6d6p/5sOB/Ehw8nFBewz NgAy7OCii8QkV1+tbGX1Jwq5dUrK5XSmdkFpGu/c/NuMScMikW+I55frC5A1Y5GozOO0 CzRgnpl88YHy+Pt4mTlIRAClIfLc2yPJed26aKQgFk0UK84mumSPXQ2YHsCuIc7hHVOz 5Ld59YGI00daqiKusE9o2+qNJk/XKOGiXqcOcrZrRz+6UUpuOMoIDc6mpTmzmZ6IhOEz hLqg== X-Gm-Message-State: AOJu0YxvTTZOjclPw335DM1c/OInqHnR5o68xHAemBq0B6htnCb7mQfu 3RutDUs/Y/DIiwwwV2cuSZbKbkAbFijB0lfMSg/cbBkQfCdCQCXkPPuafc+nEsedFk0aEIPJ0/b 58PyI X-Gm-Gg: ASbGncutxVchYLwZEX+s3tciK6HbQ2hDt7BNYOyJOF1AdEHX9C7xToavBizh7/aqaAu 2LvqfLHyZ8v7zvU9St9sc7vsk1OvzgIW7EENvz2+MYbWi4dTRX441ybLByjxDqLUNyty3H0wvpn lZiQjgcW+vpxS8Ove7HqY+5JC0XnwVYxHIWRKn+KICdeddjzOkybRdkMp0MnehPRjBTOGkRril5 oMjUmEtb6s4oQSBBB4hsYQ6N/Vq23dDw9Mgen3bRXtDBCXlbvX77BKXWa3Vga/Rpdlo2HWghUBD Sxr10qMRYtldPgDq1KP5pRIIh3yq2zyNx343porHAGfwmiwv7hqGY0S281F1k9XsbYNSOmHsMpq wakLC9RUnWIyxrcL22hgHAuxazpXMOwql8wcB3ONKJ1qjGgvmMsdT/7VP6m65jVFclg== X-Google-Smtp-Source: AGHT+IH5EcAU8Xp3bvqSfzl5CT3VTj4iOZqoMA/qbYzTVyWqamtS209CjPdSl1H8IVPqtv6+9XxFYw== X-Received: by 2002:a05:600c:5246:b0:44a:b9e4:4e6f with SMTP id 5b1f17b1804b1-454f42599b3mr164132595e9.16.1752565607378; Tue, 15 Jul 2025 00:46:47 -0700 (PDT) From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Roger Pau Monne , Jan Beulich , Andrew Cooper Subject: [PATCH 1/2] x86/ept: move vmx_domain_flush_pml_buffers() to p2m-ept.c Date: Tue, 15 Jul 2025 09:45:58 +0200 Message-ID: <20250715074559.73197-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250715074559.73197-1-roger.pau@citrix.com> References: <20250715074559.73197-1-roger.pau@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1752565910607116600 No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Jan Beulich --- xen/arch/x86/hvm/vmx/vmcs.c | 59 +------------------------ xen/arch/x86/hvm/vmx/vmx.c | 2 +- xen/arch/x86/include/asm/hvm/vmx/vmcs.h | 1 - xen/arch/x86/include/asm/hvm/vmx/vmx.h | 1 + xen/arch/x86/mm/p2m-ept.c | 56 +++++++++++++++++++++++ 5 files changed, 60 insertions(+), 59 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c index e7fca4bf33db..ab8b1c87ec0f 100644 --- a/xen/arch/x86/hvm/vmx/vmcs.c +++ b/xen/arch/x86/hvm/vmx/vmcs.c @@ -1670,7 +1670,7 @@ void vmx_vcpu_disable_pml(struct vcpu *v) return; =20 /* Make sure we don't lose any logged GPAs. */ - vmx_vcpu_flush_pml_buffer(v); + ept_vcpu_flush_pml_buffer(v); =20 vmx_vmcs_enter(v); =20 @@ -1684,61 +1684,6 @@ void vmx_vcpu_disable_pml(struct vcpu *v) v->arch.hvm.vmx.pml_pg =3D NULL; } =20 -void vmx_vcpu_flush_pml_buffer(struct vcpu *v) -{ - uint64_t *pml_buf; - unsigned long pml_idx; - - ASSERT((v =3D=3D current) || (!vcpu_runnable(v) && !v->is_running)); - ASSERT(vmx_vcpu_pml_enabled(v)); - - vmx_vmcs_enter(v); - - __vmread(GUEST_PML_INDEX, &pml_idx); - - /* Do nothing if PML buffer is empty. */ - if ( pml_idx =3D=3D (NR_PML_ENTRIES - 1) ) - goto out; - - pml_buf =3D __map_domain_page(v->arch.hvm.vmx.pml_pg); - - /* - * PML index can be either 2^16-1 (buffer is full), or 0 ~ NR_PML_ENTR= IES-1 - * (buffer is not full), and in latter case PML index always points to= next - * available entity. - */ - if ( pml_idx >=3D NR_PML_ENTRIES ) - pml_idx =3D 0; - else - pml_idx++; - - for ( ; pml_idx < NR_PML_ENTRIES; pml_idx++ ) - { - unsigned long gfn =3D pml_buf[pml_idx] >> PAGE_SHIFT; - - /* - * Need to change type from log-dirty to normal memory for logged = GFN. - * hap_track_dirty_vram depends on it to work. And we mark all log= ged - * GFNs to be dirty, as we cannot be sure whether it's safe to ign= ore - * GFNs on which p2m_change_type_one returns failure. The failure = cases - * are very rare, and additional cost is negligible, but a missing= mark - * is extremely difficult to debug. - */ - p2m_change_type_one(v->domain, gfn, p2m_ram_logdirty, p2m_ram_rw); - - /* HVM guest: pfn =3D=3D gfn */ - paging_mark_pfn_dirty(v->domain, _pfn(gfn)); - } - - unmap_domain_page(pml_buf); - - /* Reset PML index */ - __vmwrite(GUEST_PML_INDEX, NR_PML_ENTRIES - 1); - - out: - vmx_vmcs_exit(v); -} - bool vmx_domain_pml_enabled(const struct domain *d) { return d->arch.hvm.vmx.status & VMX_DOMAIN_PML_ENABLED; @@ -1812,7 +1757,7 @@ void vmx_domain_flush_pml_buffers(struct domain *d) return; =20 for_each_vcpu ( d, v ) - vmx_vcpu_flush_pml_buffer(v); + ept_vcpu_flush_pml_buffer(v); } =20 static void vmx_vcpu_update_eptp(struct vcpu *v, u64 eptp) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 218cb2c1af84..ce538668c737 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -4787,7 +4787,7 @@ void asmlinkage vmx_vmexit_handler(struct cpu_user_re= gs *regs) !(idtv_info & INTR_INFO_VALID_MASK) ) undo_nmis_unblocked_by_iret(); =20 - vmx_vcpu_flush_pml_buffer(v); + ept_vcpu_flush_pml_buffer(v); break; =20 case EXIT_REASON_XSAVES: diff --git a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h b/xen/arch/x86/include= /asm/hvm/vmx/vmcs.h index ff5dd66b0ad9..ecd91389302c 100644 --- a/xen/arch/x86/include/asm/hvm/vmx/vmcs.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h @@ -734,7 +734,6 @@ DECLARE_PER_CPU(bool, vmxon); bool vmx_vcpu_pml_enabled(const struct vcpu *v); int vmx_vcpu_enable_pml(struct vcpu *v); void vmx_vcpu_disable_pml(struct vcpu *v); -void vmx_vcpu_flush_pml_buffer(struct vcpu *v); bool vmx_domain_pml_enabled(const struct domain *d); int vmx_domain_enable_pml(struct domain *d); void vmx_domain_disable_pml(struct domain *d); diff --git a/xen/arch/x86/include/asm/hvm/vmx/vmx.h b/xen/arch/x86/include/= asm/hvm/vmx/vmx.h index 56bea252cc5a..da04752e1752 100644 --- a/xen/arch/x86/include/asm/hvm/vmx/vmx.h +++ b/xen/arch/x86/include/asm/hvm/vmx/vmx.h @@ -491,6 +491,7 @@ void ept_walk_table(struct domain *d, unsigned long gfn= ); bool ept_handle_misconfig(uint64_t gpa); int epte_get_entry_emt(struct domain *d, gfn_t gfn, mfn_t mfn, unsigned int order, bool *ipat, p2m_type_t type); +void ept_vcpu_flush_pml_buffer(struct vcpu *v); void setup_ept_dump(void); /* Locate an alternate p2m by its EPTP */ unsigned int p2m_find_altp2m_by_eptp(struct domain *d, uint64_t eptp); diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index 0cf6818c13f0..015911ba6c80 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1373,6 +1373,62 @@ static void cf_check ept_flush_pml_buffers(struct p2= m_domain *p2m) vmx_domain_flush_pml_buffers(p2m->domain); } =20 +void ept_vcpu_flush_pml_buffer(struct vcpu *v) +{ + uint64_t *pml_buf; + unsigned long pml_idx; + + ASSERT((v =3D=3D current) || (!vcpu_runnable(v) && !v->is_running)); + ASSERT(vmx_vcpu_pml_enabled(v)); + + vmx_vmcs_enter(v); + + __vmread(GUEST_PML_INDEX, &pml_idx); + + /* Do nothing if PML buffer is empty. */ + if ( pml_idx =3D=3D (NR_PML_ENTRIES - 1) ) + goto out; + + pml_buf =3D __map_domain_page(v->arch.hvm.vmx.pml_pg); + + /* + * PML index can be either 2^16-1 (buffer is full), or 0 ~ NR_PML_ENTR= IES-1 + * (buffer is not full), and in latter case PML index always points to= next + * available entity. + */ + if ( pml_idx >=3D NR_PML_ENTRIES ) + pml_idx =3D 0; + else + pml_idx++; + + for ( ; pml_idx < NR_PML_ENTRIES; pml_idx++ ) + { + unsigned long gfn =3D pml_buf[pml_idx] >> PAGE_SHIFT; + + /* + * Need to change type from log-dirty to normal memory for logged = GFN. + * hap_track_dirty_vram depends on it to work. And we mark all loq= gged + * GFNs to be dirty, as we cannot be sure whether it's safe to ign= ore + * GFNs on which p2m_change_type_one returns failure. The failure = cases + * are very rare, and additional cost is negligible, but a missing= mark + * is extremely difficult to debug. + */ + p2m_change_type_one(v->domain, gfn, p2m_ram_logdirty, p2m_ram_rw); + + /* HVM guest: pfn =3D=3D gfn */ + paging_mark_pfn_dirty(v->domain, _pfn(gfn)); + } + + unmap_domain_page(pml_buf); + + /* Reset PML index */ + __vmwrite(GUEST_PML_INDEX, NR_PML_ENTRIES - 1); + + out: + vmx_vmcs_exit(v); + +} + int ept_p2m_init(struct p2m_domain *p2m) { struct ept_data *ept =3D &p2m->ept; --=20 2.49.0 From nobody Thu Oct 30 22:54:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1752565901; cv=none; d=zohomail.com; s=zohoarc; b=DsQ9NAdwPjICBNGGZo1RMDFDaxt1n8CXrTH0kWXEP7H7mu70nfrj0ZFMMgkNsuQGMN1jVX+dY/cUOl6V7+v8TFVBoFStpgoKM4nxUpaDb+1qCDQRgbUaQyHO/Lsrrt5xT1y2vGjeaVXoMIBualh0ArXOKkCXj9mzdadJE3fq6nE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1752565901; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2u/mTpjY75q/4fRak1rYYFNSLDDKWWpemS53s4G/FNQ=; b=GIhvPXpOEJ54ML+sZeI1YwywluZcpvGXW+GoApp7lHmJM3b+B/0xyn2KZjo3Wd0PWGodu/NY2lKBhGzMyiImCCcF88AY7sdmHXtlPf5zoeC4AVbiTOU7FAHcvFT/Z35nr3XUVmW8dn8n+rbPzoKSwV9EOxUTDJePYfciziEg4qU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1752565901676967.8596011650984; Tue, 15 Jul 2025 00:51:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1043651.1413647 (Exim 4.92) (envelope-from ) id 1ubaRo-0007qZ-LC; Tue, 15 Jul 2025 07:51:32 +0000 Received: by outflank-mailman (output) from mailman id 1043651.1413647; Tue, 15 Jul 2025 07:51:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ubaRo-0007qS-IK; Tue, 15 Jul 2025 07:51:32 +0000 Received: by outflank-mailman (input) for mailman id 1043651; Tue, 15 Jul 2025 07:51:31 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ubaNH-0003TX-44 for xen-devel@lists.xenproject.org; Tue, 15 Jul 2025 07:46:51 +0000 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [2a00:1450:4864:20::32c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id dd84e609-614f-11f0-b894-0df219b8e170; Tue, 15 Jul 2025 09:46:49 +0200 (CEST) Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4560add6cd2so19291995e9.0 for ; Tue, 15 Jul 2025 00:46:49 -0700 (PDT) Received: from localhost (112.pool92-178-7.dynamic.orange.es. [92.178.7.112]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3b5e8dc3a62sm14241523f8f.40.2025.07.15.00.46.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Jul 2025 00:46:48 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: dd84e609-614f-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1752565608; x=1753170408; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2u/mTpjY75q/4fRak1rYYFNSLDDKWWpemS53s4G/FNQ=; b=ernwfpa7g03Y/rxfjbxxM4p/M3H+AJQFCdqGeOToEEONDm1ZZyia5fshQ5sChCxmC/ wuCNC9oyWNoo9wDk9nWc+dLkpRDhinvfqFj8JJONMcXA/QDkb0j1u0IDbDLm6CR4U9+7 mn8vnVSxKdROyndiBCMYQa7EaJy3Cm/EArNaU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752565608; x=1753170408; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2u/mTpjY75q/4fRak1rYYFNSLDDKWWpemS53s4G/FNQ=; b=p3TEleTihLje8nVhuBCro3J6OCiKr+VnTgphTIgV6LqpWc6u/GO8Dcm0d2umKuS37C wae1tUPKnBBKAi/7v0OZZOgcttKQF7oIjrwKPUPZkAsxY/WizxkpwKRcrDMKyEcNLVsR cUyM83NsRJvBbqw+y2H4n0NSMXOCQzyoEnqSlxDf81JjR62E3AsB7p44ncyx/mrBRZYf RuySVPHhKZkjqbzmSkzUfwZNHWosRTD+OKa8a9NOYoG5Sq9rfQD1CsZiRTbs+qNPv1mb fJONdiTfLWdqpXaQLSUIu6zwgnDhbBNmgrir0VloI+qmQHbm7H0NUKVa4E9exTJXKNWW D7Zw== X-Gm-Message-State: AOJu0Ywx4XuTFdxAufvIhn1zBnO17T/1OdZ9I7O+Unq9W8r42uxdtSKV FFmy0BJnASr51LkPmAgPfZGwZ84hn5ukbJpMXjOJ1HcJyKHHXHliOKFJEvtu6hxfJyZf8SSQtPy xUylj X-Gm-Gg: ASbGncsHfPkrm7V0k2DzgSphM3r0ZQ/5SCE9o71wrV/LDPTcmc429b74SlV/Z67exKY xJccMVCCcuxeztjZo+KydMntaGSz5jo4ejFUGhVAPTxs0g5+6P/UKmJjSVYiWl+Bzxv6d4TOJM7 tKJZs4iByS212SQxg0WAHuEJ5Z/s+c1AJs85fL4S151UE0OpmZn8dsYoou1LvMg9hni2ruA+9Zj ggVwNbRJ7+jf2QkL68Z/ClIsyso72OIEDZyf00q6ssM9mF3kZ/8OXGgdAyMFelp24kpHPMQU2Qp P8v9UlDZhQNJwseOQSr694OB1Q6dQg5tpyu//H3aCgdlrmGoyuc08B9/sUCtJ0Jn1TmSfHBSfRq umpyL7tSwWxp36gASr+NZYPzvqCSgp8g+xjZYFWvCe3HOq8y7T8s8E7lgRmVZ+T6SeA== X-Google-Smtp-Source: AGHT+IGhgg6FKJgWsfptZtrH80eiTMt8XY75N/F3nOIkkpS6JIKXUi1qUtOg2v6phR0MRk3KuxjDYA== X-Received: by 2002:a05:600c:1f0d:b0:453:6c45:ce14 with SMTP id 5b1f17b1804b1-45625e33fc9mr22038965e9.4.1752565608516; Tue, 15 Jul 2025 00:46:48 -0700 (PDT) From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Roger Pau Monne , Jan Beulich , Andrew Cooper Subject: [PATCH 2/2] x86/ept: batch PML p2m type-changes into single locked region Date: Tue, 15 Jul 2025 09:45:59 +0200 Message-ID: <20250715074559.73197-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250715074559.73197-1-roger.pau@citrix.com> References: <20250715074559.73197-1-roger.pau@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1752565902352116600 The current p2m type-change loop in ept_vcpu_flush_pml_buffer() relies on each call to p2m_change_type_one() taking the p2m lock, doing the change and then dropping the lock and flushing the p2m. Instead take the p2m lock outside of the loop, so that calls to gfn_{,un}lock() inside p2m_change_type_one() just take the p2m lock recursively, and more importantly, the flush is deferred until the p2m is unlocked in ept_vcpu_flush_pml_buffer(). No functional change intended in the end result of ept_vcpu_flush_pml_buffer(), however a possibly noticeable performance improvement is expected. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- xen/arch/x86/mm/p2m-ept.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index 015911ba6c80..62fc8e50689f 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1375,6 +1375,8 @@ static void cf_check ept_flush_pml_buffers(struct p2m= _domain *p2m) =20 void ept_vcpu_flush_pml_buffer(struct vcpu *v) { + struct domain *d =3D v->domain; + struct p2m_domain *p2m =3D p2m_get_hostp2m(d); uint64_t *pml_buf; unsigned long pml_idx; =20 @@ -1401,6 +1403,12 @@ void ept_vcpu_flush_pml_buffer(struct vcpu *v) else pml_idx++; =20 + /* + * Take the lock outside of the loop, so all the type changes are done + * inside of the same locked region and the EPT flush is deferred unti= l the + * end of the loop. + */ + p2m_lock(p2m); for ( ; pml_idx < NR_PML_ENTRIES; pml_idx++ ) { unsigned long gfn =3D pml_buf[pml_idx] >> PAGE_SHIFT; @@ -1413,11 +1421,12 @@ void ept_vcpu_flush_pml_buffer(struct vcpu *v) * are very rare, and additional cost is negligible, but a missing= mark * is extremely difficult to debug. */ - p2m_change_type_one(v->domain, gfn, p2m_ram_logdirty, p2m_ram_rw); + p2m_change_type_one(d, gfn, p2m_ram_logdirty, p2m_ram_rw); =20 /* HVM guest: pfn =3D=3D gfn */ - paging_mark_pfn_dirty(v->domain, _pfn(gfn)); + paging_mark_pfn_dirty(d, _pfn(gfn)); } + p2m_unlock(p2m); =20 unmap_domain_page(pml_buf); =20 --=20 2.49.0