[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: don't use destroy_xen_mappings() for vunmap()
On 17/07/2013 08:17, "Jan Beulich" <JBeulich@xxxxxxxx> wrote: > Its attempt to tear down intermediate page table levels may race with > map_pages_to_xen() establishing them, and now that > map_domain_page_global() is backed by vmap() this teardown is also > wasteful (as it's very likely to need the same address space populated > again within foreseeable time). > > As the race between vmap() and vunmap(), according to the latest stage > tester logs, doesn't appear to be the only one still left, the patch > also adds logging for vmap() and vunmap() uses (there shouldn't be too > many of them, so logs shouldn't get flooded). These are supposed to > get removed (and are made stand out clearly) as soon as we're certain > that there's no issue left. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> > --- a/xen/common/vmap.c > +++ b/xen/common/vmap.c > @@ -177,6 +177,7 @@ void *__vmap(const unsigned long *mfn, u > void *va = vm_alloc(nr * granularity, align); > unsigned long cur = (unsigned long)va; > > +printk("vmap(%p:%#x)\n", va, nr * granularity);//temp > for ( ; va && nr--; ++mfn, cur += PAGE_SIZE * granularity ) > { > if ( map_pages_to_xen(cur, *mfn, granularity, flags) ) > @@ -196,9 +197,14 @@ void *vmap(const unsigned long *mfn, uns > > void vunmap(const void *va) > { > +#ifndef _PAGE_NONE > unsigned long addr = (unsigned long)va; > > destroy_xen_mappings(addr, addr + PAGE_SIZE * vm_size(va)); > +#else /* Avoid tearing down intermediate page tables. */ > +printk("vunmap(%p:%#x)\n", va, vm_size(va));//temp > + map_pages_to_xen((unsigned long)va, 0, vm_size(va), _PAGE_NONE); > +#endif > vm_free(va); > } > #endif > --- a/xen/include/asm-x86/page.h > +++ b/xen/include/asm-x86/page.h > @@ -288,6 +288,7 @@ extern l1_pgentry_t l1_identmap[L1_PAGET > void paging_init(void); > #endif /* !defined(__ASSEMBLY__) */ > > +#define _PAGE_NONE _AC(0x000,U) > #define _PAGE_PRESENT _AC(0x001,U) > #define _PAGE_RW _AC(0x002,U) > #define _PAGE_USER _AC(0x004,U) > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |