qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] issues of region cache and iommu reset


From: Jason Wang
Subject: Re: [Qemu-devel] issues of region cache and iommu reset
Date: Wed, 29 Mar 2017 16:37:14 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0



On 2017年03月29日 16:09, Paolo Bonzini wrote:

On 29/03/2017 10:00, Jason Wang wrote:

1) vtd was reset first

2) during the reset of virtio-net-pci #1, deletion of msix subregion
will cause a commit of all memory listeners

3) virito-net-pci #2's region cache will be update, but since vtd has
already been reset, it can't get a valid mappings here

Any ideas on how to fix this? Need region cache be aware of IOMMU/IOTLB
state in this case? Or can we simply reset IOMMU as the last one?
Something like this?

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.

Thanks




reply via email to

[Prev in Thread] Current Thread [Next in Thread]