virtio: invalidate memory in vring_set_avail_event()
authorStefan Hajnoczi <stefanha@redhat.com>
Wed, 22 Feb 2017 16:37:33 +0000 (16:37 +0000)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 2 Mar 2017 05:14:27 +0000 (07:14 +0200)
Remember to invalidate the avail event field so the memory pages are
marked dirty.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
hw/virtio/virtio.c

index bf8a6446771d7b80987ee60ac086c6c3379918f7..294c909cce452406e54df1c509c747a06aaaf2be 100644 (file)
@@ -282,6 +282,7 @@ static inline void vring_set_avail_event(VirtQueue *vq, uint16_t val)
     caches = atomic_rcu_read(&vq->vring.caches);
     pa = offsetof(VRingUsed, ring[vq->vring.num]);
     virtio_stw_phys_cached(vq->vdev, &caches->used, pa, val);
+    address_space_cache_invalidate(&caches->used, pa, sizeof(val));
 }
 
 void virtio_queue_set_notification(VirtQueue *vq, int enable)