vhost: toggle device callbacks using used event idx
Actually use the new field of the used ring and tell the device if SVQ wants to be notified. The code is not reachable at the moment. Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
f0c48e05bd
commit
01f8beacea
@ -369,15 +369,27 @@ static bool vhost_svq_more_used(VhostShadowVirtqueue *svq)
|
|||||||
*/
|
*/
|
||||||
static bool vhost_svq_enable_notification(VhostShadowVirtqueue *svq)
|
static bool vhost_svq_enable_notification(VhostShadowVirtqueue *svq)
|
||||||
{
|
{
|
||||||
svq->vring.avail->flags &= ~cpu_to_le16(VRING_AVAIL_F_NO_INTERRUPT);
|
if (virtio_vdev_has_feature(svq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
|
||||||
/* Make sure the flag is written before the read of used_idx */
|
uint16_t *used_event = (uint16_t *)&svq->vring.avail->ring[svq->vring.num];
|
||||||
|
*used_event = svq->shadow_used_idx;
|
||||||
|
} else {
|
||||||
|
svq->vring.avail->flags &= ~cpu_to_le16(VRING_AVAIL_F_NO_INTERRUPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure the event is enabled before the read of used_idx */
|
||||||
smp_mb();
|
smp_mb();
|
||||||
return !vhost_svq_more_used(svq);
|
return !vhost_svq_more_used(svq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
|
static void vhost_svq_disable_notification(VhostShadowVirtqueue *svq)
|
||||||
{
|
{
|
||||||
svq->vring.avail->flags |= cpu_to_le16(VRING_AVAIL_F_NO_INTERRUPT);
|
/*
|
||||||
|
* No need to disable notification in the event idx case, since used event
|
||||||
|
* index is already an index too far away.
|
||||||
|
*/
|
||||||
|
if (!virtio_vdev_has_feature(svq->vdev, VIRTIO_RING_F_EVENT_IDX)) {
|
||||||
|
svq->vring.avail->flags |= cpu_to_le16(VRING_AVAIL_F_NO_INTERRUPT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t vhost_svq_last_desc_of_chain(const VhostShadowVirtqueue *svq,
|
static uint16_t vhost_svq_last_desc_of_chain(const VhostShadowVirtqueue *svq,
|
||||||
|
Loading…
Reference in New Issue
Block a user