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

[Xen-changelog] [xen-3.0.5-testing] [IA64] Fix ptc.g race



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1177427244 21600
# Node ID ef5da9ca01711045a9206fcbc884bf11508dde45
# Parent  039daabebad5d3c69fb9497693e8e3fd4fee00c9
[IA64] Fix ptc.g race

If one vcpu is executing ptc.g, while the other vcpu is executing itc,
the VHPT(VTLB) entry which should be purged may unexpectedly survive.
Then issue happens.

Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
 xen/arch/ia64/vmx/vtlb.c |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff -r 039daabebad5 -r ef5da9ca0171 xen/arch/ia64/vmx/vtlb.c
--- a/xen/arch/ia64/vmx/vtlb.c  Fri Apr 13 16:07:48 2007 +0100
+++ b/xen/arch/ia64/vmx/vtlb.c  Tue Apr 24 09:07:24 2007 -0600
@@ -168,6 +168,7 @@ static void vmx_vhpt_insert(thash_cb_t *
     else{
         cch = __alloc_chain(hcb);
     }
+    local_irq_disable();
     *cch = *head;
     head->page_flags=pte;
     head->itir = rr.ps << 2;
@@ -175,6 +176,7 @@ static void vmx_vhpt_insert(thash_cb_t *
     head->next = cch;
     head->len = cch->len+1;
     cch->len = 0;
+    local_irq_enable();
     return;
 }
 
@@ -424,14 +426,14 @@ void vtlb_insert(VCPU *v, u64 pte, u64 i
     else {
         cch = __alloc_chain(hcb);
     }
-    *cch = *hash_table;
-    hash_table->page_flags = pte;
-    hash_table->itir=itir;
-    hash_table->etag=tag;
+    cch->page_flags = pte;
+    cch->itir = itir;
+    cch->etag = tag;
+    cch->next = hash_table->next;
+    wmb();
     hash_table->next = cch;
-    hash_table->len = cch->len + 1;
-    cch->len = 0;
-    return ;
+    hash_table->len += 1;
+    return;
 }
 
 

_______________________________________________
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®.