On 15/09/2017 10:40, Alexey Kardashevskiy wrote: > + /* > + * FIXME: this is cut-n-paste from address_space_update_topology_pass, > + * simplify it > + */ > + iold = inew = 0; > + while (iold < old_view->nr || inew < new_view->nr) { > + if (iold < old_view->nr) { > + frold = &old_view->ranges[iold]; > + } else { > + frold = NULL; > + } > + if (inew < new_view->nr) { > + frnew = &new_view->ranges[inew]; > + } else { > + frnew = NULL; > + } > + > + if (frold > + && (!frnew > + || int128_lt(frold->addr.start, frnew->addr.start) > + || (int128_eq(frold->addr.start, frnew->addr.start) > + && !flatrange_equal(frold, frnew)))) { > + ++iold; > + } else if (frold && frnew && flatrange_equal(frold, frnew)) { > + /* In both and unchanged (except logging may have changed) */ > + MemoryRegionSection mrs = section_from_flat_range(frnew, as); > + > + mem_add(as, &mrs); > + > + ++iold; > + ++inew; > + } else { > + /* In new */ > + MemoryRegionSection mrs = section_from_flat_range(frnew, as); > + > + mem_add(as, &mrs); > + > + ++inew; > + } > + }
This indeed is just for (i = 0; i < new_view->nr; i++) { MemoryRegionSection mrs = section_from_flat_range(&new_view->ranges[i], as); mem_add(as, &mrs); } :) Paolo