From nobody Sun Dec 14 06:16:57 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 header.i=teddy.astie@vates.tech; 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=vates.tech ARC-Seal: i=1; a=rsa-sha256; t=1764250808; cv=none; d=zohomail.com; s=zohoarc; b=FHyDIJi4IOJqK7lYHrS5XNjeySofU/YsJ8wd0dViSHoEL/3SNmf2EgXVeSscRs+9rNEh6WCYkNC3qLkoBTHmF66mwqF+m6ArMFAP/GBqUPRT+Am0C3R+DKLXgUXvKaJMHRz1AVajrBs8SkROHSX2HyBmIzPLRCcFSTZ5UIXIOCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764250808; 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=thBPwpCdaOZGJV5TWAllKK33OhFnY55OPorBf+4bLqU=; b=ggdgjvMRjKHBVU5bQvz5bUgDni46sFvAzW1SCRZhYdtH5cgbvZwmwSAgP4S2/TIeeeXMRDZiAA37oM+YZ0R3DLctjqWgSR0UN3ncsUhvtddVwXk2lTNpBSaZc44ohILUV4jwF6N0SkMoa6UjZSDEQZJmJv2oO1r8HMe4WRvOzf0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=teddy.astie@vates.tech; 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 1764250808574382.3680826189267; Thu, 27 Nov 2025 05:40:08 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1173861.1498882 (Exim 4.92) (envelope-from ) id 1vOcDs-0008Dw-VA; Thu, 27 Nov 2025 13:39:48 +0000 Received: by outflank-mailman (output) from mailman id 1173861.1498882; Thu, 27 Nov 2025 13:39:48 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDs-0008Dn-Rj; Thu, 27 Nov 2025 13:39:48 +0000 Received: by outflank-mailman (input) for mailman id 1173861; Thu, 27 Nov 2025 13:39:47 +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 1vOcDr-0007qN-29 for xen-devel@lists.xenproject.org; Thu, 27 Nov 2025 13:39:47 +0000 Received: from mail132-18.atl131.mandrillapp.com (mail132-18.atl131.mandrillapp.com [198.2.132.18]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 867166d9-cb96-11f0-980a-7dc792cee155; Thu, 27 Nov 2025 14:39:41 +0100 (CET) Received: from pmta09.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1]) by mail132-18.atl131.mandrillapp.com (Mailchimp) with ESMTP id 4dHHbc2h8WzCf9XsP for ; Thu, 27 Nov 2025 13:39:40 +0000 (GMT) Received: from [37.26.189.201] by mandrillapp.com id f6bdf73267e24ad58f58833a5a32f85c; Thu, 27 Nov 2025 13:39:40 +0000 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: 867166d9-cb96-11f0-980a-7dc792cee155 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; s=mte1; t=1764250780; x=1764520780; bh=thBPwpCdaOZGJV5TWAllKK33OhFnY55OPorBf+4bLqU=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=QfuXrUYc4XnbI+pzTl1aARchA7yYhnETOdD8yISoCYlUKoAr2Pp6a0CcLQnbfiXJ+ xaZtGmQQguRDKhmzjxRG0k/qNnzs5EIMnBY0mp7564FrQ2xey0yCtlvD6/A3xLp13g bV5NgyXKflSn+5Yzyca63+VCGFNVGh062m0Do4ArV/6qiyL8Igv/n7yOl2j11yUxfn qV/e4jMNnZlznzVuRsKb+3EDoCzBGXWgtY5EBlF5h13Cogi/6xg3OijmcH4NPAgcOL rsAuy4yAntUcnm6I2Jr5iS1+qTCw2Gmy0h7hVMXO4IMpc/+F36TX4CalLA5hTCPKNm nXzUWQWbm4jAw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech; s=mte1; t=1764250780; x=1764511280; i=teddy.astie@vates.tech; bh=thBPwpCdaOZGJV5TWAllKK33OhFnY55OPorBf+4bLqU=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=U3pwQzuXkV+Jq/Sn7vDo/+wGH/jmAJxZCgn5uTsm4UzF50z+zbAb/6Ym0U45X4rQr zy53Y4t1ockktlu8ESaKwsOYIhPGC9K3ZGmJxg5vZ6bDZ7+TmXMp83kOc7cGkIShpK 2VtOEHss6i6cxgi37y1+CnWLz55Jxb2l7nJMOCX5Emgopv42wAHJlQYdG9CHyHZkJh z9JoV6X4VZ4ez+zIMR55P/BX6snHD2JNdbvFXKfC5pS3kDJVOEWJiApRel71VIkjSn Be8m2hCW566NGGiKnE44J0+X70K7T7SqoVQKp8qiQnA5koGXmI1kb6RGgIs+VAcPEw BzLgcFrJNby+Q== From: "Teddy Astie" Subject: =?utf-8?Q?[RFC=20PATCH=201/4]=20x86/ept:=20Drop=20shadow=20mode=20check=20in=20ept=5Fsync=5Fdomain()?= X-Mailer: git-send-email 2.51.2 X-Bm-Disclaimer: Yes X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2 X-Bm-Transport-Timestamp: 1764250779412 To: xen-devel@lists.xenproject.org Cc: "Teddy Astie" , "Jan Beulich" , "Andrew Cooper" , "=?utf-8?Q?Roger=20Pau=20Monn=C3=A9?=" Message-Id: In-Reply-To: References: X-Native-Encoded: 1 X-Report-Abuse: =?UTF-8?Q?Please=20forward=20a=20copy=20of=20this=20message,=20including=20all=20headers,=20to=20abuse@mandrill.com.=20You=20can=20also=20report=20abuse=20here:=20https://mandrillapp.com/contact/abuse=3Fid=3D30504962.f6bdf73267e24ad58f58833a5a32f85c?= X-Mandrill-User: md_30504962 Feedback-ID: 30504962:30504962.20251127:md Date: Thu, 27 Nov 2025 13:39:40 +0000 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity teddy.astie@vates.tech) (identity @mandrillapp.com) X-ZM-MESSAGEID: 1764250809757019200 Content-Type: text/plain; charset="utf-8" This function can only be reached from EPT-related code which is inherently HAP. Thus it is not useful to check for shadow_paging (or lack of HAP) ther= e. Moreover, it is an error to call this function in the non-EPT cases. Not a functional change. Signed-off-by: Teddy Astie Reviewed-by: Jan Beulich --- This function is only called through EPT code and by vmx_domain_update_eptp= () called by EPT log-dirty logic, and doesn't look reachable from shadow paging code. I think the original reason of this check was for eventually allowing guest= s to use both shadow paging and HAP and switch between the 2 dynamically. xen/arch/x86/mm/p2m-ept.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index ce4ef632ae..dfdbfa0afe 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1268,9 +1268,10 @@ static void ept_sync_domain_mask(struct p2m_domain *= p2m, const cpumask_t *mask) void ept_sync_domain(struct p2m_domain *p2m) { struct domain *d =3D p2m->domain; + ASSERT(hap_enabled(d)); =20 - /* Only if using EPT and this domain has some VCPUs to dirty. */ - if ( paging_mode_shadow(d) || !d->vcpu || !d->vcpu[0] ) + /* Only if this domain has some VCPUs to dirty. */ + if ( !d->vcpu || !d->vcpu[0] ) return; =20 ept_sync_domain_prepare(p2m); --=20 2.51.2 -- Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech From nobody Sun Dec 14 06:16:57 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 header.i=teddy.astie@vates.tech; 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=vates.tech ARC-Seal: i=1; a=rsa-sha256; t=1764250810; cv=none; d=zohomail.com; s=zohoarc; b=CD4yq4ik5TGTCoW25dEr6Z3GzdN0dA3GA5dVes8nzIun1oa7MIQBbF9PqXOADAejcKu76CouhcDQyCWFA2n0aeDoIETYBnkJMYgucT30cbAK0o+Pyud5o5FLeeNrU22rJs/bnmGHeMLjDyaEbnG8QSdEtr7lWSzlxsBxwtYsRek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764250810; 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=yswA3ZDBM5q5MzkWxrEy6kOfycOHTyLWCOT8Yu26TcI=; b=NoZ0tDjhB/e47rvvDy5JAQnpjJ/WzA+fy6+jO/uCZ5PAUFC+llRhwOZMmY+gFBP6JUDFzgCtXXq4I64qmw9uBOs81SLv/evQ7vWd/WCmp3JrJgl6MMJTCIzRl2uZJkuJS1GfrWaXxRTDa/CsOih/Ptg/SkuZDqpZXmL+aJLwdbE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=teddy.astie@vates.tech; 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 1764250810467529.7285499816056; Thu, 27 Nov 2025 05:40:10 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1173862.1498892 (Exim 4.92) (envelope-from ) id 1vOcDv-0008V9-6a; Thu, 27 Nov 2025 13:39:51 +0000 Received: by outflank-mailman (output) from mailman id 1173862.1498892; Thu, 27 Nov 2025 13:39:51 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDv-0008Uw-3N; Thu, 27 Nov 2025 13:39:51 +0000 Received: by outflank-mailman (input) for mailman id 1173862; Thu, 27 Nov 2025 13:39:50 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDu-0007Up-5u for xen-devel@lists.xenproject.org; Thu, 27 Nov 2025 13:39:50 +0000 Received: from mail132-20.atl131.mandrillapp.com (mail132-20.atl131.mandrillapp.com [198.2.132.20]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 867eee1a-cb96-11f0-9d18-b5c5bf9af7f9; Thu, 27 Nov 2025 14:39:41 +0100 (CET) Received: from pmta09.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1]) by mail132-20.atl131.mandrillapp.com (Mailchimp) with ESMTP id 4dHHbc4WVMzFCWZCF for ; Thu, 27 Nov 2025 13:39:40 +0000 (GMT) Received: from [37.26.189.201] by mandrillapp.com id 897f1b0f3cc9476bbc66273a31b5f427; Thu, 27 Nov 2025 13:39:40 +0000 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: 867eee1a-cb96-11f0-9d18-b5c5bf9af7f9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; s=mte1; t=1764250780; x=1764520780; bh=yswA3ZDBM5q5MzkWxrEy6kOfycOHTyLWCOT8Yu26TcI=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=GP/iVu34HSmQVMC52SZ5f3Q2i5gyxAog82cFeaO4yIEm/FaBM5/NEHut1sBGjhxs7 g0XQnVF1KWEzmHRNNo0101fEUMzUSSCoQchdyi38cfiDBJsauSW3HBTT6jZMV3xz3u 9kW184sV2wpYnbwlAk4tp8y8IxJT+LR3+j4GWMBaj+iezQxA/YBpMeJxhl/8PFOQYD kMa0OY//kMZnZdUv3xy2kFLqIi4Jewu99QtfUGKAC1sRjb8tbZxjbszM9Te2oKsqk2 5e57WR5AWHDmKK3TU3kBRfJCFtYFuHumSWSEuCsMmQ+nWI6jBUEgxm2weZN1vULacE ayfJoyux3wi+w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech; s=mte1; t=1764250780; x=1764511280; i=teddy.astie@vates.tech; bh=yswA3ZDBM5q5MzkWxrEy6kOfycOHTyLWCOT8Yu26TcI=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=Ted7GNUN+JueXRxfGHT257KAhJ8SjeQ++Xo/J4zqNJ0VbM3QEC8KN1PNdACVeQael sjp46DAzr1B84glSqTOkZ8yJr78i2UnNWkGCOZvFwEhH9/M1CsbzkXxbXZZW9/fbjI zEYb3cqpF6dxas6NDhB3V8Xd/uPEo18CiuKbgFJSsNDKjYa8sKPoA6z95f/b+5xG4w wObeiWmpdq76XPL3JGdvKURDfpMI6uwgyuYfw7MyWtXm0yCMt+ceg9N/yD6TgcpnRe P5FYJtq5Rwc85BK/mY7IvmhIVsVINqQNQmndD6gJ+Kog9gZvJi15Gt9lPe7CWSuGv5 ClqLiFKpjW4dQ== From: "Teddy Astie" Subject: =?utf-8?Q?[RFC=20PATCH=202/4]=20x86/shadow:=20Replace=20guest=5Ftlb=5Fflush=5Fmask=20with=20sh=5Fflush=5Ftlb=5Fmask?= X-Mailer: git-send-email 2.51.2 X-Bm-Disclaimer: Yes X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2 X-Bm-Transport-Timestamp: 1764250779739 To: xen-devel@lists.xenproject.org Cc: "Teddy Astie" , "Jan Beulich" , "Andrew Cooper" , "Tim Deegan" , "=?utf-8?Q?Roger=20Pau=20Monn=C3=A9?=" Message-Id: <0e8e2607de4f484e7eb37d64799bfc53a56d3fa9.1764248710.git.teddy.astie@vates.tech> In-Reply-To: References: X-Native-Encoded: 1 X-Report-Abuse: =?UTF-8?Q?Please=20forward=20a=20copy=20of=20this=20message,=20including=20all=20headers,=20to=20abuse@mandrill.com.=20You=20can=20also=20report=20abuse=20here:=20https://mandrillapp.com/contact/abuse=3Fid=3D30504962.897f1b0f3cc9476bbc66273a31b5f427?= X-Mandrill-User: md_30504962 Feedback-ID: 30504962:30504962.20251127:md Date: Thu, 27 Nov 2025 13:39:40 +0000 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity teddy.astie@vates.tech) (identity @mandrillapp.com) X-ZM-MESSAGEID: 1764250811915019200 Content-Type: text/plain; charset="utf-8" Introduce sh_flush_tlb_{mask,local} variants used to flush the tlb from within the shadow paging code. This is meant to decouple shadow code from the more general guest_tlb_flush_mask. Not a functional change. Signed-off-by: Teddy Astie --- xen/arch/x86/mm/shadow/common.c | 12 ++++++------ xen/arch/x86/mm/shadow/hvm.c | 8 ++++---- xen/arch/x86/mm/shadow/multi.c | 18 ++++++------------ xen/arch/x86/mm/shadow/private.h | 22 ++++++++++++++++++++++ 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/commo= n.c index 0176e33bc9..8511da5c7f 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -421,7 +421,7 @@ static int oos_remove_write_access(struct vcpu *v, mfn_= t gmfn, } =20 if ( ftlb ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); =20 return 0; } @@ -969,7 +969,7 @@ static bool __must_check _shadow_prealloc(struct domain= *d, unsigned int pages) /* See if that freed up enough space */ if ( d->arch.paging.free_pages >=3D pages ) { - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); return true; } } @@ -984,7 +984,7 @@ static bool __must_check _shadow_prealloc(struct domain= *d, unsigned int pages) =20 ASSERT_UNREACHABLE(); =20 - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); =20 return false; } @@ -1052,7 +1052,7 @@ void shadow_blow_tables(struct domain *d) 0); =20 /* Make sure everyone sees the unshadowings */ - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); } =20 void shadow_blow_tables_per_domain(struct domain *d) @@ -1157,7 +1157,7 @@ mfn_t shadow_alloc(struct domain *d, if ( unlikely(!cpumask_empty(&mask)) ) { perfc_incr(shadow_alloc_tlbflush); - guest_flush_tlb_mask(d, &mask); + sh_flush_tlb_mask(d, &mask); } /* Now safe to clear the page for reuse */ clear_domain_page(page_to_mfn(sp)); @@ -2276,7 +2276,7 @@ void sh_remove_shadows(struct domain *d, mfn_t gmfn, = int fast, int all) =20 /* Need to flush TLBs now, so that linear maps are safe next time we * take a fault. */ - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); =20 paging_unlock(d); } diff --git a/xen/arch/x86/mm/shadow/hvm.c b/xen/arch/x86/mm/shadow/hvm.c index 114957a3e1..b558ed82e8 100644 --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -594,7 +594,7 @@ static void validate_guest_pt_write(struct vcpu *v, mfn= _t gmfn, =20 if ( rc & SHADOW_SET_FLUSH ) /* Need to flush TLBs to pick up shadow PT changes */ - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); =20 if ( rc & SHADOW_SET_ERROR ) { @@ -744,7 +744,7 @@ bool cf_check shadow_flush_tlb(const unsigned long *vcp= u_bitmap) } =20 /* Flush TLBs on all CPUs with dirty vcpu state. */ - guest_flush_tlb_mask(d, mask); + sh_flush_tlb_mask(d, mask); =20 /* Done. */ for_each_vcpu ( d, v ) @@ -978,7 +978,7 @@ static void cf_check sh_unshadow_for_p2m_change( } =20 if ( flush ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); } =20 #if (SHADOW_OPTIMIZATIONS & SHOPT_FAST_FAULT_PATH) @@ -1196,7 +1196,7 @@ int shadow_track_dirty_vram(struct domain *d, } } if ( flush_tlb ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); goto out; =20 out_sl1ma: diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 03be61e225..3924ff4da6 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -79,12 +79,6 @@ const char *const fetch_type_names[] =3D { # define for_each_shadow_table(v, i) for ( (i) =3D 0; (i) < 1; ++(i) ) #endif =20 -/* Helper to perform a local TLB flush. */ -static void sh_flush_local(const struct domain *d) -{ - flush_local(guest_flush_tlb_flags(d)); -} - #if GUEST_PAGING_LEVELS >=3D 4 && defined(CONFIG_PV32) #define ASSERT_VALID_L2(t) \ ASSERT((t) =3D=3D SH_type_l2_shadow || (t) =3D=3D SH_type_l2h_shadow) @@ -2429,7 +2423,7 @@ static int cf_check sh_page_fault( perfc_incr(shadow_rm_write_flush_tlb); smp_wmb(); atomic_inc(&d->arch.paging.shadow.gtable_dirty_version); - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); } =20 #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) @@ -3243,7 +3237,7 @@ static pagetable_t cf_check sh_update_cr3(struct vcpu= *v, bool noflush) * (old) shadow linear maps in the writeable mapping heuristics. */ #if GUEST_PAGING_LEVELS =3D=3D 4 if ( sh_remove_write_access(d, gmfn, 4, 0) !=3D 0 ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); old_entry =3D sh_set_toplevel_shadow(v, 0, gmfn, SH_type_l4_shadow, sh_make_shadow); if ( unlikely(pagetable_is_null(v->arch.paging.shadow.shadow_table[0])= ) ) @@ -3284,7 +3278,7 @@ static pagetable_t cf_check sh_update_cr3(struct vcpu= *v, bool noflush) } } if ( flush ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); /* Now install the new shadows. */ for ( i =3D 0; i < 4; i++ ) { @@ -3309,7 +3303,7 @@ static pagetable_t cf_check sh_update_cr3(struct vcpu= *v, bool noflush) } #elif GUEST_PAGING_LEVELS =3D=3D 2 if ( sh_remove_write_access(d, gmfn, 2, 0) !=3D 0 ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); old_entry =3D sh_set_toplevel_shadow(v, 0, gmfn, SH_type_l2_shadow, sh_make_shadow); ASSERT(pagetable_is_null(old_entry)); @@ -3747,7 +3741,7 @@ static void cf_check sh_pagetable_dying(paddr_t gpa) } } if ( flush ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); =20 /* Remember that we've seen the guest use this interface, so we * can rely on it using it in future, instead of guessing at @@ -3786,7 +3780,7 @@ static void cf_check sh_pagetable_dying(paddr_t gpa) mfn_to_page(gmfn)->pagetable_dying =3D true; shadow_unhook_mappings(d, smfn, 1/* user pages only */); /* Now flush the TLB: we removed toplevel mappings. */ - guest_flush_tlb_mask(d, d->dirty_cpumask); + sh_flush_tlb_mask(d, d->dirty_cpumask); } =20 /* Remember that we've seen the guest use this interface, so we diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/priv= ate.h index cef9dbef2e..565a334bc0 100644 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -15,6 +15,7 @@ // been included... #include #include +#include #include #include #include @@ -910,6 +911,27 @@ static inline int sh_check_page_has_no_refs(struct pag= e_info *page) ((count & PGC_allocated) ? 1 : 0) ); } =20 +/* Helper to perform a local TLB flush. */ +static inline void sh_flush_local(const struct domain *d) +{ + unsigned int flags =3D FLUSH_TLB; + + if ( is_hvm_domain(d) ) + flags |=3D FLUSH_HVM_ASID_CORE; + + flush_local(flags); +} + +static inline void sh_flush_tlb_mask(const struct domain *d, const cpumask= _t *mask) +{ + unsigned int flags =3D FLUSH_TLB; + + if ( is_hvm_domain(d) ) + flags |=3D FLUSH_HVM_ASID_CORE; + + flush_mask(mask, flags); +} + /* Flush the TLB of the selected vCPUs. */ bool cf_check shadow_flush_tlb(const unsigned long *vcpu_bitmap); =20 --=20 2.51.2 -- Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech From nobody Sun Dec 14 06:16:57 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 header.i=teddy.astie@vates.tech; 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=vates.tech ARC-Seal: i=1; a=rsa-sha256; t=1764250803; cv=none; d=zohomail.com; s=zohoarc; b=S8N0bDocMXd4xUm+FLkNPNb5N1+dYro1xJzwgMUlLeID+e1+KLrCAoCe/0bdEJ+pmWWandFNftJ6ly8kY7siDggDfaiOfg5/xI/gfZ8feS+ciSJokIKUtsvUIenCKXd1tpw+Waf+OF0T0cAEf/RL5iFB1v1Z1MOr14jfQsZPwd8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764250803; 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=NFHk6HqtAfIPdwrhM3fd+af+o9jmpJwjBhaopH82WXE=; b=NgGxXpF7UVKldzv6+sR7IY9B/EyncDkJQxQkqg6UU0AHTcJbdXAkjx78j/Gann57U/TZqbZXSq2gErZSwf/wLq4PXas6IVNYUCQgQ5vIJbul7Lt5k+j/ob2M/KGu63WIokmfzznuMHyr/05Laf60abxtvccsvUHaOmhlgKobIPM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=teddy.astie@vates.tech; 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 1764250803485439.4234737446187; Thu, 27 Nov 2025 05:40:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1173859.1498861 (Exim 4.92) (envelope-from ) id 1vOcDq-0007k5-FO; Thu, 27 Nov 2025 13:39:46 +0000 Received: by outflank-mailman (output) from mailman id 1173859.1498861; Thu, 27 Nov 2025 13:39:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDq-0007jw-Cg; Thu, 27 Nov 2025 13:39:46 +0000 Received: by outflank-mailman (input) for mailman id 1173859; Thu, 27 Nov 2025 13:39:44 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDo-0007Up-Rn for xen-devel@lists.xenproject.org; Thu, 27 Nov 2025 13:39:44 +0000 Received: from mail132-18.atl131.mandrillapp.com (mail132-18.atl131.mandrillapp.com [198.2.132.18]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 87cb122a-cb96-11f0-9d18-b5c5bf9af7f9; Thu, 27 Nov 2025 14:39:44 +0100 (CET) Received: from pmta09.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1]) by mail132-18.atl131.mandrillapp.com (Mailchimp) with ESMTP id 4dHHbc6hNSzCf9Xss for ; Thu, 27 Nov 2025 13:39:40 +0000 (GMT) Received: from [37.26.189.201] by mandrillapp.com id cacd861e097f4c97bf6a85a68f58cfd7; Thu, 27 Nov 2025 13:39:40 +0000 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: 87cb122a-cb96-11f0-9d18-b5c5bf9af7f9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; s=mte1; t=1764250780; x=1764520780; bh=NFHk6HqtAfIPdwrhM3fd+af+o9jmpJwjBhaopH82WXE=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=W+jCDs/2ux8HeUNhEERYJPgcYvWNPMBGLE0wvLOsMrkUV2/1G2OWVNPnyDN1gs3M/ C/UVICpOb/Dg1q4gjOieybpLp7qGdNCZDJBDCtbaFR/NLCOIrbH+5HDEjeI9tZ6z0n JPdNuiTRVLS8KxAe4GLBmRmPu6JZj9hWbIFXJWEWwwTHIp9TH0saQLgOgrBskMT5rJ 8tTXCDMwV4so3u/1b8WGHMtEp85yi1ROsrb9Ey0loEBBe8K8Dm/XGrKckinLOVozmm ARq5+VWJ7w+fIjqGYuZ5PZWd/MBRUXHfbBmQ9UzSCVnsyssQt58mkfoMbb1Il5Usz8 O88CCL8GBgzkg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech; s=mte1; t=1764250780; x=1764511280; i=teddy.astie@vates.tech; bh=NFHk6HqtAfIPdwrhM3fd+af+o9jmpJwjBhaopH82WXE=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=fMEyq/5ghm7gNVxfoA6vLNd7aOjnrsDgdkfg/PBeqfT9XzUqFENBkNPwH88zMfedi rQH2O5wmhc9VISVqzGzryVWYafxsI3QA8i5lR4dX47bxRoG9uMmZnB3IYFk+qMemNx 7yUvhX1qQl+riz7Rw+zXZYwc/DOOKaZL1zzPKPslLnx21u6xOqTqdJstRBr89iRkTo hAmxR7E8mtfNS7GkPCkD5gckxqvwbc4NEwLqmrsYFn7ePa7sDWrPuFd48ptksjgZ+K +w4OLEiByOEKozdChrFg8QtYn79q31nsRjfXQm+WF4+B2j25sS1b5YuPZsw5ysU2rY 50S4d+hdUq0hQ== From: "Teddy Astie" Subject: =?utf-8?Q?[RFC=20PATCH=203/4]=20x86/p2m-pt:=20Set=20p2m->need=5Fflush=20if=20page=20was=20present=20before?= X-Mailer: git-send-email 2.51.2 X-Bm-Disclaimer: Yes X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2 X-Bm-Transport-Timestamp: 1764250779949 To: xen-devel@lists.xenproject.org Cc: "Teddy Astie" , "Jan Beulich" , "Andrew Cooper" , "=?utf-8?Q?Roger=20Pau=20Monn=C3=A9?=" Message-Id: <8f5a0cecba14cd38d739a9f29a5c8344c2f6bd11.1764248710.git.teddy.astie@vates.tech> In-Reply-To: References: X-Native-Encoded: 1 X-Report-Abuse: =?UTF-8?Q?Please=20forward=20a=20copy=20of=20this=20message,=20including=20all=20headers,=20to=20abuse@mandrill.com.=20You=20can=20also=20report=20abuse=20here:=20https://mandrillapp.com/contact/abuse=3Fid=3D30504962.cacd861e097f4c97bf6a85a68f58cfd7?= X-Mandrill-User: md_30504962 Feedback-ID: 30504962:30504962.20251127:md Date: Thu, 27 Nov 2025 13:39:40 +0000 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity teddy.astie@vates.tech) (identity @mandrillapp.com) X-ZM-MESSAGEID: 1764250803924019201 Content-Type: text/plain; charset="utf-8" Update p2m->need_flush if page was present before (requiring a tlb flush). This causes p2m->flush_tlb() to be now be reachable, make sure we call it only when set. Signed-off-by: Teddy Astie --- This change is important for the next patch. Would it be better to merge it with the next patch ? xen/arch/x86/mm/p2m-pt.c | 3 +++ xen/arch/x86/mm/p2m.c | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c index 5a6ce2f8bc..1fea3884be 100644 --- a/xen/arch/x86/mm/p2m-pt.c +++ b/xen/arch/x86/mm/p2m-pt.c @@ -143,6 +143,9 @@ static int write_p2m_entry(struct p2m_domain *p2m, unsi= gned long gfn, if ( p2m->write_p2m_entry_post ) p2m->write_p2m_entry_post(p2m, oflags); =20 + if ( oflags & _PAGE_PRESENT ) + p2m->need_flush =3D true; + paging_unlock(d); =20 if ( nestedhvm_enabled(d) && !p2m_is_nestedp2m(p2m) && diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index e2a00a0efd..98f8272270 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -274,7 +274,8 @@ void p2m_tlb_flush_sync(struct p2m_domain *p2m) if ( p2m->need_flush ) { p2m->need_flush =3D 0; - p2m->tlb_flush(p2m); + if ( p2m->tlb_flush ) + p2m->tlb_flush(p2m); } } =20 @@ -287,7 +288,8 @@ void p2m_unlock_and_tlb_flush(struct p2m_domain *p2m) { p2m->need_flush =3D 0; mm_write_unlock(&p2m->lock); - p2m->tlb_flush(p2m); + if ( p2m->tlb_flush ) + p2m->tlb_flush(p2m); } else mm_write_unlock(&p2m->lock); } --=20 2.51.2 -- Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech From nobody Sun Dec 14 06:16:57 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 header.i=teddy.astie@vates.tech; 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=vates.tech ARC-Seal: i=1; a=rsa-sha256; t=1764250804; cv=none; d=zohomail.com; s=zohoarc; b=heBogMXAlEFjyNh6aDkMjHglpD4CHVDB4oHJxtCKkPacQz6gXkcf1LJLVivUvNdZ4vmEBZA5YjAFkJ4uisjDBmM7ha8A1BYK4+4Qc4vT3EL/LoJDmVO63SUyjwx8Eu63fYoXYF93FBSn+ID3aUF5q3PH6k7S3Hjc2GJDUxMfR1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764250804; 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=rQY26kgkkzoiOQAz5X3ssTnjDr7t/ARczzg+WikxsQc=; b=M3nXaVs+evoM/UG89ovOhSUzkVyNmvDA+oah/pGXea/kLKz2W2WzFlIJAJmLN0o5KkKf8Bm0csqA65zHmIFwymbAtSEXVY8DSZTnVclEbfLW4C4VNeAZHyFay3UCj77N2+FhS8H7bsdPDKit7gvEBrONtt8BhFoydZiag/uPhhY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=teddy.astie@vates.tech; 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 1764250803442938.7897196720878; Thu, 27 Nov 2025 05:40:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1173860.1498872 (Exim 4.92) (envelope-from ) id 1vOcDr-0007yr-OC; Thu, 27 Nov 2025 13:39:47 +0000 Received: by outflank-mailman (output) from mailman id 1173860.1498872; Thu, 27 Nov 2025 13:39:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDr-0007yg-K3; Thu, 27 Nov 2025 13:39:47 +0000 Received: by outflank-mailman (input) for mailman id 1173860; Thu, 27 Nov 2025 13:39:45 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vOcDp-0007Up-SZ for xen-devel@lists.xenproject.org; Thu, 27 Nov 2025 13:39:45 +0000 Received: from mail132-18.atl131.mandrillapp.com (mail132-18.atl131.mandrillapp.com [198.2.132.18]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 88bb2a28-cb96-11f0-9d18-b5c5bf9af7f9; Thu, 27 Nov 2025 14:39:44 +0100 (CET) Received: from pmta09.mandrill.prod.atl01.rsglab.com (localhost [127.0.0.1]) by mail132-18.atl131.mandrillapp.com (Mailchimp) with ESMTP id 4dHHbc717RzCf9XsX for ; Thu, 27 Nov 2025 13:39:40 +0000 (GMT) Received: from [37.26.189.201] by mandrillapp.com id 94f196c9aa194aa6b0a8edddbab13cf8; Thu, 27 Nov 2025 13:39:40 +0000 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: 88bb2a28-cb96-11f0-9d18-b5c5bf9af7f9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com; s=mte1; t=1764250781; x=1764520781; bh=rQY26kgkkzoiOQAz5X3ssTnjDr7t/ARczzg+WikxsQc=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=1KGYGl9CHuvdUZleL5NrvP8IpJFgzNkvAVw8mHLPX34C4tlTEBkN5A9eJrzcaas5J 0v9bQ6dilEMChuay10yb0gMlb7P4m2xurpiC8/8wJ5t75RppKRWCl5b3EI1jOfDfnr 1NbsE450xujjFvecCk44RpRLa7TQNkc0xVoU7uy7dXqRGZSKYzICMMkkPriTo18b1w s8wzkbDyeTqJZO/L+uzxxtkgZipA0HjvpVjyPgAmWnmqNciiCzR5QBmMhTgIO1z7+r YzsMWETTtLKrlogqwjztpqp/jAUmqxWC4qA4IzcVKeA0HvIZdC2i7W7or+P8rCqkm4 cDAB9uD3ZX02w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vates.tech; s=mte1; t=1764250781; x=1764511281; i=teddy.astie@vates.tech; bh=rQY26kgkkzoiOQAz5X3ssTnjDr7t/ARczzg+WikxsQc=; h=From:Subject:To:Cc:Message-Id:In-Reply-To:References:Feedback-ID: Date:MIME-Version:Content-Type:Content-Transfer-Encoding:CC:Date: Subject:From; b=uIt+NxrfhOVCVEW0RN2Xfq0gCa/bwx0wJ9KRcHVXGn1qxvOXK+Md625UUr4PSxM1r VpnBe630Ldep3hX7fke/C8joBhHuPDzUcdap4Uqhoe/T8WSSYHFrjRQAEK4z3sgGLG C0wQdoCOABXIeIr+1dUf4jL9+HriDlusqaqhuLSih4rPeVfta4Xggyk6ji6VcxjrN0 x9tbRMi6ZUOJzKnTbVbpjVc3B6Yr1V79VnTINgPt8n3loCNoalCvah/+RY0vfM4VI0 t1jmJM+dtGGwmwtGmpuEUe3ZeGuaiJkrp0LWJirjtJVNpI/yafczbLB6momFWYiAFZ 6MUyv8aQfzOmg== From: "Teddy Astie" Subject: =?utf-8?Q?[RFC=20PATCH=204/4]=20x86/hap:=20Migrate=20tlb=20flush=20logic=20to=20p2m->flush=5Ftlb?= X-Mailer: git-send-email 2.51.2 X-Bm-Disclaimer: Yes X-Bm-Milter-Handled: 4ffbd6c1-ee69-4e1b-aabd-f977039bd3e2 X-Bm-Transport-Timestamp: 1764250780179 To: xen-devel@lists.xenproject.org Cc: "Teddy Astie" , "Jan Beulich" , "Andrew Cooper" , "=?utf-8?Q?Roger=20Pau=20Monn=C3=A9?=" Message-Id: <94bf385598cc7d70ecaecfae670e305581ad83b3.1764248710.git.teddy.astie@vates.tech> In-Reply-To: References: X-Native-Encoded: 1 X-Report-Abuse: =?UTF-8?Q?Please=20forward=20a=20copy=20of=20this=20message,=20including=20all=20headers,=20to=20abuse@mandrill.com.=20You=20can=20also=20report=20abuse=20here:=20https://mandrillapp.com/contact/abuse=3Fid=3D30504962.94f196c9aa194aa6b0a8edddbab13cf8?= X-Mandrill-User: md_30504962 Feedback-ID: 30504962:30504962.20251127:md Date: Thu, 27 Nov 2025 13:39:40 +0000 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @mandrillapp.com) (identity teddy.astie@vates.tech) X-ZM-MESSAGEID: 1764250805858019200 Content-Type: text/plain; charset="utf-8" Now that p2m->need_flush is set when modifying the pagetable in a way that requires it. We can move the tlb flush logic to p2m->tlb_flush. Introduce hap_tlb_flush to do it, which is called by main p2m logic (e.g p2= m_unlock, p2m_tlb_flush_sync, ...). Drop inline calls of guest_flush_tlb_mask which a= re now redundant with what now does p2m->flush_tlb, allowing us to drop guest_flus= h_tlb_* as it is now unused. No function change intended. Signed-off-by: Teddy Astie --- I would like hap_p2m_tlb_flush() to use p2m->dirty_cpumask instead of p2m->domain->dirty_cpumask. But p2m->dirty_cpumask is updated nowhere in the current logic, so that doesn't work and p2m->domain->dirty_cpumask is used instead (which works, even though it is less efficient with np2m). xen/arch/x86/flushtlb.c | 15 --------------- xen/arch/x86/include/asm/flushtlb.h | 3 --- xen/arch/x86/include/asm/p2m.h | 3 --- xen/arch/x86/mm/hap/hap.c | 14 +++----------- xen/arch/x86/mm/hap/nested_hap.c | 7 +------ xen/arch/x86/mm/nested.c | 2 +- xen/arch/x86/mm/p2m-pt.c | 10 ++-------- xen/arch/x86/mm/p2m.c | 2 -- 8 files changed, 7 insertions(+), 49 deletions(-) diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c index 09e676c151..48e0142848 100644 --- a/xen/arch/x86/flushtlb.c +++ b/xen/arch/x86/flushtlb.c @@ -320,18 +320,3 @@ void cache_writeback(const void *addr, unsigned int si= ze) asm volatile ("sfence" ::: "memory"); } =20 -unsigned int guest_flush_tlb_flags(const struct domain *d) -{ - bool shadow =3D paging_mode_shadow(d); - bool asid =3D is_hvm_domain(d) && (cpu_has_svm || shadow); - - return (shadow ? FLUSH_TLB : 0) | (asid ? FLUSH_HVM_ASID_CORE : 0); -} - -void guest_flush_tlb_mask(const struct domain *d, const cpumask_t *mask) -{ - unsigned int flags =3D guest_flush_tlb_flags(d); - - if ( flags ) - flush_mask(mask, flags); -} diff --git a/xen/arch/x86/include/asm/flushtlb.h b/xen/arch/x86/include/asm= /flushtlb.h index 7bcbca2b7f..5be6c4e08d 100644 --- a/xen/arch/x86/include/asm/flushtlb.h +++ b/xen/arch/x86/include/asm/flushtlb.h @@ -190,7 +190,4 @@ void flush_area_mask(const cpumask_t *mask, const void = *va, =20 static inline void flush_page_to_ram(unsigned long mfn, bool sync_icache) = {} =20 -unsigned int guest_flush_tlb_flags(const struct domain *d); -void guest_flush_tlb_mask(const struct domain *d, const cpumask_t *mask); - #endif /* __FLUSHTLB_H__ */ diff --git a/xen/arch/x86/include/asm/p2m.h b/xen/arch/x86/include/asm/p2m.h index 9016e88411..9ee79c9d39 100644 --- a/xen/arch/x86/include/asm/p2m.h +++ b/xen/arch/x86/include/asm/p2m.h @@ -886,9 +886,6 @@ void np2m_flush_base(struct vcpu *v, unsigned long np2m= _base); void hap_p2m_init(struct p2m_domain *p2m); void shadow_p2m_init(struct p2m_domain *p2m); =20 -void cf_check nestedp2m_write_p2m_entry_post( - struct p2m_domain *p2m, unsigned int oflags); - #ifdef CONFIG_ALTP2M =20 /* diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c index 2f69ff9c7b..58254c3039 100644 --- a/xen/arch/x86/mm/hap/hap.c +++ b/xen/arch/x86/mm/hap/hap.c @@ -105,8 +105,6 @@ int hap_track_dirty_vram(struct domain *d, p2m_change_type_range(d, begin_pfn, begin_pfn + nr_frames, p2m_ram_rw, p2m_ram_logdirty); =20 - guest_flush_tlb_mask(d, d->dirty_cpumask); - memset(dirty_bitmap, 0xff, size); /* consider all pages dirty = */ } else @@ -191,7 +189,6 @@ static int cf_check hap_enable_log_dirty(struct domain = *d) * to be read-only, or via hardware-assisted log-dirty. */ p2m_change_entry_type_global(d, p2m_ram_rw, p2m_ram_logdirty); - guest_flush_tlb_mask(d, d->dirty_cpumask); =20 return 0; } @@ -220,7 +217,6 @@ static void cf_check hap_clean_dirty_bitmap(struct doma= in *d) * be read-only, or via hardware-assisted log-dirty. */ p2m_change_entry_type_global(d, p2m_ram_rw, p2m_ram_logdirty); - guest_flush_tlb_mask(d, d->dirty_cpumask); } =20 /************************************************/ @@ -806,18 +802,14 @@ static void cf_check hap_update_paging_modes(struct v= cpu *v) put_gfn(d, cr3_gfn); } =20 -static void cf_check -hap_write_p2m_entry_post(struct p2m_domain *p2m, unsigned int oflags) +void hap_p2m_tlb_flush(struct p2m_domain *p2m) { - struct domain *d =3D p2m->domain; - - if ( oflags & _PAGE_PRESENT ) - guest_flush_tlb_mask(d, d->dirty_cpumask); + flush_mask(p2m->domain->dirty_cpumask, FLUSH_HVM_ASID_CORE); } =20 void hap_p2m_init(struct p2m_domain *p2m) { - p2m->write_p2m_entry_post =3D hap_write_p2m_entry_post; + p2m->tlb_flush =3D hap_p2m_tlb_flush; } =20 static unsigned long cf_check hap_gva_to_gfn_real_mode( diff --git a/xen/arch/x86/mm/hap/nested_hap.c b/xen/arch/x86/mm/hap/nested_= hap.c index 255fba7e1c..2b4ccc0c81 100644 --- a/xen/arch/x86/mm/hap/nested_hap.c +++ b/xen/arch/x86/mm/hap/nested_hap.c @@ -58,12 +58,7 @@ /* NESTED VIRT P2M FUNCTIONS */ /********************************************/ =20 -void cf_check -nestedp2m_write_p2m_entry_post(struct p2m_domain *p2m, unsigned int oflags) -{ - if ( oflags & _PAGE_PRESENT ) - guest_flush_tlb_mask(p2m->domain, p2m->dirty_cpumask); -} +/* None */ =20 /********************************************/ /* NESTED VIRT FUNCTIONS */ diff --git a/xen/arch/x86/mm/nested.c b/xen/arch/x86/mm/nested.c index 03741ffae4..ac5d990c6c 100644 --- a/xen/arch/x86/mm/nested.c +++ b/xen/arch/x86/mm/nested.c @@ -38,7 +38,7 @@ int p2m_init_nestedp2m(struct domain *d) } p2m->p2m_class =3D p2m_nested; p2m->write_p2m_entry_pre =3D NULL; - p2m->write_p2m_entry_post =3D nestedp2m_write_p2m_entry_post; + p2m->write_p2m_entry_post =3D NULL; list_add(&p2m->np2m_list, &p2m_get_hostp2m(d)->np2m_list); } =20 diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c index 1fea3884be..24918d09e6 100644 --- a/xen/arch/x86/mm/p2m-pt.c +++ b/xen/arch/x86/mm/p2m-pt.c @@ -941,7 +941,7 @@ static void cf_check p2m_pt_change_entry_type_global( { l1_pgentry_t *tab; unsigned long gfn =3D 0; - unsigned int i, changed; + unsigned int i; const struct domain *d =3D p2m->domain; =20 if ( pagetable_get_pfn(p2m_get_pagetable(p2m)) =3D=3D 0 ) @@ -950,7 +950,7 @@ static void cf_check p2m_pt_change_entry_type_global( ASSERT(hap_enabled(d)); =20 tab =3D map_domain_page(pagetable_get_mfn(p2m_get_pagetable(p2m))); - for ( changed =3D i =3D 0; i < (1 << PAGETABLE_ORDER); ++i ) + for ( i =3D 0; i < (1 << PAGETABLE_ORDER); ++i ) { l1_pgentry_t e =3D tab[i]; =20 @@ -966,14 +966,10 @@ static void cf_check p2m_pt_change_entry_type_global( ASSERT_UNREACHABLE(); break; } - ++changed; } gfn +=3D 1UL << (L4_PAGETABLE_SHIFT - PAGE_SHIFT); } unmap_domain_page(tab); - - if ( changed ) - guest_flush_tlb_mask(d, d->dirty_cpumask); } =20 static int cf_check p2m_pt_change_entry_type_range( @@ -1185,5 +1181,3 @@ void p2m_pt_init(struct p2m_domain *p2m) p2m->audit_p2m =3D p2m_pt_audit_p2m; #endif } - - diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 98f8272270..bbdc20cbd9 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -2187,8 +2187,6 @@ void p2m_log_dirty_range(struct domain *d, unsigned l= ong begin_pfn, dirty_bitmap[i >> 3] |=3D (1 << (i & 7)); =20 p2m_unlock(p2m); - - guest_flush_tlb_mask(d, d->dirty_cpumask); } =20 /* --=20 2.51.2 -- Teddy Astie | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech