vhost: add APIs for live migration
This patch adds APIs to enable live migration for non-builtin data paths. At src side, last_avail/used_idx from the device need to be set into the virtio_net structure, and the log_base and log_size from the virtio_net structure need to be set into the device. At dst side, last_avail/used_idx need to be read from the virtio_net structure and set into the device. Signed-off-by: Zhihong Wang <zhihong.wang@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
07718b4f87
commit
bd2e0c3fe5
@ -526,6 +526,57 @@ int rte_vhost_vring_call(int vid, uint16_t vring_idx);
|
||||
*/
|
||||
uint32_t rte_vhost_rx_queue_count(int vid, uint16_t qid);
|
||||
|
||||
/**
|
||||
* Get log base and log size of the vhost device
|
||||
*
|
||||
* @param vid
|
||||
* vhost device ID
|
||||
* @param log_base
|
||||
* vhost log base
|
||||
* @param log_size
|
||||
* vhost log size
|
||||
* @return
|
||||
* 0 on success, -1 on failure
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_vhost_get_log_base(int vid, uint64_t *log_base, uint64_t *log_size);
|
||||
|
||||
/**
|
||||
* Get last_avail/used_idx of the vhost virtqueue
|
||||
*
|
||||
* @param vid
|
||||
* vhost device ID
|
||||
* @param queue_id
|
||||
* vhost queue index
|
||||
* @param last_avail_idx
|
||||
* vhost last_avail_idx to get
|
||||
* @param last_used_idx
|
||||
* vhost last_used_idx to get
|
||||
* @return
|
||||
* 0 on success, -1 on failure
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_vhost_get_vring_base(int vid, uint16_t queue_id,
|
||||
uint16_t *last_avail_idx, uint16_t *last_used_idx);
|
||||
|
||||
/**
|
||||
* Set last_avail/used_idx of the vhost virtqueue
|
||||
*
|
||||
* @param vid
|
||||
* vhost device ID
|
||||
* @param queue_id
|
||||
* vhost queue index
|
||||
* @param last_avail_idx
|
||||
* last_avail_idx to set
|
||||
* @param last_used_idx
|
||||
* last_used_idx to set
|
||||
* @return
|
||||
* 0 on success, -1 on failure
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_vhost_set_vring_base(int vid, uint16_t queue_id,
|
||||
uint16_t last_avail_idx, uint16_t last_used_idx);
|
||||
|
||||
/**
|
||||
* Get vdpa device id for vhost device.
|
||||
*
|
||||
|
@ -71,4 +71,7 @@ EXPERIMENTAL {
|
||||
rte_vhost_get_vdpa_device_id;
|
||||
rte_vhost_driver_get_protocol_features;
|
||||
rte_vhost_driver_get_queue_num;
|
||||
rte_vhost_get_log_base;
|
||||
rte_vhost_get_vring_base;
|
||||
rte_vhost_set_vring_base;
|
||||
} DPDK_18.02;
|
||||
|
@ -656,3 +656,66 @@ int rte_vhost_get_vdpa_device_id(int vid)
|
||||
|
||||
return dev->vdpa_dev_id;
|
||||
}
|
||||
|
||||
int rte_vhost_get_log_base(int vid, uint64_t *log_base,
|
||||
uint64_t *log_size)
|
||||
{
|
||||
struct virtio_net *dev = get_device(vid);
|
||||
|
||||
if (!dev)
|
||||
return -1;
|
||||
|
||||
if (unlikely(!(dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET))) {
|
||||
RTE_LOG(ERR, VHOST_DATA,
|
||||
"(%d) %s: built-in vhost net backend is disabled.\n",
|
||||
dev->vid, __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*log_base = dev->log_base;
|
||||
*log_size = dev->log_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rte_vhost_get_vring_base(int vid, uint16_t queue_id,
|
||||
uint16_t *last_avail_idx, uint16_t *last_used_idx)
|
||||
{
|
||||
struct virtio_net *dev = get_device(vid);
|
||||
|
||||
if (!dev)
|
||||
return -1;
|
||||
|
||||
if (unlikely(!(dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET))) {
|
||||
RTE_LOG(ERR, VHOST_DATA,
|
||||
"(%d) %s: built-in vhost net backend is disabled.\n",
|
||||
dev->vid, __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*last_avail_idx = dev->virtqueue[queue_id]->last_avail_idx;
|
||||
*last_used_idx = dev->virtqueue[queue_id]->last_used_idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rte_vhost_set_vring_base(int vid, uint16_t queue_id,
|
||||
uint16_t last_avail_idx, uint16_t last_used_idx)
|
||||
{
|
||||
struct virtio_net *dev = get_device(vid);
|
||||
|
||||
if (!dev)
|
||||
return -1;
|
||||
|
||||
if (unlikely(!(dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET))) {
|
||||
RTE_LOG(ERR, VHOST_DATA,
|
||||
"(%d) %s: built-in vhost net backend is disabled.\n",
|
||||
dev->vid, __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
dev->virtqueue[queue_id]->last_avail_idx = last_avail_idx;
|
||||
dev->virtqueue[queue_id]->last_used_idx = last_used_idx;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user