mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-16 01:03:31 +00:00
libvhost-user: Factor out removing all mem regions
Let's factor it out. Note that the check for MAP_FAILED was wrong as we never set mmap_addr if mmap() failed. We'll remove the NULL check separately. Reviewed-by: Raphael Norwitz <raphael@enfabrica.net> Acked-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20240214151701.29906-4-david@redhat.com> Tested-by: Mario Casquero <mcasquer@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
0fa6344c90
commit
bec5820908
|
@ -240,6 +240,22 @@ qva_to_va(VuDev *dev, uint64_t qemu_addr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vu_remove_all_mem_regs(VuDev *dev)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < dev->nregions; i++) {
|
||||||
|
VuDevRegion *r = &dev->regions[i];
|
||||||
|
void *ma = (void *)(uintptr_t)r->mmap_addr;
|
||||||
|
|
||||||
|
if (ma) {
|
||||||
|
munmap(ma, r->size + r->mmap_offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dev->nregions = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vmsg_close_fds(VhostUserMsg *vmsg)
|
vmsg_close_fds(VhostUserMsg *vmsg)
|
||||||
{
|
{
|
||||||
|
@ -1003,14 +1019,7 @@ vu_set_mem_table_exec(VuDev *dev, VhostUserMsg *vmsg)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
VhostUserMemory m = vmsg->payload.memory, *memory = &m;
|
VhostUserMemory m = vmsg->payload.memory, *memory = &m;
|
||||||
|
|
||||||
for (i = 0; i < dev->nregions; i++) {
|
vu_remove_all_mem_regs(dev);
|
||||||
VuDevRegion *r = &dev->regions[i];
|
|
||||||
void *ma = (void *) (uintptr_t) r->mmap_addr;
|
|
||||||
|
|
||||||
if (ma) {
|
|
||||||
munmap(ma, r->size + r->mmap_offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dev->nregions = memory->nregions;
|
dev->nregions = memory->nregions;
|
||||||
|
|
||||||
if (dev->postcopy_listening) {
|
if (dev->postcopy_listening) {
|
||||||
|
@ -2112,14 +2121,7 @@ vu_deinit(VuDev *dev)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < dev->nregions; i++) {
|
vu_remove_all_mem_regs(dev);
|
||||||
VuDevRegion *r = &dev->regions[i];
|
|
||||||
void *m = (void *) (uintptr_t) r->mmap_addr;
|
|
||||||
if (m != MAP_FAILED) {
|
|
||||||
munmap(m, r->size + r->mmap_offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dev->nregions = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < dev->max_queues; i++) {
|
for (i = 0; i < dev->max_queues; i++) {
|
||||||
VuVirtq *vq = &dev->vq[i];
|
VuVirtq *vq = &dev->vq[i];
|
||||||
|
|
Loading…
Reference in a new issue