mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Introduce qemu_put_ram_ptr
This function allows to unlock a ram_ptr give by qemu_get_ram_ptr. After a call to qemu_put_ram_ptr, the pointer may be unmap from QEMU when used with Xen. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Alexander Graf <agraf@suse.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
ea6c5f8ffe
commit
050a0ddf39
4 changed files with 72 additions and 3 deletions
|
@ -196,6 +196,39 @@ uint8_t *qemu_map_cache(target_phys_addr_t phys_addr, target_phys_addr_t size, u
|
|||
return mapcache->last_address_vaddr + address_offset;
|
||||
}
|
||||
|
||||
void qemu_map_cache_unlock(void *buffer)
|
||||
{
|
||||
MapCacheEntry *entry = NULL, *pentry = NULL;
|
||||
MapCacheRev *reventry;
|
||||
target_phys_addr_t paddr_index;
|
||||
int found = 0;
|
||||
|
||||
QTAILQ_FOREACH(reventry, &mapcache->locked_entries, next) {
|
||||
if (reventry->vaddr_req == buffer) {
|
||||
paddr_index = reventry->paddr_index;
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
return;
|
||||
}
|
||||
QTAILQ_REMOVE(&mapcache->locked_entries, reventry, next);
|
||||
qemu_free(reventry);
|
||||
|
||||
entry = &mapcache->entry[paddr_index % mapcache->nr_buckets];
|
||||
while (entry && entry->paddr_index != paddr_index) {
|
||||
pentry = entry;
|
||||
entry = entry->next;
|
||||
}
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
if (entry->lock > 0) {
|
||||
entry->lock--;
|
||||
}
|
||||
}
|
||||
|
||||
ram_addr_t qemu_ram_addr_from_mapcache(void *ptr)
|
||||
{
|
||||
MapCacheRev *reventry;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue