Browse Source

physmem: xen: Conditionalize use of the mapcache

Conditionalize use of the mapcache. This is in preparation
to optionally disable the mapcache at runtime.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Acked-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
master
Edgar E. Iglesias 8 months ago
parent
commit
c1d78ba63c
  1. 14
      system/physmem.c

14
system/physmem.c

@ -578,7 +578,9 @@ MemoryRegion *flatview_translate(FlatView *fv, hwaddr addr, hwaddr *xlat,
is_write, true, &as, attrs);
mr = section.mr;
if (xen_enabled() && memory_access_is_direct(mr, is_write, attrs)) {
if (xen_map_cache_enabled() &&
memory_access_is_direct(mr, is_write, attrs)) {
/* mapcache: Next page may be unmapped or in a different bucket/VA. */
hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
*plen = MIN(page, *plen);
}
@ -2577,7 +2579,7 @@ static void reclaim_ramblock(RAMBlock *block)
{
if (block->flags & RAM_PREALLOC) {
;
} else if (xen_enabled()) {
} else if (xen_map_cache_enabled()) {
xen_invalidate_map_cache_entry(block->host);
#if !defined(_WIN32) && !defined(EMSCRIPTEN)
} else if (block->fd >= 0) {
@ -2736,7 +2738,7 @@ static void *qemu_ram_ptr_length(RAMBlock *block, ram_addr_t addr,
len = *size;
}
if (xen_enabled() && block->host == NULL) {
if (xen_map_cache_enabled() && block->host == NULL) {
/* We need to check if the requested address is in the RAM
* because we don't want to map the entire memory in QEMU.
* In that case just map the requested area.
@ -2785,7 +2787,7 @@ RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset,
RAMBlock *block;
uint8_t *host = ptr;
if (xen_enabled()) {
if (xen_map_cache_enabled()) {
ram_addr_t ram_addr;
RCU_READ_LOCK_GUARD();
ram_addr = xen_ram_addr_from_mapcache(ptr);
@ -3787,7 +3789,7 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
if (is_write) {
invalidate_and_set_dirty(mr, addr1, access_len);
}
if (xen_enabled()) {
if (xen_map_cache_enabled()) {
xen_invalidate_map_cache_entry(buffer);
}
memory_region_unref(mr);
@ -3898,7 +3900,7 @@ void address_space_cache_destroy(MemoryRegionCache *cache)
return;
}
if (xen_enabled()) {
if (xen_map_cache_enabled()) {
xen_invalidate_map_cache_entry(cache->ptr);
}
memory_region_unref(cache->mrs.mr);

Loading…
Cancel
Save