On Mon, Jul 29, 2019 at 09:49:37AM +0200, David Hildenbrand wrote: >On 28.07.19 15:13, Wei Yang wrote: >> The memory-device list built by memory_device_build_list is ordered by >> its address, this means if the tmp range exceed the hinted range, all >> the following range will not overlap with it. >> >> Signed-off-by: Wei Yang <richardw.y...@linux.intel.com> >> --- >> hw/mem/memory-device.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c >> index 413b514586..aea47ab3e8 100644 >> --- a/hw/mem/memory-device.c >> +++ b/hw/mem/memory-device.c >> @@ -180,7 +180,7 @@ static uint64_t memory_device_get_free_addr(MachineState >> *ms, >> range_make_empty(&new); >> break; >> } >> - } else if (!hint) { >> + } else if (!hint || range_lob(&tmp) > range_upb(&new)) { >> break; >> } >> } >> > >Lower bound is inclusive, upper bound is exclusive. Shouldn't this be > >range_lob(&tmp) >= range_upb(&new) >
Per my understanding, a range with start = 0, size = 0x10000, is represented [0, 0xffff] So if I have another range [0xffff, 0x1ffff], they seems to overlap. The range [0x10000, 0x1ffff] doesn't overlap with [0, 0xffff]. My original comparison looks right. Do I miss some point? >Also, I wonder if patch #2 is now really needed? > Hmm... I think you are right. I am afraid without Patch #2, the condition check is not that intuitive. Would this bring some confusion for audience and maintenance? I am not sure the percentage of occurrence when hint is provided, while the generated code for check NULL is less than compare two values. >-- > >Thanks, > >David / dhildenb -- Wei Yang Help you, Help me