Commit 29cb533d authored by Fam Zheng's avatar Fam Zheng Committed by Paolo Bonzini
Browse files

exec: Factor out section_covers_addr



This will be shared by the next patch.

Also add a comment explaining the unobvious condition on "size.hi".

Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Message-Id: <1456813104-25902-7-git-send-email-famz@redhat.com>
[Small change to the comment. - Paolo]
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent f1060c55
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -307,6 +307,17 @@ static void phys_page_compact_all(AddressSpaceDispatch *d, int nodes_nb)
    }
}

static inline bool section_covers_addr(const MemoryRegionSection *section,
                                       hwaddr addr)
{
    /* Memory topology clips a memory region to [0, 2^64); size.hi > 0 means
     * the section must cover the entire address space.
     */
    return section->size.hi ||
           range_covers_byte(section->offset_within_address_space,
                             section->size.lo, addr);
}

static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
                                           Node *nodes, MemoryRegionSection *sections)
{
@@ -322,9 +333,7 @@ static MemoryRegionSection *phys_page_find(PhysPageEntry lp, hwaddr addr,
        lp = p[(index >> (i * P_L2_BITS)) & (P_L2_SIZE - 1)];
    }

    if (sections[lp.ptr].size.hi ||
        range_covers_byte(sections[lp.ptr].offset_within_address_space,
                          sections[lp.ptr].size.lo, addr)) {
    if (section_covers_addr(&sections[lp.ptr], addr)) {
        return &sections[lp.ptr];
    } else {
        return &sections[PHYS_SECTION_UNASSIGNED];