* [PATCH] nestedhvm: reduce IPIs with nested-on-nested
@ 2011-08-18 10:04 Christoph Egger
2011-08-18 13:16 ` Tim Deegan
0 siblings, 1 reply; 2+ messages in thread
From: Christoph Egger @ 2011-08-18 10:04 UTC (permalink / raw)
To: xen-devel
[-- Attachment #1: Type: text/plain, Size: 665 bytes --]
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 <Christoph.Egger@amd.com>
--
---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
[-- Attachment #2: xen_nh_ipi.diff --]
[-- Type: text/plain, Size: 1028 bytes --]
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);
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] nestedhvm: reduce IPIs with nested-on-nested
2011-08-18 10:04 [PATCH] nestedhvm: reduce IPIs with nested-on-nested Christoph Egger
@ 2011-08-18 13:16 ` Tim Deegan
0 siblings, 0 replies; 2+ messages in thread
From: Tim Deegan @ 2011-08-18 13:16 UTC (permalink / raw)
To: Christoph Egger; +Cc: xen-devel
Hi,
At 12:04 +0200 on 18 Aug (1313669099), Christoph Egger wrote:
> --- 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);
I think you need to flush on all levels, since the TLB can contain
partial walks.
> 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);
This is an unrelated fix and should be in a separate patch.
Cheers,
Tim.
--
Tim Deegan <tim@xen.org>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd. (Company #02937203, SL9 0BG)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-08-18 13:16 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-18 10:04 [PATCH] nestedhvm: reduce IPIs with nested-on-nested Christoph Egger
2011-08-18 13:16 ` Tim Deegan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.