vhost: add vhost_svq_push_elem
This function allows external SVQ users to return guest's available buffers. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
ac4cfdc6f3
commit
432efd144e
@ -428,6 +428,22 @@ static VirtQueueElement *vhost_svq_get_buf(VhostShadowVirtqueue *svq,
|
|||||||
return g_steal_pointer(&svq->desc_state[used_elem.id].elem);
|
return g_steal_pointer(&svq->desc_state[used_elem.id].elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push an element to SVQ, returning it to the guest.
|
||||||
|
*/
|
||||||
|
void vhost_svq_push_elem(VhostShadowVirtqueue *svq,
|
||||||
|
const VirtQueueElement *elem, uint32_t len)
|
||||||
|
{
|
||||||
|
virtqueue_push(svq->vq, elem, len);
|
||||||
|
if (svq->next_guest_avail_elem) {
|
||||||
|
/*
|
||||||
|
* Avail ring was full when vhost_svq_flush was called, so it's a
|
||||||
|
* good moment to make more descriptors available if possible.
|
||||||
|
*/
|
||||||
|
vhost_handle_guest_kick(svq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void vhost_svq_flush(VhostShadowVirtqueue *svq,
|
static void vhost_svq_flush(VhostShadowVirtqueue *svq,
|
||||||
bool check_for_avail_queue)
|
bool check_for_avail_queue)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,9 @@ typedef struct VhostShadowVirtqueue {
|
|||||||
|
|
||||||
bool vhost_svq_valid_features(uint64_t features, Error **errp);
|
bool vhost_svq_valid_features(uint64_t features, Error **errp);
|
||||||
|
|
||||||
|
void vhost_svq_push_elem(VhostShadowVirtqueue *svq,
|
||||||
|
const VirtQueueElement *elem, uint32_t len);
|
||||||
|
|
||||||
void vhost_svq_set_svq_kick_fd(VhostShadowVirtqueue *svq, int svq_kick_fd);
|
void vhost_svq_set_svq_kick_fd(VhostShadowVirtqueue *svq, int svq_kick_fd);
|
||||||
void vhost_svq_set_svq_call_fd(VhostShadowVirtqueue *svq, int call_fd);
|
void vhost_svq_set_svq_call_fd(VhostShadowVirtqueue *svq, int call_fd);
|
||||||
void vhost_svq_get_vring_addr(const VhostShadowVirtqueue *svq,
|
void vhost_svq_get_vring_addr(const VhostShadowVirtqueue *svq,
|
||||||
|
Loading…
Reference in New Issue
Block a user