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
@ -316,10 +316,28 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
|
||||
vhost_iova_tree_remove(v->iova_tree, *result);
|
||||
}
|
||||
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,
|
||||
int128_get64(llsize));
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user