mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-02 06:51:53 -06:00
vhost-vdpa: Add check for full 64-bit in region delete
The unmap ioctl doesn't accept a full 64-bit span. So need to add check for the section's size in vhost_vdpa_listener_region_del(). Signed-off-by: Cindy Lu <lulu@redhat.com> Message-Id: <20230510054631.2951812-4-lulu@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
3d1e4d34a8
commit
2fbef6aad8
1 changed files with 19 additions and 1 deletions
|
@ -316,10 +316,28 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
|
||||||
vhost_iova_tree_remove(v->iova_tree, *result);
|
vhost_iova_tree_remove(v->iova_tree, *result);
|
||||||
}
|
}
|
||||||
vhost_vdpa_iotlb_batch_begin_once(v);
|
vhost_vdpa_iotlb_batch_begin_once(v);
|
||||||
|
/*
|
||||||
|
* The unmap ioctl doesn't accept a full 64-bit. need to check it
|
||||||
|
*/
|
||||||
|
if (int128_eq(llsize, int128_2_64())) {
|
||||||
|
llsize = int128_rshift(llsize, 1);
|
||||||
|
ret = vhost_vdpa_dma_unmap(v, VHOST_VDPA_GUEST_PA_ASID, iova,
|
||||||
|
int128_get64(llsize));
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
error_report("vhost_vdpa_dma_unmap(%p, 0x%" HWADDR_PRIx ", "
|
||||||
|
"0x%" HWADDR_PRIx ") = %d (%m)",
|
||||||
|
v, iova, int128_get64(llsize), ret);
|
||||||
|
}
|
||||||
|
iova += int128_get64(llsize);
|
||||||
|
}
|
||||||
ret = vhost_vdpa_dma_unmap(v, VHOST_VDPA_GUEST_PA_ASID, iova,
|
ret = vhost_vdpa_dma_unmap(v, VHOST_VDPA_GUEST_PA_ASID, iova,
|
||||||
int128_get64(llsize));
|
int128_get64(llsize));
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
error_report("vhost_vdpa dma unmap error!");
|
error_report("vhost_vdpa_dma_unmap(%p, 0x%" HWADDR_PRIx ", "
|
||||||
|
"0x%" HWADDR_PRIx ") = %d (%m)",
|
||||||
|
v, iova, int128_get64(llsize), ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
memory_region_unref(section->mr);
|
memory_region_unref(section->mr);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue