aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorEdgar E. Iglesias <edgar.iglesias@amd.com>2024-04-29 19:12:42 +0200
committerEdgar E. Iglesias <edgar.iglesias@amd.com>2024-06-09 20:16:14 +0200
commit123acd816dccbd358570ec7ab79c5cb2c863780b (patch)
tree4a93e46cc9c546f455c4376b5af21db6240381dc /hw
parentb771b026d8495feea8c3b7aee43ee2084102e3b4 (diff)
downloadqemu-123acd816dccbd358570ec7ab79c5cb2c863780b.zip
qemu-123acd816dccbd358570ec7ab79c5cb2c863780b.tar.gz
qemu-123acd816dccbd358570ec7ab79c5cb2c863780b.tar.bz2
xen: mapcache: Unmap first entries in buckets
When invalidating memory ranges, if we happen to hit the first entry in a bucket we were never unmapping it. This was harmless for foreign mappings but now that we're looking to reuse the mapcache for transient grant mappings, we must unmap entries when invalidated. Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/xen/xen-mapcache.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/hw/xen/xen-mapcache.c b/hw/xen/xen-mapcache.c
index bc860f4..ec95445 100644
--- a/hw/xen/xen-mapcache.c
+++ b/hw/xen/xen-mapcache.c
@@ -491,18 +491,23 @@ static void xen_invalidate_map_cache_entry_unlocked(MapCache *mc,
return;
}
entry->lock--;
- if (entry->lock > 0 || pentry == NULL) {
+ if (entry->lock > 0) {
return;
}
- pentry->next = entry->next;
ram_block_notify_remove(entry->vaddr_base, entry->size, entry->size);
if (munmap(entry->vaddr_base, entry->size) != 0) {
perror("unmap fails");
exit(-1);
}
+
g_free(entry->valid_mapping);
- g_free(entry);
+ if (pentry) {
+ pentry->next = entry->next;
+ g_free(entry);
+ } else {
+ memset(entry, 0, sizeof *entry);
+ }
}
typedef struct XenMapCacheData {