Message ID | 1701970793-6865-30-git-send-email-si-wei.liu@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vdpa-net: improve migration downtime through descriptor ASID and persistent IOTLB | expand |
On Thu, Dec 7, 2023 at 7:51 PM 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); 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 >
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 >
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; + } + 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);
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(-)