On 11/3/21 14:57, Vijay Srivastava wrote:
From: Vijay Kumar Srivastava <vsriv...@xilinx.com> Implement vDPA ops dev_conf and dev_close for DMA mapping, interrupt and virtqueue configurations. Signed-off-by: Vijay Kumar Srivastava <vsriv...@xilinx.com> Acked-by: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru> --- v2: * Removed redundant null check while calling free(). * Added error handling for rte_vhost_get_vhost_vring(). v4: * Removed rc for rte_vfio_container_dma_unmap from label failed_vfio_dma_map. * Updated VFIO_DEVICE_SET_IRQS parameter fields for intr disable. * Removed goto label fail_vring_map. drivers/vdpa/sfc/sfc_vdpa.c | 6 + drivers/vdpa/sfc/sfc_vdpa.h | 43 ++++ drivers/vdpa/sfc/sfc_vdpa_hw.c | 69 ++++++ drivers/vdpa/sfc/sfc_vdpa_ops.c | 525 ++++++++++++++++++++++++++++++++++++++-- drivers/vdpa/sfc/sfc_vdpa_ops.h | 28 +++ 5 files changed, 651 insertions(+), 20 deletions(-)
...
+static uint64_t +hva_to_gpa(int vid, uint64_t hva) +{ + struct rte_vhost_memory *vhost_mem = NULL; + struct rte_vhost_mem_region *mem_reg = NULL; + uint32_t i; + uint64_t gpa = 0; + + if (rte_vhost_get_mem_table(vid, &vhost_mem) < 0) + goto error; + + for (i = 0; i < vhost_mem->nregions; i++) { + mem_reg = &vhost_mem->regions[i]; + + if (hva >= mem_reg->host_user_addr && + hva < mem_reg->host_user_addr + mem_reg->size) { + gpa = (hva - mem_reg->host_user_addr) + + mem_reg->guest_phys_addr; + break; + } + } + +error: + free(vhost_mem); + return gpa; +}
It would be done later, but all the vDPA drivers have (almost) the same function, so it would make sense to add a Vhost API that would make use of Vhost's hva_to_gpa. Reviewed-by: Maxime Coquelin <maxime.coque...@redhat.com> Thanks, Maxime