mirror of https://github.com/xemu-project/xemu.git
vhost: add method vhost_set_vring_err
Kernel and user vhost may report virtqueue errors via eventfd. This is only reliable way to get notification about protocol error. Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Message-Id: <20220623161325.18813-2-vsementsov@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Roman Kagan <rvkagan@yandex-team.ru>
This commit is contained in:
parent
71e3d00482
commit
60dc3c5be9
|
@ -146,6 +146,12 @@ static int vhost_kernel_set_vring_call(struct vhost_dev *dev,
|
|||
return vhost_kernel_call(dev, VHOST_SET_VRING_CALL, file);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_err(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file)
|
||||
{
|
||||
return vhost_kernel_call(dev, VHOST_SET_VRING_ERR, file);
|
||||
}
|
||||
|
||||
static int vhost_kernel_set_vring_busyloop_timeout(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *s)
|
||||
{
|
||||
|
@ -309,6 +315,7 @@ const VhostOps kernel_ops = {
|
|||
.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_vring_err = vhost_kernel_set_vring_err,
|
||||
.vhost_set_vring_busyloop_timeout =
|
||||
vhost_kernel_set_vring_busyloop_timeout,
|
||||
.vhost_set_features = vhost_kernel_set_features,
|
||||
|
|
|
@ -1313,6 +1313,11 @@ static int vhost_user_set_vring_call(struct vhost_dev *dev,
|
|||
return vhost_set_vring_file(dev, VHOST_USER_SET_VRING_CALL, file);
|
||||
}
|
||||
|
||||
static int vhost_user_set_vring_err(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file)
|
||||
{
|
||||
return vhost_set_vring_file(dev, VHOST_USER_SET_VRING_ERR, file);
|
||||
}
|
||||
|
||||
static int vhost_user_get_u64(struct vhost_dev *dev, int request, uint64_t *u64)
|
||||
{
|
||||
|
@ -2616,6 +2621,7 @@ const VhostOps user_ops = {
|
|||
.vhost_get_vring_base = vhost_user_get_vring_base,
|
||||
.vhost_set_vring_kick = vhost_user_set_vring_kick,
|
||||
.vhost_set_vring_call = vhost_user_set_vring_call,
|
||||
.vhost_set_vring_err = vhost_user_set_vring_err,
|
||||
.vhost_set_features = vhost_user_set_features,
|
||||
.vhost_get_features = vhost_user_get_features,
|
||||
.vhost_set_owner = vhost_user_set_owner,
|
||||
|
|
|
@ -69,6 +69,8 @@ typedef int (*vhost_set_vring_kick_op)(struct vhost_dev *dev,
|
|||
struct vhost_vring_file *file);
|
||||
typedef int (*vhost_set_vring_call_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file);
|
||||
typedef int (*vhost_set_vring_err_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_file *file);
|
||||
typedef int (*vhost_set_vring_busyloop_timeout_op)(struct vhost_dev *dev,
|
||||
struct vhost_vring_state *r);
|
||||
typedef int (*vhost_set_features_op)(struct vhost_dev *dev,
|
||||
|
@ -145,6 +147,7 @@ typedef struct VhostOps {
|
|||
vhost_get_vring_base_op vhost_get_vring_base;
|
||||
vhost_set_vring_kick_op vhost_set_vring_kick;
|
||||
vhost_set_vring_call_op vhost_set_vring_call;
|
||||
vhost_set_vring_err_op vhost_set_vring_err;
|
||||
vhost_set_vring_busyloop_timeout_op vhost_set_vring_busyloop_timeout;
|
||||
vhost_set_features_op vhost_set_features;
|
||||
vhost_get_features_op vhost_get_features;
|
||||
|
|
Loading…
Reference in New Issue