On Fri, Dec 8, 2023 at 2:51 AM Si-Wei Liu <si-wei.liu@oracle.com> wrote:
>
> So that the batching API can be called from other file
> externally than the local.
>
> Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
> ---
> hw/virtio/vhost-vdpa.c | 21 +++++++++++++++------
> include/hw/virtio/vhost-vdpa.h | 3 +++
> 2 files changed, 18 insertions(+), 6 deletions(-)
>
> diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c
> index b7896a8..68dc01b 100644
> --- a/hw/virtio/vhost-vdpa.c
> +++ b/hw/virtio/vhost-vdpa.c
> @@ -187,7 +187,7 @@ static bool vhost_vdpa_map_batch_begin(VhostVDPAShared *s, uint32_t asid)
> return true;
> }
>
> -static int vhost_vdpa_dma_batch_begin_once(VhostVDPAShared *s, uint32_t asid)
> +int vhost_vdpa_dma_batch_begin_once(VhostVDPAShared *s, uint32_t asid)
> {
> if (!(s->backend_cap & (0x1ULL << VHOST_BACKEND_F_IOTLB_BATCH))) {
> return 0;
> @@ -237,7 +237,7 @@ static bool vhost_vdpa_dma_batch_end(VhostVDPAShared *s, uint32_t asid)
> return true;
> }
>
> -static int vhost_vdpa_dma_batch_end_once(VhostVDPAShared *s, uint32_t asid)
> +int vhost_vdpa_dma_batch_end_once(VhostVDPAShared *s, uint32_t asid)
> {
> if (!(s->backend_cap & (0x1ULL << VHOST_BACKEND_F_IOTLB_BATCH))) {
> return 0;
> @@ -436,7 +436,12 @@ static void vhost_vdpa_listener_region_add(MemoryListener *listener,
> iova = mem_region.iova;
> }
>
> - vhost_vdpa_dma_batch_begin_once(s, VHOST_VDPA_GUEST_PA_ASID);
> + ret = vhost_vdpa_dma_batch_begin_once(s, VHOST_VDPA_GUEST_PA_ASID);
> + if (unlikely(ret)) {
> + error_report("Can't batch mapping on asid 0 (%p)", s);
> + goto fail_map;
> + }
> +
This seems like another patch.
> ret = vhost_vdpa_dma_map(s, VHOST_VDPA_GUEST_PA_ASID, iova,
> int128_get64(llsize), vaddr, section->readonly);
> if (ret) {
> @@ -518,7 +523,11 @@ static void vhost_vdpa_listener_region_del(MemoryListener *listener,
> iova = result->iova;
> vhost_iova_tree_remove(s->iova_tree, *result);
> }
> - vhost_vdpa_dma_batch_begin_once(s, VHOST_VDPA_GUEST_PA_ASID);
> + ret = vhost_vdpa_dma_batch_begin_once(s, VHOST_VDPA_GUEST_PA_ASID);
> + if (ret) {
> + error_report("Can't batch mapping on asid 0 (%p)", s);
> + }
And this as well.
> +
> /*
> * The unmap ioctl doesn't accept a full 64-bit. need to check it
> */
> @@ -1396,10 +1405,10 @@ static void *vhost_vdpa_load_map(void *opaque)
> msg->iotlb.size);
> break;
> case VHOST_IOTLB_BATCH_BEGIN:
> - vhost_vdpa_dma_batch_begin_once(shared, msg->asid);
> + r = vhost_vdpa_dma_batch_begin_once(shared, msg->asid);
> break;
> case VHOST_IOTLB_BATCH_END:
> - vhost_vdpa_dma_batch_end_once(shared, msg->asid);
> + r = vhost_vdpa_dma_batch_end_once(shared, msg->asid);
And these.
Thanks
> break;
> default:
> error_report("Invalid IOTLB msg type %d", msg->iotlb.type);
> diff --git a/include/hw/virtio/vhost-vdpa.h b/include/hw/virtio/vhost-vdpa.h
> index 219316f..aa13679 100644
> --- a/include/hw/virtio/vhost-vdpa.h
> +++ b/include/hw/virtio/vhost-vdpa.h
> @@ -106,6 +106,9 @@ int vhost_vdpa_dma_map(VhostVDPAShared *s, uint32_t asid, hwaddr iova,
> hwaddr size, void *vaddr, bool readonly);
> int vhost_vdpa_dma_unmap(VhostVDPAShared *s, uint32_t asid, hwaddr iova,
> hwaddr size);
> +int vhost_vdpa_dma_batch_begin_once(VhostVDPAShared *s, uint32_t asid);
> +int vhost_vdpa_dma_batch_end_once(VhostVDPAShared *s, uint32_t asid);
> +
> int vhost_vdpa_load_setup(VhostVDPAShared *s, AddressSpace *dma_as);
> int vhost_vdpa_load_cleanup(VhostVDPAShared *s, bool vhost_will_start);
>
> --
> 1.8.3.1
>