[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] fix domain_flush_vtlb_all()



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 72caf2612e526b09e8d57ffd526d9b4ae7ea0d13
# Parent  37c8b562a8f10c1f3b59db07e11def70cc2e9e1a
[IA64] fix domain_flush_vtlb_all()

It should purge software tlb entry of specified vcpu, not current.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 xen/arch/ia64/xen/vcpu.c        |    2 +-
 xen/arch/ia64/xen/vhpt.c        |   20 +++++++++++---------
 xen/include/asm-ia64/tlbflush.h |    2 +-
 3 files changed, 13 insertions(+), 11 deletions(-)

diff -r 37c8b562a8f1 -r 72caf2612e52 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Wed Jul 05 09:59:40 2006 -0600
+++ b/xen/arch/ia64/xen/vcpu.c  Wed Jul 05 10:03:20 2006 -0600
@@ -2065,7 +2065,7 @@ IA64FAULT vcpu_ptc_e(VCPU *vcpu, UINT64 
        // architected loop to purge the entire TLB, should use
        //  base = stride1 = stride2 = 0, count0 = count 1 = 1
 
-       vcpu_flush_vtlb_all ();
+       vcpu_flush_vtlb_all(current);
 
        return IA64_NO_FAULT;
 }
diff -r 37c8b562a8f1 -r 72caf2612e52 xen/arch/ia64/xen/vhpt.c
--- a/xen/arch/ia64/xen/vhpt.c  Wed Jul 05 09:59:40 2006 -0600
+++ b/xen/arch/ia64/xen/vhpt.c  Wed Jul 05 10:03:20 2006 -0600
@@ -129,10 +129,8 @@ void vhpt_init(void)
 }
 
 
-void vcpu_flush_vtlb_all (void)
-{
-       struct vcpu *v = current;
-
+void vcpu_flush_vtlb_all(struct vcpu *v)
+{
        /* First VCPU tlb.  */
        vcpu_purge_tr_entry(&PSCBX(v,dtlb));
        vcpu_purge_tr_entry(&PSCBX(v,itlb));
@@ -148,6 +146,11 @@ void vcpu_flush_vtlb_all (void)
           check this.  */
 }
 
+static void __vcpu_flush_vtlb_all(void *vcpu)
+{
+       vcpu_flush_vtlb_all((struct vcpu*)vcpu);
+}
+
 void domain_flush_vtlb_all (void)
 {
        int cpu = smp_processor_id ();
@@ -158,12 +161,11 @@ void domain_flush_vtlb_all (void)
                        continue;
 
                if (v->processor == cpu)
-                       vcpu_flush_vtlb_all ();
+                       vcpu_flush_vtlb_all(v);
                else
-                       smp_call_function_single
-                               (v->processor,
-                                (void(*)(void *))vcpu_flush_vtlb_all,
-                                NULL,1,1);
+                       smp_call_function_single(v->processor,
+                                                __vcpu_flush_vtlb_all,
+                                                v, 1, 1);
        }
 }
 
diff -r 37c8b562a8f1 -r 72caf2612e52 xen/include/asm-ia64/tlbflush.h
--- a/xen/include/asm-ia64/tlbflush.h   Wed Jul 05 09:59:40 2006 -0600
+++ b/xen/include/asm-ia64/tlbflush.h   Wed Jul 05 10:03:20 2006 -0600
@@ -11,7 +11,7 @@
 */
 
 /* Local all flush of vTLB.  */
-void vcpu_flush_vtlb_all (void);
+void vcpu_flush_vtlb_all(struct vcpu *v);
 
 /* Local range flush of machine TLB only (not full VCPU virtual TLB!!!)  */
 void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.