Re: [RFC PATCH 10/24] vdpa: introduce config operations for associating ASID to a virtqueue group

From: Jason Wang
Date: Thu Oct 08 2020 - 23:57:34 EST



On 2020/10/1 下午9:29, Eli Cohen wrote:
On Thu, Sep 24, 2020 at 11:21:11AM +0800, Jason Wang wrote:
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?


Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
---
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


/* Free device resources */
void (*free)(struct vdpa_device *vdev);
--
2.20.1