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>
This commit is contained in:
Edgar E. Iglesias 2024-04-29 19:12:42 +02:00
parent b771b026d8
commit 123acd816d
1 changed files with 8 additions and 3 deletions

View File

@ -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 {