1
0
mirror of https://passt.top/passt synced 2025-01-12 15:43:05 +00:00

vhost-user: add VHOST_USER_CHECK_DEVICE_STATE command

After transferring the back-end’s internal state during migration,
check whether the back-end was able to successfully fully process
the state.

The value returned indicates success or error;
0 is success, any non-zero value is an error.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
This commit is contained in:
Laurent Vivier 2024-12-13 14:23:14 +01:00
parent 73e8444803
commit b84026c37f
2 changed files with 31 additions and 8 deletions

View File

@ -981,6 +981,23 @@ static bool vu_set_vring_enable_exec(struct vu_dev *vdev,
return false;
}
/**
* vu_check_device_state_exec() -- Return device state migration result
* @vdev: vhost-user device
* @vmsg: vhost-user message
*
* Return: True as the reply contains the migration result
*/
static bool vu_check_device_state_exec(struct vu_dev *vdev,
struct vhost_user_msg *msg)
{
(void)vdev;
vmsg_set_reply_u64(msg, vdev->device_state_result);
return true;
}
/**
* vu_init() - Initialize vhost-user device structure
* @c: execution context
@ -1002,6 +1019,7 @@ void vu_init(struct ctx *c)
}
c->vdev->log_table = NULL;
c->vdev->log_call_fd = -1;
c->vdev->device_state_result = -1;
}
@ -1050,6 +1068,8 @@ void vu_cleanup(struct vu_dev *vdev)
vdev->nregions = 0;
vu_close_log(vdev);
vdev->device_state_result = -1;
}
/**
@ -1080,6 +1100,7 @@ static bool (*vu_handle[VHOST_USER_MAX])(struct vu_dev *vdev,
[VHOST_USER_SET_VRING_CALL] = vu_set_vring_call_exec,
[VHOST_USER_SET_VRING_ERR] = vu_set_vring_err_exec,
[VHOST_USER_SET_VRING_ENABLE] = vu_set_vring_enable_exec,
[VHOST_USER_CHECK_DEVICE_STATE] = vu_check_device_state_exec,
};
/**

View File

@ -98,14 +98,15 @@ struct vu_dev_region {
/**
* struct vu_dev - vhost-user device information
* @context: Execution context
* @nregions: Number of shared memory regions
* @regions: Guest shared memory regions
* @features: Vhost-user features
* @protocol_features: Vhost-user protocol features
* @log_call_fd: Eventfd to report logging update
* @log_size: Size of the logging memory region
* @log_table: Base of the logging memory region
* @context: Execution context
* @nregions: Number of shared memory regions
* @regions: Guest shared memory regions
* @features: Vhost-user features
* @protocol_features: Vhost-user protocol features
* @log_call_fd: Eventfd to report logging update
* @log_size: Size of the logging memory region
* @log_table: Base of the logging memory region
* @device_state_result: Device state migration result
*/
struct vu_dev {
struct ctx *context;
@ -117,6 +118,7 @@ struct vu_dev {
int log_call_fd;
uint64_t log_size;
uint8_t *log_table;
int device_state_result;
};
/**