|
|
|
|
|
|
|
|
|
|
xen-devel
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
Message not available
- [Xen-devel] RE: [Question] Why code differs in construct_dom0?,
Shan, Haitao <=
|
|
|
|
|