All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.