vhost: add features changed callback
Features could be changed after the feature negotiation. For example, VHOST_F_LOG_ALL will be set/cleared at the start/end of live migration, respecitively. Thus, we need a new callback to inform the application on such change. Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
cb04355743
commit
abd53c16b6
@ -143,6 +143,12 @@ The following is an overview of some key Vhost API functions:
|
|||||||
This callback is invoked when a specific queue's state is changed, for
|
This callback is invoked when a specific queue's state is changed, for
|
||||||
example to enabled or disabled.
|
example to enabled or disabled.
|
||||||
|
|
||||||
|
* ``features_changed(int vid, uint64_t features)``
|
||||||
|
|
||||||
|
This callback is invoked when the features is changed. For example,
|
||||||
|
``VHOST_F_LOG_ALL`` will be set/cleared at the start/end of live
|
||||||
|
migration, respectively.
|
||||||
|
|
||||||
* ``rte_vhost_enqueue_burst(vid, queue_id, pkts, count)``
|
* ``rte_vhost_enqueue_burst(vid, queue_id, pkts, count)``
|
||||||
|
|
||||||
Transmits (enqueues) ``count`` packets from host to guest.
|
Transmits (enqueues) ``count`` packets from host to guest.
|
||||||
|
@ -93,7 +93,15 @@ struct vhost_device_ops {
|
|||||||
|
|
||||||
int (*vring_state_changed)(int vid, uint16_t queue_id, int enable); /**< triggered when a vring is enabled or disabled */
|
int (*vring_state_changed)(int vid, uint16_t queue_id, int enable); /**< triggered when a vring is enabled or disabled */
|
||||||
|
|
||||||
void *reserved[5]; /**< Reserved for future extension */
|
/**
|
||||||
|
* Features could be changed after the feature negotiation.
|
||||||
|
* For example, VHOST_F_LOG_ALL will be set/cleared at the
|
||||||
|
* start/end of live migration, respectively. This callback
|
||||||
|
* is used to inform the application on such change.
|
||||||
|
*/
|
||||||
|
int (*features_changed)(int vid, uint64_t features);
|
||||||
|
|
||||||
|
void *reserved[4]; /**< Reserved for future extension */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -167,6 +167,11 @@ vhost_user_set_features(struct virtio_net *dev, uint64_t features)
|
|||||||
if (features & ~vhost_features)
|
if (features & ~vhost_features)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if ((dev->flags & VIRTIO_DEV_RUNNING) && dev->features != features) {
|
||||||
|
if (dev->notify_ops->features_changed)
|
||||||
|
dev->notify_ops->features_changed(dev->vid, features);
|
||||||
|
}
|
||||||
|
|
||||||
dev->features = features;
|
dev->features = features;
|
||||||
if (dev->features &
|
if (dev->features &
|
||||||
((1 << VIRTIO_NET_F_MRG_RXBUF) | (1ULL << VIRTIO_F_VERSION_1))) {
|
((1 << VIRTIO_NET_F_MRG_RXBUF) | (1ULL << VIRTIO_F_VERSION_1))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user