mirror of https://github.com/xemu-project/xemu.git
vdpa: disable RAM block discard only for the first device
Although it does not make a big difference, its more correct and simplifies the cleanup path in subsequent patches. Move ram_block_discard_disable(false) call to the top of vhost_vdpa_cleanup because: * We cannot use vhost_vdpa_first_dev after dev->opaque = NULL assignment. * Improve the stack order in cleanup: since it is the last action taken in init, it should be the first at cleanup. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Message-Id: <20230303172445.1089785-10-eperezma@redhat.com> Tested-by: Lei Yang <leiyang@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
6949843046
commit
a230c4712b
|
@ -431,16 +431,6 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
|
|||
trace_vhost_vdpa_init(dev, opaque);
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Similar to VFIO, we end up pinning all guest memory and have to
|
||||
* disable discarding of RAM.
|
||||
*/
|
||||
ret = ram_block_discard_disable(true);
|
||||
if (ret) {
|
||||
error_report("Cannot set discarding of RAM broken");
|
||||
return ret;
|
||||
}
|
||||
|
||||
v = opaque;
|
||||
v->dev = dev;
|
||||
dev->opaque = opaque ;
|
||||
|
@ -452,6 +442,16 @@ static int vhost_vdpa_init(struct vhost_dev *dev, void *opaque, Error **errp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Similar to VFIO, we end up pinning all guest memory and have to
|
||||
* disable discarding of RAM.
|
||||
*/
|
||||
ret = ram_block_discard_disable(true);
|
||||
if (ret) {
|
||||
error_report("Cannot set discarding of RAM broken");
|
||||
return ret;
|
||||
}
|
||||
|
||||
vhost_vdpa_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE |
|
||||
VIRTIO_CONFIG_S_DRIVER);
|
||||
|
||||
|
@ -577,12 +577,15 @@ static int vhost_vdpa_cleanup(struct vhost_dev *dev)
|
|||
assert(dev->vhost_ops->backend_type == VHOST_BACKEND_TYPE_VDPA);
|
||||
v = dev->opaque;
|
||||
trace_vhost_vdpa_cleanup(dev, v);
|
||||
if (vhost_vdpa_first_dev(dev)) {
|
||||
ram_block_discard_disable(false);
|
||||
}
|
||||
|
||||
vhost_vdpa_host_notifiers_uninit(dev, dev->nvqs);
|
||||
memory_listener_unregister(&v->listener);
|
||||
vhost_vdpa_svq_cleanup(dev);
|
||||
|
||||
dev->opaque = NULL;
|
||||
ram_block_discard_disable(false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue