|
|
9ae3a8 |
From 2c71eba27413f9b34610cee3f6b16b0678f4d102 Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Ladi Prosek <lprosek@redhat.com>
|
|
|
9ae3a8 |
Date: Wed, 5 Oct 2016 17:22:27 +0200
|
|
|
9ae3a8 |
Subject: [PATCH 5/8] virtio-balloon: discard virtqueue element on reset
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
RH-Author: Ladi Prosek <lprosek@redhat.com>
|
|
|
9ae3a8 |
Message-id: <1475666548-9186-6-git-send-email-lprosek@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 72484
|
|
|
9ae3a8 |
O-Subject: [RHEL-7.4 qemu-kvm v2 PATCH 5/6] virtio-balloon: discard virtqueue element on reset
|
|
|
9ae3a8 |
Bugzilla: 1377968
|
|
|
9ae3a8 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
The one pending element is being freed but not discarded on device
|
|
|
9ae3a8 |
reset, which causes svq->inuse to creep up, eventually hitting the
|
|
|
9ae3a8 |
"Virtqueue size exceeded" error.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Properly discarding the element on device reset makes sure that its
|
|
|
9ae3a8 |
buffers are unmapped and the inuse counter stays balanced.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Cc: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9ae3a8 |
Cc: Roman Kagan <rkagan@virtuozzo.com>
|
|
|
9ae3a8 |
Cc: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
|
|
9ae3a8 |
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9ae3a8 |
(cherry picked from commit 104e70cae78bd4afd95d948c6aff188f10508a9c)
|
|
|
9ae3a8 |
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Conflicts:
|
|
|
9ae3a8 |
* s->stats_vq_elem => &s->stats_vq_elem because the field is not
|
|
|
9ae3a8 |
s pointer in 1.5.3
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
hw/virtio/virtio-balloon.c | 1 +
|
|
|
9ae3a8 |
1 file changed, 1 insertion(+)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
|
|
|
9ae3a8 |
index 17b3029..faf93f7 100644
|
|
|
9ae3a8 |
--- a/hw/virtio/virtio-balloon.c
|
|
|
9ae3a8 |
+++ b/hw/virtio/virtio-balloon.c
|
|
|
9ae3a8 |
@@ -398,6 +398,7 @@ static void virtio_balloon_device_reset(VirtIODevice *vdev)
|
|
|
9ae3a8 |
VirtIOBalloon *s = VIRTIO_BALLOON(vdev);
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
if (s->stats_vq_elem_pending) {
|
|
|
9ae3a8 |
+ virtqueue_discard(s->svq, &s->stats_vq_elem, 0);
|
|
|
9ae3a8 |
s->stats_vq_elem_pending = false;
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.8.3.1
|
|
|
9ae3a8 |
|