On Tue, Sep 06, 2016 at 04:45:13AM +0300, Michael S. Tsirkin wrote: > On Mon, Sep 05, 2016 at 11:02:36AM +0300, Roman Kagan wrote: > > On Sat, Sep 03, 2016 at 01:53:53AM +0300, Michael S. Tsirkin wrote: > > > On Fri, Sep 02, 2016 at 10:21:58AM +0300, Roman Kagan wrote: > > > > On Thu, Sep 01, 2016 at 10:26:54PM +0300, Michael S. Tsirkin wrote: > > > > > I'm sorry - I don't like this patch. This means that > > > > > virtio_balloon_receive_stats will be called and will poke > > > > > at the ring even if the ring was never kicked. > > > > > > > > I'm not sure I understand what the problem is with that: > > > > virtio_balloon_receive_stats just returns early if virtio_queue_empty(), > > > > which is no more poking at the ring than is already done in virtio_load. > > > > > > Generally we should not look at ring until there was a kick. > > > > How else would you recover ->inuse? > > > > Roman. > > We seem to do this: > + vdev->vq[i].inuse = vdev->vq[i].last_avail_idx - > + vdev->vq[i].used_idx;
Right, but .used_idx is fetched from vring two lines above: vdev->vq[i].used_idx = vring_used_idx(&vdev->vq[i]); > Is this wrong? And no, I don't think it is wrong :) I guess there's just no other way to obtain it. Roman.