@ -1302,9 +1302,9 @@ static void phys_sections_free(PhysPageMap *map)
g_free ( map - > nodes ) ;
}
static void register_subpage ( FlatView * fv , AddressSpaceDispatch * d ,
MemoryRegionSection * section )
static void register_subpage ( FlatView * fv , MemoryRegionSection * section )
{
AddressSpaceDispatch * d = flatview_to_dispatch ( fv ) ;
subpage_t * subpage ;
hwaddr base = section - > offset_within_address_space
& TARGET_PAGE_MASK ;
@ -1333,9 +1333,10 @@ static void register_subpage(FlatView *fv, AddressSpaceDispatch *d,
}
static void register_multipage ( AddressSpaceDispatch * d ,
static void register_multipage ( FlatView * fv ,
MemoryRegionSection * section )
{
AddressSpaceDispatch * d = flatview_to_dispatch ( fv ) ;
hwaddr start_addr = section - > offset_within_address_space ;
uint16_t section_index = phys_section_add ( & d - > map , section ) ;
uint64_t num_pages = int128_get64 ( int128_rshift ( section - > size ,
@ -1347,7 +1348,6 @@ static void register_multipage(AddressSpaceDispatch *d,
void mem_add ( FlatView * fv , MemoryRegionSection * section )
{
AddressSpaceDispatch * d = flatview_to_dispatch ( fv ) ;
MemoryRegionSection now = * section , remain = * section ;
Int128 page_size = int128_make64 ( TARGET_PAGE_SIZE ) ;
@ -1356,7 +1356,7 @@ void mem_add(FlatView *fv, MemoryRegionSection *section)
- now . offset_within_address_space ;
now . size = int128_min ( int128_make64 ( left ) , now . size ) ;
register_subpage ( fv , d , & now ) ;
register_subpage ( fv , & now ) ;
} else {
now . size = int128_zero ( ) ;
}
@ -1366,13 +1366,13 @@ void mem_add(FlatView *fv, MemoryRegionSection *section)
remain . offset_within_region + = int128_get64 ( now . size ) ;
now = remain ;
if ( int128_lt ( remain . size , page_size ) ) {
register_subpage ( fv , d , & now ) ;
register_subpage ( fv , & now ) ;
} else if ( remain . offset_within_address_space & ~ TARGET_PAGE_MASK ) {
now . size = page_size ;
register_subpage ( fv , d , & now ) ;
register_subpage ( fv , & now ) ;
} else {
now . size = int128_and ( now . size , int128_neg ( page_size ) ) ;
register_multipage ( d , & now ) ;
register_multipage ( fv , & now ) ;
}
}
}