On 07/20/2015 03:06 PM, Chen, Tiejun wrote:
>>>> +/* Find the lowest RMRR higher than base. */
>>>> +static int find_next_rmrr(uint32_t base)
>>>> +{
>>>> +    unsigned int i;
>>>> +    int next_rmrr = -1;
>>>> +    uint64_t min_base = (1ull << 32);
>>>> +
>>>> +    for ( i = 0; i < memory_map.nr_map ; i++ )
>>>> +    {
>>>> +        if ( memory_map.map[i].type == E820_RESERVED &&
>>>> +             memory_map.map[i].addr > base &&
>>>> +             memory_map.map[i].addr < min_base )
>>>> +        {
>>>> +            next_rmrr = i;
>>>> +            min_base = memory_map.map[i].addr;
>>>> +        }
>>>> +    }
>>>> +    return next_rmrr;
>>>> +}
>>>
>>> Considering _both_ callers, I think the function should actually return
>>> the lowest RMRR higher than or equal to base.
>>
>> You mean instead of strictly greater than the base.
>>
>>> Or wait - we actually
>>> need to find the lowest RMRR the _end_ of which is higher than base.
>>
>> Yes, you're right: there's always a risk that pci_mem_start will *start*
>> in the middle of a range.  Looking for the next *end* is more robust.
>>
> 
> Sorry this is not very clear to me so are you saying something like this?
> 
>     for ( i = 0; i < memory_map.nr_map ; i++ )
>     {
>         end = memory_map.map[i].addr + memory_map.map[i].size;
> 
>         if ( memory_map.map[i].type == E820_RESERVED &&
>              end > base &&
>              memory_map.map[i].addr < min_base )
>         {
>             next_rmrr = i;
>             min_base = memory_map.map[i].addr;
>         }
>     }

I think replace min_base with min_end:

         if ( memory_map.map[i].type == E820_RESERVED &&
              end > base &&
              end < min_end )
         {
             next_rmrr = i;
             min_end = end;
         }

Hmm... although I suppose that doesn't catch the possibility of a memory
range crossing the 4G boundary.

 -George

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to