mirror of
				https://github.com/mborgerson/xemu.git
				synced 2025-10-30 03:31:27 +00:00 
			
		
		
		
	xen: mapcache: Pass the ram_addr offset to xen_map_cache()
Pass the ram_addr offset to xen_map_cache. This is in preparation for adding grant mappings that need to compute the address within the RAMBlock. No functional changes. Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
		
							parent
							
								
									123acd816d
								
							
						
					
					
						commit
						49a7202979
					
				| @ -167,7 +167,8 @@ static void xen_remap_bucket(MapCache *mc, | ||||
|                              void *vaddr, | ||||
|                              hwaddr size, | ||||
|                              hwaddr address_index, | ||||
|                              bool dummy) | ||||
|                              bool dummy, | ||||
|                              ram_addr_t ram_offset) | ||||
| { | ||||
|     uint8_t *vaddr_base; | ||||
|     xen_pfn_t *pfns; | ||||
| @ -266,6 +267,7 @@ static void xen_remap_bucket(MapCache *mc, | ||||
| 
 | ||||
| static uint8_t *xen_map_cache_unlocked(MapCache *mc, | ||||
|                                        hwaddr phys_addr, hwaddr size, | ||||
|                                        ram_addr_t ram_offset, | ||||
|                                        uint8_t lock, bool dma, bool is_write) | ||||
| { | ||||
|     MapCacheEntry *entry, *pentry = NULL, | ||||
| @ -337,14 +339,16 @@ tryagain: | ||||
|     if (!entry) { | ||||
|         entry = g_new0(MapCacheEntry, 1); | ||||
|         pentry->next = entry; | ||||
|         xen_remap_bucket(mc, entry, NULL, cache_size, address_index, dummy); | ||||
|         xen_remap_bucket(mc, entry, NULL, cache_size, address_index, dummy, | ||||
|                          ram_offset); | ||||
|     } else if (!entry->lock) { | ||||
|         if (!entry->vaddr_base || entry->paddr_index != address_index || | ||||
|                 entry->size != cache_size || | ||||
|                 !test_bits(address_offset >> XC_PAGE_SHIFT, | ||||
|                     test_bit_size >> XC_PAGE_SHIFT, | ||||
|                     entry->valid_mapping)) { | ||||
|             xen_remap_bucket(mc, entry, NULL, cache_size, address_index, dummy); | ||||
|             xen_remap_bucket(mc, entry, NULL, cache_size, address_index, dummy, | ||||
|                              ram_offset); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -391,13 +395,15 @@ tryagain: | ||||
| 
 | ||||
| uint8_t *xen_map_cache(MemoryRegion *mr, | ||||
|                        hwaddr phys_addr, hwaddr size, | ||||
|                        ram_addr_t ram_addr_offset, | ||||
|                        uint8_t lock, bool dma, | ||||
|                        bool is_write) | ||||
| { | ||||
|     uint8_t *p; | ||||
| 
 | ||||
|     mapcache_lock(mapcache); | ||||
|     p = xen_map_cache_unlocked(mapcache, phys_addr, size, lock, dma, is_write); | ||||
|     p = xen_map_cache_unlocked(mapcache, phys_addr, size, ram_addr_offset, | ||||
|                                lock, dma, is_write); | ||||
|     mapcache_unlock(mapcache); | ||||
|     return p; | ||||
| } | ||||
| @ -632,7 +638,7 @@ static uint8_t *xen_replace_cache_entry_unlocked(MapCache *mc, | ||||
|     trace_xen_replace_cache_entry_dummy(old_phys_addr, new_phys_addr); | ||||
| 
 | ||||
|     xen_remap_bucket(mc, entry, entry->vaddr_base, | ||||
|                      cache_size, address_index, false); | ||||
|                      cache_size, address_index, false, old_phys_addr); | ||||
|     if (!test_bits(address_offset >> XC_PAGE_SHIFT, | ||||
|                 test_bit_size >> XC_PAGE_SHIFT, | ||||
|                 entry->valid_mapping)) { | ||||
|  | ||||
| @ -19,6 +19,7 @@ typedef hwaddr (*phys_offset_to_gaddr_t)(hwaddr phys_offset, | ||||
| void xen_map_cache_init(phys_offset_to_gaddr_t f, | ||||
|                         void *opaque); | ||||
| uint8_t *xen_map_cache(MemoryRegion *mr, hwaddr phys_addr, hwaddr size, | ||||
|                        ram_addr_t ram_addr_offset, | ||||
|                        uint8_t lock, bool dma, | ||||
|                        bool is_write); | ||||
| ram_addr_t xen_ram_addr_from_mapcache(void *ptr); | ||||
| @ -37,6 +38,7 @@ static inline void xen_map_cache_init(phys_offset_to_gaddr_t f, | ||||
| static inline uint8_t *xen_map_cache(MemoryRegion *mr, | ||||
|                                      hwaddr phys_addr, | ||||
|                                      hwaddr size, | ||||
|                                      ram_addr_t ram_addr_offset, | ||||
|                                      uint8_t lock, | ||||
|                                      bool dma, | ||||
|                                      bool is_write) | ||||
|  | ||||
| @ -2231,13 +2231,14 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr, | ||||
|          */ | ||||
|         if (xen_mr_is_memory(block->mr)) { | ||||
|             return xen_map_cache(block->mr, block->offset + addr, | ||||
|                                  len, lock, lock, | ||||
|                                  is_write); | ||||
|                                  len, block->offset, | ||||
|                                  lock, lock, is_write); | ||||
|         } | ||||
| 
 | ||||
|         block->host = xen_map_cache(block->mr, block->offset, | ||||
|                                     block->max_length, 1, | ||||
|                                     lock, is_write); | ||||
|                                     block->max_length, | ||||
|                                     block->offset, | ||||
|                                     1, lock, is_write); | ||||
|     } | ||||
| 
 | ||||
|     return ramblock_ptr(block, addr); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user