mirror of https://github.com/xemu-project/xemu.git
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…
Reference in New Issue