[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] RE: [Question] Why code differs in construct_dom0?
I forgot to mention in our configuration we did not specify the dom0_mem. Dom0 was allocated a large portion of the total system memory. Best Regards Haitao Shan Shan, Haitao wrote: > So you mean in the release build we make the mapping discontiguous to > detect possible bugs, while in debug build it is not discontiguous? > > And another question from problems we encountered recently, system > with more than 4G memory installed will crash when X server shutdown. > The reason is: 1> dom0 allocates memory for agp by calling > agp_allocate_memory with GFP_DMA32 set. This implies the pfn comes > from memory lower than 4G, while mfn are likely to be from memory > above 4G. 2> dom0 then call map_pages_to_apg, since the kernel of > handles 32bit gart table, dom0 uses hypercall to change its memory > mappings (xen_create_contiguous_region). Xen will pick proper memory > below 4G and free those from the guest (likely to be from memory > above 4G). 3> As the process goes on. More and more memory below 4G > is return to dom0 while leaving memory above 4G in xen. Finally, > xen's reservation of memory below 4G for DMA are exhausted. This > creates severe problems for us. > > What is your comments on this? Both increase the reservation in Xen > and using contiguous mappings are helpful in this cases. Which one do > you prefer? > > Best Regards > Haitao Shan > > Keir Fraser wrote: >> By deliberately making dom0's p2m mapping discontiguous we can detect >> bugs where dom0 is incorrectly assuming pseudophys contiguous memory >> is machine contiguous. We had nasty bugs of this sort in dom0's >> block layer many years ago. >> >> -- Keir >> >> On 20/11/08 09:07, "Shan, Haitao" <haitao.shan@xxxxxxxxx> wrote: >> >>> Hi, Keir, >>> >>> Please see the code shown below. I don't understand why pfn's >>> definitions are different depending on whether NDEBUG is defined or >>> not. Can you tell me why? >>> >>> while ( pfn < nr_pages ) >>> { >>> if ( (page = alloc_chunk(d, nr_pages - d->tot_pages)) == >>> NULL ) panic("Not enough RAM for DOM0 reservation.\n"); >>> while ( pfn < d->tot_pages ) >>> { >>> mfn = page_to_mfn(page); >>> #ifndef NDEBUG >>> #define pfn (nr_pages - 1 - (pfn - (alloc_epfn - alloc_spfn))) >>> #endif if ( !is_pv_32on64_domain(d) ) >>> ((unsigned long *)vphysmap_start)[pfn] = mfn; >>> else ((unsigned int *)vphysmap_start)[pfn] = mfn; >>> set_gpfn_from_mfn(mfn, pfn); >>> #undef pfn >>> page++; pfn++; >>> } >>> } >>> >>> Best Regards >>> Haitao Shan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |