On Thu, Dec 7, 2023 at 7:51 PM Si-Wei Liu <si-wei....@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....@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);
Can we move this error to vhost_vdpa_dma_batch_begin_once? That way we avoid duplicating the error message later in the patch and we can tell the expected ASID. > + goto fail_map; > + } > + > 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); > + } > + > /* > * 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); > 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 >