Patch "virtio_balloon: init 1st buffer in stats vq" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
virtio_balloon: init 1st buffer in stats vq
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
virtio_balloon-init-1st-buffer-in-stats-vq.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
fc8653228c8588a120f6b5dad6983b7b61ff669eMon Sep 17 00:00:00 2001
From: Ladi Prosek <[email protected]>
Date: Thu, 23 Mar 2017 08:04:18 +0100
Subject: virtio_balloon: init 1st buffer in stats vq
From: Ladi Prosek <[email protected]>
commit fc8653228c8588a120f6b5dad6983b7b61ff669e upstream.
When init_vqs runs, virtio_balloon.stats is either uninitialized or contains stale values. The host updates its state with garbage data because it has no way of knowing that this is just a marker buffer used for signaling.
This patch updates the stats before pushing the initial buffer.
Alternative fixes:
* Push an empty buffer in init_vqs. Not easily done with the current virtio implementation and violates the spec "Driver MUST supply the same subset of statistics in all buffers submitted to the statsq".
* Push a buffer with invalid tags in init_vqs. Violates the same spec clause, plus "invalid tag" is not really defined.
Note: the spec says:
When using the legacy interface, the device SHOULD ignore all values in the first buffer in the statsq supplied by the driver after device initialization. Note: Historically, drivers supplied an uninitialized buffer in the first buffer.
Unfortunately QEMU does not seem to implement the recommendation even for the legacy interface.
--- drivers/virtio/virtio_balloon.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/virtio/virtio_balloon.c +2 -0
@@ -427,6 +427,8 @@ static int init_vqs(struct virtio_balloo* Prime this virtqueue with one buffer so the hypervisor can * use it to signal us later (it can't be broken yet!). */ +update_balloon_stats (vb); +sg_init_one (&sg, vb->stats,sizeof vb->stats);if (virtqueue_add_outbuf (vb->stats_vq, &sg,1 , vb,GFP_KERNEL ) <0 )
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/virtio_balloon-init-1st-buffer-in-stats-vq.patch queue-4.9/kvm-nvmx-invvpid-handling-improvements.patch