Skip to content
  • Paolo Bonzini's avatar
    exec: reorganize address_space_map · e3127ae0
    Paolo Bonzini authored
    
    
    First of all, rename "todo" to "done".
    
    Second, clearly separate the case of done == 0 with the case of done != 0.
    This will help handling reference counting in the next patch.
    
    Third, this test:
    
                 if (memory_region_get_ram_addr(mr) + xlat != raddr + todo) {
    
    does not guarantee that the memory region is the same across two iterations
    of the while loop.  For example, you could have two blocks:
    
    A) size 640 K, mapped at physical address 0, ram_addr_t 0
    B) size 64 K, mapped at physical address 0xa0000, ram_addr_t 0xa0000
    
    then mapping 1 M starting at physical address zero will erroneously treat
    B as the continuation of block A.  qemu_ram_ptr_length ensures that no
    invalid memory is accessed, but it is still a pointless complication of
    the algorithm.  The patch makes the logic clearer with an explicit test
    that the memory region is the same.
    
    Reviewed-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e3127ae0