mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
vhost: use a function for each call
Replace the generic vhost_call() by specific functions for each function call to help with type safety and changing arguments. While doing this, I found that "unsigned long long" and "uint64_t" were used interchangeably and causing compilation warnings, using uint64_t instead, as the vhost & protocol specifies. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> [Fix enum usage and MQ - Thibaut Collet] Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Thibaut Collet <thibaut.collet@6wind.com>
This commit is contained in:
parent
d2fc4402cb
commit
21e704256d
7 changed files with 511 additions and 281 deletions
|
@ -43,13 +43,6 @@ static int vhost_kernel_cleanup(struct vhost_dev *dev)
|
|||
return close(fd);
|
||||
}
|
||||
|
||||
static int vhost_kernel_get_vq_index(struct vhost_dev *dev, int idx)
|
||||
{
|
||||
assert(idx >= dev->vq_index && idx < dev->vq_index + dev->nvqs);
|
||||
|
||||
return idx - dev->vq_index;
|
||||
}
|
||||
|
||||
static int vhost_kernel_memslots_limit(struct vhost_dev *dev)
|
||||
{
|
||||
int limit = 64;
|
||||
|
@ -67,20 +60,135 @@ static int vhost_kernel_memslots_limit(struct vhost_dev *dev)
|
|||
return limit;
|
||||
}
|
||||
|
||||
static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base,
|
||||
struct vhost_log *log)
|
||||
static int vhost_kernel_net_set_backend(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_NET_SET_BACKEND, file);
|
||||
}
|
||||
|
||||
static int vhost_kernel_scsi_set_endpoint(struct vhost_dev *dev,
|
||||
struct vhost_scsi_target *target)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SCSI_SET_ENDPOINT, target);
|
||||
}
|
||||
|
||||
static int vhost_kernel_scsi_clear_endpoint(struct vhost_dev *dev,
|
||||
struct vhost_scsi_target *target)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SCSI_CLEAR_ENDPOINT, target);
|
||||
}
|
||||
|
||||
static int vhost_kernel_scsi_get_abi_version(struct vhost_dev *dev, int *version)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SCSI_GET_ABI_VERSION, version);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_log_base(struct vhost_dev *dev, uint64_t base,
|
||||
struct vhost_log *log)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_LOG_BASE, &base);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_mem_table(struct vhost_dev *dev,
|
||||
struct vhost_memory *mem)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_MEM_TABLE, mem);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_addr(struct vhost_dev *dev,
|
||||
struct vhost_vring_addr *addr)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_ADDR, addr);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_endian(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *ring)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_ENDIAN, ring);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_num(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *ring)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_NUM, ring);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_base(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *ring)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_BASE, ring);
|
||||
}
|
||||
|
||||
static int vhost_kernel_get_vring_base(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *ring)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_GET_VRING_BASE, ring);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_kick(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_KICK, file);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_call(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_CALL, file);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_features(struct vhost_dev *dev,
|
||||
uint64_t features)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_FEATURES, &features);
|
||||
}
|
||||
|
||||
static int vhost_kernel_get_features(struct vhost_dev *dev,
|
||||
uint64_t *features)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_GET_FEATURES, features);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_owner(struct vhost_dev *dev)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_OWNER, NULL);
|
||||
}
|
||||
|
||||
static int vhost_kernel_reset_device(struct vhost_dev *dev)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_RESET_DEVICE, NULL);
|
||||
}
|
||||
|
||||
static int vhost_kernel_get_vq_index(struct vhost_dev *dev, int idx)
|
||||
{
|
||||
assert(idx >= dev->vq_index && idx < dev->vq_index + dev->nvqs);
|
||||
|
||||
return idx - dev->vq_index;
|
||||
}
|
||||
|
||||
static const VhostOps kernel_ops = {
|
||||
.backend_type = VHOST_BACKEND_TYPE_KERNEL,
|
||||
.vhost_call = vhost_kernel_call,
|
||||
.vhost_backend_init = vhost_kernel_init,
|
||||
.vhost_backend_cleanup = vhost_kernel_cleanup,
|
||||
.vhost_backend_get_vq_index = vhost_kernel_get_vq_index,
|
||||
.vhost_backend_memslots_limit = vhost_kernel_memslots_limit,
|
||||
.vhost_set_log_base = vhost_set_log_base,
|
||||
.vhost_net_set_backend = vhost_kernel_net_set_backend,
|
||||
.vhost_scsi_set_endpoint = vhost_kernel_scsi_set_endpoint,
|
||||
.vhost_scsi_clear_endpoint = vhost_kernel_scsi_clear_endpoint,
|
||||
.vhost_scsi_get_abi_version = vhost_kernel_scsi_get_abi_version,
|
||||
.vhost_set_log_base = vhost_kernel_set_log_base,
|
||||
.vhost_set_mem_table = vhost_kernel_set_mem_table,
|
||||
.vhost_set_vring_addr = vhost_kernel_set_vring_addr,
|
||||
.vhost_set_vring_endian = vhost_kernel_set_vring_endian,
|
||||
.vhost_set_vring_num = vhost_kernel_set_vring_num,
|
||||
.vhost_set_vring_base = vhost_kernel_set_vring_base,
|
||||
.vhost_get_vring_base = vhost_kernel_get_vring_base,
|
||||
.vhost_set_vring_kick = vhost_kernel_set_vring_kick,
|
||||
.vhost_set_vring_call = vhost_kernel_set_vring_call,
|
||||
.vhost_set_features = vhost_kernel_set_features,
|
||||
.vhost_get_features = vhost_kernel_get_features,
|
||||
.vhost_set_owner = vhost_kernel_set_owner,
|
||||
.vhost_reset_device = vhost_kernel_reset_device,
|
||||
.vhost_get_vq_index = vhost_kernel_get_vq_index,
|
||||
};
|
||||
|
||||
int vhost_set_backend_type(struct vhost_dev *dev, VhostBackendType backend_type)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue