On 29/03/2017 10:37, Jason Wang wrote: >> >> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c >> index 03592c5..73e69ac 100644 >> --- a/hw/virtio/virtio.c >> +++ b/hw/virtio/virtio.c >> @@ -176,6 +176,10 @@ err_used: >> address_space_cache_destroy(&new->desc); >> err_desc: >> g_free(new); >> + atomic_rcu_set(&vq->vring.caches, NULL); >> + if (old) { >> + call_rcu(old, virtio_free_region_cache, rcu); >> + } >> } >> >> /* virt queue functions */ >> >> Paolo > > This looks a good fix but may not solve this issue completely. Depends > on the iova that guest uses, address_space_cache_init() may succeed even > in this case since vtd does a passthrough translation in this case.
Can you explain this more? Paolo