|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v7][PATCH 07/16] hvmloader/e820: construct guest e820 table
>>> On 14.07.15 at 07:22, <tiejun.chen@xxxxxxxxx> wrote:
>>> + for ( i = 0; i < memory_map.nr_map; i++ )
>>> + {
>>> + uint64_t end = e820[i].addr + e820[i].size;
>>
>> Either loop index/boundary or used array are wrong here: In the
>> earlier loop you copied memory_map[0...nr_map-1] to
>> e820[n...n+nr_map-1], but here you're looping looking at
>> e820[0...nr_map-1]
>
> You're right. I should lookup all e820[] like this,
>
> for ( i = 0; i < nr; i++ )
Hmm, I would have thought you only care about either part of
the just glued together map.
>>> + if ( e820[i].type == E820_RAM &&
>>> + low_mem_end > e820[i].addr && low_mem_end < end )
>>
>> Assuming you mean to look at the RDM e820[] entries here, this
>> is not a correct check: You don't care about partly or fully
>> contained, all you care about is whether low_mem_end extends
>> beyond the start of the region.
>
> Here I'm looking at the e820 entry indicating low memory. Because
>
> low_mem_end = hvm_info->low_mem_pgend << PAGE_SHIFT;
>
> and when we allocate MMIO in pci.c, its possible to populate RAM so
> hvm_info->low_mem_pgend would be changed over there. So we need to
> compensate this loss with high memory. Here memory_map[] also records
> the original low/high memory, so if low_mem_end is less-than the
> original we need this compensation.
And I'm not disputing your intentions - I'm merely pointing out that
afaics the code above doesn't match these intentions. In particular
(as said) I don't see why you need to check low_mem_end < end.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |