Re: [RFC PATCH 10/24] vdpa: introduce config operations for associating ASID to a virtqueue group
From: Jason Wang <jasowang@redhat.com>
Date: 2020-10-09 03:57:34
Also in:
kvm, lkml, virtualization
On 2020/10/1 下午9:29, Eli Cohen wrote:
On Thu, Sep 24, 2020 at 11:21:11AM +0800, Jason Wang wrote:quoted
This patch introduces a new bus operation to allow the vDPA bus driver to associate an ASID to a virtqueue group.So in case of virtio_net, I would expect that all the data virtqueues will be associated with the same address space identifier.
Right. I will add the codes to do this in the next version. It should be more explicit than have this assumption by default.
Moreover, this assignment should be provided before the set_map call that provides the iotlb for the address space, correct?
I think it's better not have this limitation, note that set_map() now takes a asid argument. So for hardware if the associated as is changed, the driver needs to program the hardware to switch to the new mapping. Does this work for mlx5?
quoted
Signed-off-by: Jason Wang <jasowang@redhat.com> --- include/linux/vdpa.h | 10 ++++++++++ 1 file changed, 10 insertions(+)diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h index 1e1163daa352..e2394995a3cd 100644 --- a/include/linux/vdpa.h +++ b/include/linux/vdpa.h@@ -160,6 +160,12 @@ struct vdpa_device { * @get_generation: Get device config generation (optional) * @vdev: vdpa device * Returns u32: device generation + * @set_group_asid: Set address space identifier for a + * virtqueue group + * @vdev: vdpa device + * @group: virtqueue group + * @asid: address space id for this group + * Returns integer: success (0) or error (< 0) * @set_map: Set device memory mapping (optional) * Needed for device that using device * specific DMA translation (on-chip IOMMU)@@ -237,6 +243,10 @@ struct vdpa_config_ops { u64 iova, u64 size, u64 pa, u32 perm); int (*dma_unmap)(struct vdpa_device *vdev, unsigned int asid, u64 iova, u64 size); + int (*set_group_asid)(struct vdpa_device *vdev, unsigned int group, + unsigned int asid); + +Extra space
Will fix. Thanks
quoted
/* Free device resources */ void (*free)(struct vdpa_device *vdev); -- 2.20.1