aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorLaurent Vivier <lvivier@redhat.com>2024-12-13 14:23:14 +0100
committerLaurent Vivier <lvivier@redhat.com>2024-12-19 12:08:20 +0100
commitb84026c37ff59719313201feda574ef2112da697 (patch)
treea31495cb6e76da1ba70425b4f00f6703ec2430e7
parent73e8444803903f1fed871dbb09aaebed6b037822 (diff)
downloadpasst-b84026c37ff59719313201feda574ef2112da697.tar
passt-b84026c37ff59719313201feda574ef2112da697.tar.gz
passt-b84026c37ff59719313201feda574ef2112da697.tar.bz2
passt-b84026c37ff59719313201feda574ef2112da697.tar.lz
passt-b84026c37ff59719313201feda574ef2112da697.tar.xz
passt-b84026c37ff59719313201feda574ef2112da697.tar.zst
passt-b84026c37ff59719313201feda574ef2112da697.zip
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>
-rw-r--r--vhost_user.c21
-rw-r--r--virtio.h18
2 files changed, 31 insertions, 8 deletions
diff --git a/vhost_user.c b/vhost_user.c
index 3264949..90c46d5 100644
--- a/vhost_user.c
+++ b/vhost_user.c
@@ -982,6 +982,23 @@ static bool vu_set_vring_enable_exec(struct vu_dev *vdev,
}
/**
+ * 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
* @vdev: vhost-user device
@@ -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,
};
/**
diff --git a/virtio.h b/virtio.h
index f572341..512ec1b 100644
--- a/virtio.h
+++ b/virtio.h
@@ -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;
};
/**