[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |