mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 20:33:54 -06:00
contrib/libvhost-user: enable virtio config space messages
Enable VHOST_USER_GET_CONFIG/VHOST_USER_SET_CONFIG messages in libvhost-user library, users can implement their own I/O target based on the library. This enable the virtio config space delivered between QEMU host device and the I/O target. Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@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
00343e4b54
commit
0bc24d831e
2 changed files with 75 additions and 0 deletions
|
@ -84,6 +84,8 @@ vu_request_to_string(unsigned int req)
|
|||
REQ(VHOST_USER_SET_SLAVE_REQ_FD),
|
||||
REQ(VHOST_USER_IOTLB_MSG),
|
||||
REQ(VHOST_USER_SET_VRING_ENDIAN),
|
||||
REQ(VHOST_USER_GET_CONFIG),
|
||||
REQ(VHOST_USER_SET_CONFIG),
|
||||
REQ(VHOST_USER_MAX),
|
||||
};
|
||||
#undef REQ
|
||||
|
@ -797,6 +799,42 @@ vu_set_slave_req_fd(VuDev *dev, VhostUserMsg *vmsg)
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
vu_get_config(VuDev *dev, VhostUserMsg *vmsg)
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
if (dev->iface->get_config) {
|
||||
ret = dev->iface->get_config(dev, vmsg->payload.config.region,
|
||||
vmsg->payload.config.size);
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
/* resize to zero to indicate an error to master */
|
||||
vmsg->size = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
vu_set_config(VuDev *dev, VhostUserMsg *vmsg)
|
||||
{
|
||||
int ret = -1;
|
||||
|
||||
if (dev->iface->set_config) {
|
||||
ret = dev->iface->set_config(dev, vmsg->payload.config.region,
|
||||
vmsg->payload.config.offset,
|
||||
vmsg->payload.config.size,
|
||||
vmsg->payload.config.flags);
|
||||
if (ret) {
|
||||
vu_panic(dev, "Set virtio configuration space failed");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
|
||||
{
|
||||
|
@ -862,6 +900,10 @@ vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
|
|||
return vu_set_vring_enable_exec(dev, vmsg);
|
||||
case VHOST_USER_SET_SLAVE_REQ_FD:
|
||||
return vu_set_slave_req_fd(dev, vmsg);
|
||||
case VHOST_USER_GET_CONFIG:
|
||||
return vu_get_config(dev, vmsg);
|
||||
case VHOST_USER_SET_CONFIG:
|
||||
return vu_set_config(dev, vmsg);
|
||||
case VHOST_USER_NONE:
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue