memory: unify PhysPageEntry::node and ::leaf
They have the same type, unify them. Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
		
							parent
							
								
									2999097bf1
								
							
						
					
					
						commit
						c19e8800d4
					
				
							
								
								
									
										38
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								exec.c
									
									
									
									
									
								
							| @ -193,10 +193,8 @@ static unsigned phys_sections_nb, phys_sections_nb_alloc; | ||||
| static uint16_t phys_section_unassigned; | ||||
| 
 | ||||
| struct PhysPageEntry { | ||||
|     union { | ||||
|         uint16_t leaf; /* index into phys_sections */ | ||||
|         uint16_t node; /* index into phys_map_nodes */ | ||||
|     } u; | ||||
|      /* index into phys_sections (last level) or phys_map_nodes (others) */ | ||||
|     uint16_t ptr; | ||||
| }; | ||||
| 
 | ||||
| /* Simple allocator for PhysPageEntry nodes */ | ||||
| @ -207,7 +205,7 @@ static unsigned phys_map_nodes_nb, phys_map_nodes_nb_alloc; | ||||
| 
 | ||||
| /* This is a multi-level map on the physical address space.
 | ||||
|    The bottom level has pointers to MemoryRegionSections.  */ | ||||
| static PhysPageEntry phys_map = { .u.node = PHYS_MAP_NODE_NIL }; | ||||
| static PhysPageEntry phys_map = { .ptr = PHYS_MAP_NODE_NIL }; | ||||
| 
 | ||||
| static void io_mem_init(void); | ||||
| static void memory_map_init(void); | ||||
| @ -425,7 +423,7 @@ static uint16_t phys_map_node_alloc(void) | ||||
|     assert(ret != PHYS_MAP_NODE_NIL); | ||||
|     assert(ret != phys_map_nodes_nb_alloc); | ||||
|     for (i = 0; i < L2_SIZE; ++i) { | ||||
|         phys_map_nodes[ret][i].u.node = PHYS_MAP_NODE_NIL; | ||||
|         phys_map_nodes[ret][i].ptr = PHYS_MAP_NODE_NIL; | ||||
|     } | ||||
|     return ret; | ||||
| } | ||||
| @ -443,22 +441,22 @@ static void phys_page_set_level(PhysPageEntry *lp, target_phys_addr_t *index, | ||||
|     PhysPageEntry *p; | ||||
|     int i; | ||||
| 
 | ||||
|     if (lp->u.node == PHYS_MAP_NODE_NIL) { | ||||
|         lp->u.node = phys_map_node_alloc(); | ||||
|         p = phys_map_nodes[lp->u.node]; | ||||
|     if (lp->ptr == PHYS_MAP_NODE_NIL) { | ||||
|         lp->ptr = phys_map_node_alloc(); | ||||
|         p = phys_map_nodes[lp->ptr]; | ||||
|         if (level == 0) { | ||||
|             for (i = 0; i < L2_SIZE; i++) { | ||||
|                 p[i].u.leaf = phys_section_unassigned; | ||||
|                 p[i].ptr = phys_section_unassigned; | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|         p = phys_map_nodes[lp->u.node]; | ||||
|         p = phys_map_nodes[lp->ptr]; | ||||
|     } | ||||
|     lp = &p[(*index >> (level * L2_BITS)) & (L2_SIZE - 1)]; | ||||
| 
 | ||||
|     while (*nb && lp < &p[L2_SIZE]) { | ||||
|         if (level == 0) { | ||||
|             lp->u.leaf = leaf; | ||||
|             lp->ptr = leaf; | ||||
|             ++*index; | ||||
|             --*nb; | ||||
|         } else { | ||||
| @ -487,14 +485,14 @@ static MemoryRegionSection phys_page_find(target_phys_addr_t index) | ||||
|     uint16_t s_index = phys_section_unassigned; | ||||
| 
 | ||||
|     for (i = P_L2_LEVELS - 1; i >= 0; i--) { | ||||
|         if (lp.u.node == PHYS_MAP_NODE_NIL) { | ||||
|         if (lp.ptr == PHYS_MAP_NODE_NIL) { | ||||
|             goto not_found; | ||||
|         } | ||||
|         p = phys_map_nodes[lp.u.node]; | ||||
|         p = phys_map_nodes[lp.ptr]; | ||||
|         lp = p[(index >> (i * L2_BITS)) & (L2_SIZE - 1)]; | ||||
|     } | ||||
| 
 | ||||
|     s_index = lp.u.leaf; | ||||
|     s_index = lp.ptr; | ||||
| not_found: | ||||
|     section = phys_sections[s_index]; | ||||
|     index <<= TARGET_PAGE_BITS; | ||||
| @ -2576,19 +2574,19 @@ static void destroy_l2_mapping(PhysPageEntry *lp, unsigned level) | ||||
|     unsigned i; | ||||
|     PhysPageEntry *p; | ||||
| 
 | ||||
|     if (lp->u.node == PHYS_MAP_NODE_NIL) { | ||||
|     if (lp->ptr == PHYS_MAP_NODE_NIL) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     p = phys_map_nodes[lp->u.node]; | ||||
|     p = phys_map_nodes[lp->ptr]; | ||||
|     for (i = 0; i < L2_SIZE; ++i) { | ||||
|         if (level > 0) { | ||||
|             destroy_l2_mapping(&p[i], level - 1); | ||||
|         } else { | ||||
|             destroy_page_desc(p[i].u.leaf); | ||||
|             destroy_page_desc(p[i].ptr); | ||||
|         } | ||||
|     } | ||||
|     lp->u.node = PHYS_MAP_NODE_NIL; | ||||
|     lp->ptr = PHYS_MAP_NODE_NIL; | ||||
| } | ||||
| 
 | ||||
| static void destroy_all_mappings(void) | ||||
| @ -3575,7 +3573,7 @@ static void core_begin(MemoryListener *listener) | ||||
| { | ||||
|     destroy_all_mappings(); | ||||
|     phys_sections_clear(); | ||||
|     phys_map.u.node = PHYS_MAP_NODE_NIL; | ||||
|     phys_map.ptr = PHYS_MAP_NODE_NIL; | ||||
|     phys_section_unassigned = dummy_section(&io_mem_unassigned); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Avi Kivity
						Avi Kivity