vhost: unmap log memory on cleanup
Fixes memory leak on QEMU migration. Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request") Signed-off-by: Ilya Maximets <i.maximets@samsung.com> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
This commit is contained in:
parent
53af5b1e0a
commit
428261b461
@ -134,6 +134,7 @@ struct virtio_net {
|
||||
char ifname[IF_NAME_SZ];
|
||||
uint64_t log_size;
|
||||
uint64_t log_base;
|
||||
uint64_t log_addr;
|
||||
struct ether_addr mac;
|
||||
|
||||
} __rte_cache_aligned;
|
||||
|
@ -95,6 +95,10 @@ vhost_backend_cleanup(struct virtio_net *dev)
|
||||
free(dev->mem);
|
||||
dev->mem = NULL;
|
||||
}
|
||||
if (dev->log_addr) {
|
||||
munmap((void *)(uintptr_t)dev->log_addr, dev->log_size);
|
||||
dev->log_addr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
@ -407,8 +411,15 @@ user_set_log_base(int vid, struct VhostUserMsg *msg)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* TODO: unmap on stop */
|
||||
dev->log_base = (uint64_t)(uintptr_t)addr + off;
|
||||
/*
|
||||
* Free previously mapped log memory on occasionally
|
||||
* multiple VHOST_USER_SET_LOG_BASE.
|
||||
*/
|
||||
if (dev->log_addr) {
|
||||
munmap((void *)(uintptr_t)dev->log_addr, dev->log_size);
|
||||
}
|
||||
dev->log_addr = (uint64_t)(uintptr_t)addr;
|
||||
dev->log_base = dev->log_addr + off;
|
||||
dev->log_size = size;
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user