Messages in this thread | | | Subject | Re: [RFC PATCH 10/24] vdpa: introduce config operations for associating ASID to a virtqueue group | From | Jason Wang <> | Date | Fri, 9 Oct 2020 11:56:45 +0800 |
| |
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@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
>> >> /* Free device resources */ >> void (*free)(struct vdpa_device *vdev); >> -- >> 2.20.1 >>
| |