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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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,
|
||||
bool check_for_avail_queue)
|
||||
{
|
||||
|
@ -84,6 +84,9 @@ typedef struct VhostShadowVirtqueue {
|
||||
|
||||
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_call_fd(VhostShadowVirtqueue *svq, int call_fd);
|
||||
void vhost_svq_get_vring_addr(const VhostShadowVirtqueue *svq,
|
||||
|
Loading…
Reference in New Issue
Block a user