|
|
|
|
|
|
|
|
|
|
xen-changelog
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-3.0.5-testing] [IA64] Fix ptc.g race,
Xen patchbot-3.0.5-testing <=
|
|
|
|
|