nestedhvm: reduce IPIs with nested-on-nested
PATCH 1/1 nestedhvm: reduce IPIs with nested-on-nested
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.
Signature · 6 lines
---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
xen/arch/x86/mm/hap/nested_hap.c +4 -2
@@ -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); }
xen/arch/x86/mm/p2m.c +0 -1
@@ -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);
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Hi,
xen/arch/x86/mm/hap/nested_hap.c nestedp2m_write_p2m_entry(struct p2m_dom · line 92
Quoted 12 lines · Christoph Egger
xen/arch/x86/mm/hap/nested_hap.c +4
-2@@ -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);
I think you need to flush on all levels, since the TLB can contain partial walks.
xen/arch/x86/mm/p2m.c p2m_get_nestedp2m(struct vcpu *v, uint64 · line 1167
Quoted 11 lines
xen/arch/x86/mm/hap/nested_hap.c +0
-0paging_unlock (d); }diff -r
ce4768a78051xen/arch/x86/mm/p2m.cxen/arch/x86/mm/p2m.c +0
-1@@ -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);
This is an unrelated fix and should be in a separate patch.
Cheers,
Tim.
Signature · 3 lines
Tim Deegan <[email protected]> Principal Software Engineer, Xen Platform Team Citrix Systems UK Ltd. (Company #02937203, SL9 0BG)