|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] [XEN] Multi-processor guests need to be m
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 7713276d159e85bb2339e305560c80ed27172b7a
# Parent e23961a8ce7eeffee8fb94c199818a5361f75639
[XEN] Multi-processor guests need to be more conservative when
doing batched writable-pagetable work.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/mm.c | 30 ++++++++++++++++++++----------
1 files changed, 20 insertions(+), 10 deletions(-)
diff -r e23961a8ce7e -r 7713276d159e xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Sun Jun 18 19:24:00 2006 +0100
+++ b/xen/arch/x86/mm.c Sun Jun 18 19:44:13 2006 +0100
@@ -3565,17 +3565,27 @@ int ptwr_do_page_fault(struct domain *d,
}
/*
- * If this is a multi-processor guest then ensure that the page is hooked
- * into at most one L2 table, which must be the one running on this VCPU.
+ * Multi-processor guest? Then ensure that the page table is hooked into
+ * at most one L2, and also ensure that there is only one mapping of the
+ * page table itself (or there can be conflicting writable mappings from
+ * other VCPUs).
*/
- if ( (d->vcpu[0]->next_in_list != NULL) &&
- ((page->u.inuse.type_info & PGT_count_mask) !=
- (!!(page->u.inuse.type_info & PGT_pinned) +
- (which == PTWR_PT_ACTIVE))) )
- {
- /* Could be conflicting writable mappings from other VCPUs. */
- cleanup_writable_pagetable(d);
- goto emulate;
+ if ( d->vcpu[0]->next_in_list != NULL )
+ {
+ if ( /* Hooked into at most one L2 table (which this VCPU maps)? */
+ ((page->u.inuse.type_info & PGT_count_mask) !=
+ (!!(page->u.inuse.type_info & PGT_pinned) +
+ (which == PTWR_PT_ACTIVE))) ||
+ /* PTEs are mapped read-only in only one place? */
+ ((page->count_info & PGC_count_mask) !=
+ (!!(page->count_info & PGC_allocated) + /* alloc count */
+ (page->u.inuse.type_info & PGT_count_mask) + /* type count */
+ 1)) ) /* map count */
+ {
+ /* Could be conflicting writable mappings from other VCPUs. */
+ cleanup_writable_pagetable(d);
+ goto emulate;
+ }
}
/*
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] [XEN] Multi-processor guests need to be more conservative when,
Xen patchbot-unstable <=
|
|
|
|
|