From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Egger Subject: [PATCH] nestedhvm: reduce IPIs with nested-on-nested Date: Thu, 18 Aug 2011 12:04:59 +0200 Message-ID: <4E4CE3CB.4030407@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030801060506070201040300" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --------------030801060506070201040300 Content-Type: text/plain; charset="ISO-8859-15"; format=flowed Content-Transfer-Encoding: 7bit In p2m_get_nestedp2m() there is no need to send IPIs via nestedhvm_vmcx_flushtlb() since p2m_flush_table() already did that. Stop sending IPIs to flush the nested-on-nested pagetable after write operations. Instead flush the TLB only. This fixes an endless loop of nested page faults after adding an entry to the nested-on-nested pagetable. Signed-off-by: Christoph Egger -- ---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632 --------------030801060506070201040300 Content-Type: text/plain; name="xen_nh_ipi.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xen_nh_ipi.diff" Content-Description: xen_nh_ipi.diff diff -r ce4768a78051 xen/arch/x86/mm/hap/nested_hap.c --- a/xen/arch/x86/mm/hap/nested_hap.c Mon Aug 08 11:36:21 2011 +0200 +++ b/xen/arch/x86/mm/hap/nested_hap.c Thu Aug 18 11:54:17 2011 +0200 @@ -86,8 +86,10 @@ nestedp2m_write_p2m_entry(struct p2m_dom old_flags = l1e_get_flags(*p); safe_write_pte(p, new); - if (old_flags & _PAGE_PRESENT) - nestedhvm_vmcx_flushtlb(p2m); + + if ( (old_flags & _PAGE_PRESENT) + && (level == 1 || (level == 2 && (old_flags & _PAGE_PSE))) ) + flush_tlb_mask(&p2m->p2m_dirty_cpumask); paging_unlock(d); } diff -r ce4768a78051 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Mon Aug 08 11:36:21 2011 +0200 +++ b/xen/arch/x86/mm/p2m.c Thu Aug 18 11:54:17 2011 +0200 @@ -1164,7 +1164,6 @@ p2m_get_nestedp2m(struct vcpu *v, uint64 p2m->cr3 = cr3; nv->nv_flushp2m = 0; hvm_asid_flush_vcpu(v); - nestedhvm_vmcx_flushtlb(p2m); cpu_set(v->processor, p2m->p2m_dirty_cpumask); p2m_unlock(p2m); nestedp2m_unlock(d); --------------030801060506070201040300 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------030801060506070201040300--