Commit c82729e0 authored by Cindy Lu's avatar Cindy Lu Committed by Michael S. Tsirkin

vhost_vdpa: fix unmap process in no-batch mode

While using the vdpa device with vIOMMU enabled
in the guest VM, when the vdpa device bind to vfio-pci and run testpmd
then system will fail to unmap.
The test process is
Load guest VM --> attach to virtio driver--> bind to vfio-pci driver
So the mapping process is
1)batched mode map to normal MR
2)batched mode unmapped the normal MR
3)unmapped all the memory
4)mapped to iommu MR

This error happened in step 3). The iotlb was freed in step 2)
and the function vhost_vdpa_process_iotlb_msg will return fail
Which causes failure.

To fix this, we will not remove the AS while the iotlb->nmaps is 0.
This will free in the vhost_vdpa_clean

Cc: stable@vger.kernel.org
Fixes: aaca8373 ("vhost-vdpa: support ASID based IOTLB API")
Signed-off-by: default avatarCindy Lu <lulu@redhat.com>
Message-Id: <20230420151734.860168-1-lulu@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 11841c52
...@@ -886,11 +886,7 @@ static void vhost_vdpa_unmap(struct vhost_vdpa *v, ...@@ -886,11 +886,7 @@ static void vhost_vdpa_unmap(struct vhost_vdpa *v,
if (!v->in_batch) if (!v->in_batch)
ops->set_map(vdpa, asid, iotlb); ops->set_map(vdpa, asid, iotlb);
} }
/* If we are in the middle of batch processing, delay the free
* of AS until BATCH_END.
*/
if (!v->in_batch && !iotlb->nmaps)
vhost_vdpa_remove_as(v, asid);
} }
static int vhost_vdpa_va_map(struct vhost_vdpa *v, static int vhost_vdpa_va_map(struct vhost_vdpa *v,
...@@ -1147,8 +1143,6 @@ static int vhost_vdpa_process_iotlb_msg(struct vhost_dev *dev, u32 asid, ...@@ -1147,8 +1143,6 @@ static int vhost_vdpa_process_iotlb_msg(struct vhost_dev *dev, u32 asid,
if (v->in_batch && ops->set_map) if (v->in_batch && ops->set_map)
ops->set_map(vdpa, asid, iotlb); ops->set_map(vdpa, asid, iotlb);
v->in_batch = false; v->in_batch = false;
if (!iotlb->nmaps)
vhost_vdpa_remove_as(v, asid);
break; break;
default: default:
r = -EINVAL; r = -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment