From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47903) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbeUS-00069Q-GG for qemu-devel@nongnu.org; Sun, 21 Aug 2016 21:57:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bbeUP-0003cn-9N for qemu-devel@nongnu.org; Sun, 21 Aug 2016 21:57:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52982) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bbeUP-0003cd-30 for qemu-devel@nongnu.org; Sun, 21 Aug 2016 21:57:25 -0400 Date: Mon, 22 Aug 2016 04:57:19 +0300 From: "Michael S. Tsirkin" Message-ID: <20160822045658-mutt-send-email-mst@kernel.org> References: <1471613966-7267-1-git-send-email-rkagan@virtuozzo.com> <1471613966-7267-3-git-send-email-rkagan@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1471613966-7267-3-git-send-email-rkagan@virtuozzo.com> Subject: Re: [Qemu-devel] [PATCH v2 2/6] virtio-balloon: make stats virtqueue length 1 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Roman Kagan Cc: qemu-devel@nongnu.org, "Denis V. Lunev" , Ladi Prosek , Stefan Hajnoczi On Fri, Aug 19, 2016 at 04:39:21PM +0300, Roman Kagan wrote: > The protocol for virtio-balloon stats virtqueue doesn't allow more than > one element in the virtqueue. > > So, instead of trying to compensate for guest misbehavior if it sends > new data before the slot has been released by the host, just define the > stats virtqueue length to 1 initially and rely on the generic virtio > code to handle overflows. > > Signed-off-by: Roman Kagan > Cc: "Michael S. Tsirkin" > Cc: Ladi Prosek > Cc: Stefan Hajnoczi This would need a bunch of compat handlers to avoid changes for old machine types. > --- > v1 > v2: > - added assert in virtio_balloon_receive_stats > > hw/virtio/virtio-balloon.c | 10 +++------- > 1 file changed, 3 insertions(+), 7 deletions(-) > > diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c > index 5af429a..fb8784e 100644 > --- a/hw/virtio/virtio-balloon.c > +++ b/hw/virtio/virtio-balloon.c > @@ -262,12 +262,8 @@ static void virtio_balloon_receive_stats(VirtIODevice *vdev, VirtQueue *vq) > goto out; > } > > - if (s->stats_vq_elem != NULL) { > - /* This should never happen if the driver follows the spec. */ > - virtqueue_push(vq, s->stats_vq_elem, 0); > - virtio_notify(vdev, vq); > - g_free(s->stats_vq_elem); > - } > + /* enforced by stats virtqueue depth being 1 */ > + assert(!s->stats_vq_elem); > > s->stats_vq_elem = elem; > > @@ -443,7 +439,7 @@ static void virtio_balloon_device_realize(DeviceState *dev, Error **errp) > > s->ivq = virtio_add_queue(vdev, 128, virtio_balloon_handle_output); > s->dvq = virtio_add_queue(vdev, 128, virtio_balloon_handle_output); > - s->svq = virtio_add_queue(vdev, 128, virtio_balloon_receive_stats); > + s->svq = virtio_add_queue(vdev, 1, virtio_balloon_receive_stats); > > reset_stats(s); > } > -- > 2.7.4