[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XEN] Multi-processor guests need to be more conservative when
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |