From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: xuanzhuo@linux.alibaba.com, eperezma@redhat.com,
virtualization@lists.linux.dev, hch@infradead.org,
Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH V4 7/9] vdpa: rename dma_dev to map_token
Date: Fri, 18 Jul 2025 05:37:34 -0400 [thread overview]
Message-ID: <20250718053156-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20250718091616.6140-8-jasowang@redhat.com>
On Fri, Jul 18, 2025 at 05:16:14PM +0800, Jason Wang wrote:
> Virtio core switches from DMA device to mapping token, let's do that
> as well for vDPA.
Pls switch to imperative mood.
And add explanation about what is going on and why please.
At least, document what are the actual types stored here.
I checked and it looks like vduse actually returns struct device * here, too?
So why do we need this, why lose all type safety?
>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
> drivers/vdpa/alibaba/eni_vdpa.c | 2 +-
> drivers/vdpa/ifcvf/ifcvf_main.c | 2 +-
> drivers/vdpa/mlx5/core/mr.c | 4 ++--
> drivers/vdpa/mlx5/net/mlx5_vnet.c | 8 ++++----
> drivers/vdpa/octeon_ep/octep_vdpa_main.c | 2 +-
> drivers/vdpa/pds/vdpa_dev.c | 2 +-
> drivers/vdpa/solidrun/snet_main.c | 4 ++--
> drivers/vdpa/vdpa.c | 2 +-
> drivers/vdpa/vdpa_sim/vdpa_sim.c | 2 +-
> drivers/vdpa/vdpa_user/vduse_dev.c | 2 +-
> drivers/vdpa/virtio_pci/vp_vdpa.c | 2 +-
> drivers/vhost/vdpa.c | 4 ++--
> drivers/virtio/virtio_vdpa.c | 12 ++++++------
> include/linux/vdpa.h | 12 ++++++------
> 14 files changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/vdpa/alibaba/eni_vdpa.c b/drivers/vdpa/alibaba/eni_vdpa.c
> index ad7f3447fe90..34bf726dc660 100644
> --- a/drivers/vdpa/alibaba/eni_vdpa.c
> +++ b/drivers/vdpa/alibaba/eni_vdpa.c
> @@ -496,7 +496,7 @@ static int eni_vdpa_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> pci_set_master(pdev);
> pci_set_drvdata(pdev, eni_vdpa);
>
> - eni_vdpa->vdpa.dma_dev = &pdev->dev;
> + eni_vdpa->vdpa.map_token = &pdev->dev;
> eni_vdpa->queues = eni_vdpa_get_num_queues(eni_vdpa);
>
> eni_vdpa->vring = devm_kcalloc(&pdev->dev, eni_vdpa->queues,
> diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c
> index ccf64d7bbfaa..64d28ec97136 100644
> --- a/drivers/vdpa/ifcvf/ifcvf_main.c
> +++ b/drivers/vdpa/ifcvf/ifcvf_main.c
> @@ -713,7 +713,7 @@ static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
>
> ifcvf_mgmt_dev->adapter = adapter;
> adapter->pdev = pdev;
> - adapter->vdpa.dma_dev = &pdev->dev;
> + adapter->vdpa.map_token = &pdev->dev;
> adapter->vdpa.mdev = mdev;
> adapter->vf = vf;
> vdpa_dev = &adapter->vdpa;
> diff --git a/drivers/vdpa/mlx5/core/mr.c b/drivers/vdpa/mlx5/core/mr.c
> index c7a20278bc3c..9175d7441fec 100644
> --- a/drivers/vdpa/mlx5/core/mr.c
> +++ b/drivers/vdpa/mlx5/core/mr.c
> @@ -378,7 +378,7 @@ static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr
> u64 pa, offset;
> u64 paend;
> struct scatterlist *sg;
> - struct device *dma = mvdev->vdev.dma_dev;
> + struct device *dma = mvdev->vdev.map_token;
>
> for (map = vhost_iotlb_itree_first(iotlb, mr->start, mr->end - 1);
> map; map = vhost_iotlb_itree_next(map, mr->start, mr->end - 1)) {
> @@ -432,7 +432,7 @@ static int map_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr
>
> static void unmap_direct_mr(struct mlx5_vdpa_dev *mvdev, struct mlx5_vdpa_direct_mr *mr)
> {
> - struct device *dma = mvdev->vdev.dma_dev;
> + struct device *dma = mvdev->vdev.map_token;
>
> destroy_direct_mr(mvdev, mr);
> dma_unmap_sg_attrs(dma, mr->sg_head.sgl, mr->nsg, DMA_BIDIRECTIONAL, 0);
> diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> index 0ed2fc28e1ce..1c2342942200 100644
> --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
> +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
> @@ -3395,14 +3395,14 @@ static int mlx5_vdpa_reset_map(struct vdpa_device *vdev, unsigned int asid)
> return err;
> }
>
> -static struct device *mlx5_get_vq_dma_dev(struct vdpa_device *vdev, u16 idx)
> +static struct device *mlx5_get_vq_map_token(struct vdpa_device *vdev, u16 idx)
> {
> struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
>
> if (is_ctrl_vq_idx(mvdev, idx))
> return &vdev->dev;
>
> - return mvdev->vdev.dma_dev;
> + return mvdev->vdev.map_token;
> }
>
> static void free_irqs(struct mlx5_vdpa_net *ndev)
> @@ -3686,7 +3686,7 @@ static const struct vdpa_config_ops mlx5_vdpa_ops = {
> .set_map = mlx5_vdpa_set_map,
> .reset_map = mlx5_vdpa_reset_map,
> .set_group_asid = mlx5_set_group_asid,
> - .get_vq_dma_dev = mlx5_get_vq_dma_dev,
> + .get_vq_map_token = mlx5_get_vq_map_token,
> .free = mlx5_vdpa_free,
> .suspend = mlx5_vdpa_suspend,
> .resume = mlx5_vdpa_resume, /* Op disabled if not supported. */
> @@ -3965,7 +3965,7 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
> }
>
> ndev->mvdev.mlx_features = device_features;
> - mvdev->vdev.dma_dev = &mdev->pdev->dev;
> + mvdev->vdev.map_token = &mdev->pdev->dev;
> err = mlx5_vdpa_alloc_resources(&ndev->mvdev);
> if (err)
> goto err_alloc;
> diff --git a/drivers/vdpa/octeon_ep/octep_vdpa_main.c b/drivers/vdpa/octeon_ep/octep_vdpa_main.c
> index 9b49efd24391..42a4df4613dd 100644
> --- a/drivers/vdpa/octeon_ep/octep_vdpa_main.c
> +++ b/drivers/vdpa/octeon_ep/octep_vdpa_main.c
> @@ -516,7 +516,7 @@ static int octep_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
> }
>
> oct_vdpa->pdev = pdev;
> - oct_vdpa->vdpa.dma_dev = &pdev->dev;
> + oct_vdpa->vdpa.map_token = &pdev->dev;
> oct_vdpa->vdpa.mdev = mdev;
> oct_vdpa->oct_hw = oct_hw;
> vdpa_dev = &oct_vdpa->vdpa;
> diff --git a/drivers/vdpa/pds/vdpa_dev.c b/drivers/vdpa/pds/vdpa_dev.c
> index 301d95e08596..cff9c9811d8e 100644
> --- a/drivers/vdpa/pds/vdpa_dev.c
> +++ b/drivers/vdpa/pds/vdpa_dev.c
> @@ -643,7 +643,7 @@ static int pds_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
>
> pdev = vdpa_aux->padev->vf_pdev;
> dma_dev = &pdev->dev;
> - pdsv->vdpa_dev.dma_dev = dma_dev;
> + pdsv->vdpa_dev.map_token = dma_dev;
>
> status = pds_vdpa_get_status(&pdsv->vdpa_dev);
> if (status == 0xff) {
> diff --git a/drivers/vdpa/solidrun/snet_main.c b/drivers/vdpa/solidrun/snet_main.c
> index 55ec51c17ab3..1864fd1655ea 100644
> --- a/drivers/vdpa/solidrun/snet_main.c
> +++ b/drivers/vdpa/solidrun/snet_main.c
> @@ -1052,8 +1052,8 @@ static int snet_vdpa_probe_vf(struct pci_dev *pdev)
> */
> snet_reserve_irq_idx(pf_irqs ? pdev_pf : pdev, snet);
>
> - /*set DMA device*/
> - snet->vdpa.dma_dev = &pdev->dev;
> + /* set map token */
> + snet->vdpa.map_token = &pdev->dev;
>
> /* Register VDPA device */
> ret = vdpa_register_device(&snet->vdpa, snet->cfg->vq_num);
> diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c
> index 8a372b51c21a..1cc4285ebd67 100644
> --- a/drivers/vdpa/vdpa.c
> +++ b/drivers/vdpa/vdpa.c
> @@ -151,7 +151,7 @@ static void vdpa_release_dev(struct device *d)
> * Driver should use vdpa_alloc_device() wrapper macro instead of
> * using this directly.
> *
> - * Return: Returns an error when parent/config/dma_dev is not set or fail to get
> + * Return: Returns an error when parent/config/map_token is not set or fail to get
> * ida.
> */
> struct vdpa_device *__vdpa_alloc_device(struct device *parent,
> diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c
> index c204fc8e471a..7c8e468f2f8c 100644
> --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c
> +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c
> @@ -272,7 +272,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr,
> vringh_set_iotlb(&vdpasim->vqs[i].vring, &vdpasim->iommu[0],
> &vdpasim->iommu_lock);
>
> - vdpasim->vdpa.dma_dev = dev;
> + vdpasim->vdpa.map_token = dev;
>
> return vdpasim;
>
> diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
> index 04620bb77203..cf4e3525aac4 100644
> --- a/drivers/vdpa/vdpa_user/vduse_dev.c
> +++ b/drivers/vdpa/vdpa_user/vduse_dev.c
> @@ -2022,7 +2022,7 @@ static int vduse_dev_init_vdpa(struct vduse_dev *dev, const char *name)
> return ret;
> }
> set_dma_ops(&vdev->vdpa.dev, &vduse_dev_dma_ops);
> - vdev->vdpa.dma_dev = &vdev->vdpa.dev;
> + vdev->vdpa.map_token = &vdev->vdpa.dev;
> vdev->vdpa.mdev = &vduse_mgmt->mgmt_dev;
>
> return 0;
> diff --git a/drivers/vdpa/virtio_pci/vp_vdpa.c b/drivers/vdpa/virtio_pci/vp_vdpa.c
> index 8787407f75b0..6e22e95245fa 100644
> --- a/drivers/vdpa/virtio_pci/vp_vdpa.c
> +++ b/drivers/vdpa/virtio_pci/vp_vdpa.c
> @@ -520,7 +520,7 @@ static int vp_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
>
> vp_vdpa_mgtdev->vp_vdpa = vp_vdpa;
>
> - vp_vdpa->vdpa.dma_dev = &pdev->dev;
> + vp_vdpa->vdpa.map_token = &pdev->dev;
> vp_vdpa->queues = vp_modern_get_num_queues(mdev);
> vp_vdpa->mdev = mdev;
>
> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
> index 5a49b5a6d496..732ed118c138 100644
> --- a/drivers/vhost/vdpa.c
> +++ b/drivers/vhost/vdpa.c
> @@ -1320,7 +1320,7 @@ static int vhost_vdpa_alloc_domain(struct vhost_vdpa *v)
> {
> struct vdpa_device *vdpa = v->vdpa;
> const struct vdpa_config_ops *ops = vdpa->config;
> - struct device *dma_dev = vdpa_get_dma_dev(vdpa);
> + struct device *dma_dev = vdpa_get_map_token(vdpa);
> int ret;
>
> /* Device want to do DMA by itself */
> @@ -1355,7 +1355,7 @@ static int vhost_vdpa_alloc_domain(struct vhost_vdpa *v)
> static void vhost_vdpa_free_domain(struct vhost_vdpa *v)
> {
> struct vdpa_device *vdpa = v->vdpa;
> - struct device *dma_dev = vdpa_get_dma_dev(vdpa);
> + struct device *dma_dev = vdpa_get_map_token(vdpa);
>
> if (v->domain) {
> iommu_detach_device(v->domain, dma_dev);
> diff --git a/drivers/virtio/virtio_vdpa.c b/drivers/virtio/virtio_vdpa.c
> index dbf207cd3996..7b9bc123166d 100644
> --- a/drivers/virtio/virtio_vdpa.c
> +++ b/drivers/virtio/virtio_vdpa.c
> @@ -133,7 +133,6 @@ virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
> const char *name, bool ctx)
> {
> struct vdpa_device *vdpa = vd_get_vdpa(vdev);
> - struct device *dma_dev;
> const struct vdpa_config_ops *ops = vdpa->config;
> bool (*notify)(struct virtqueue *vq) = virtio_vdpa_notify;
> struct vdpa_callback cb;
> @@ -143,6 +142,7 @@ virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
> struct vdpa_vq_state state = {0};
> u32 align, max_num, min_num = 1;
> bool may_reduce_num = true;
> + void *map_token;
> int err;
>
> if (!name)
> @@ -181,13 +181,13 @@ virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
> /* Create the vring */
> align = ops->get_vq_align(vdpa);
>
> - if (ops->get_vq_dma_dev)
> - dma_dev = ops->get_vq_dma_dev(vdpa, index);
> + if (ops->get_vq_map_token)
> + map_token = ops->get_vq_map_token(vdpa, index);
> else
> - dma_dev = vdpa_get_dma_dev(vdpa);
> + map_token = vdpa_get_map_token(vdpa);
> vq = vring_create_virtqueue_map(index, max_num, align, vdev,
> true, may_reduce_num, ctx,
> - notify, callback, name, dma_dev);
> + notify, callback, name, map_token);
> if (!vq) {
> err = -ENOMEM;
> goto error_new_virtqueue;
> @@ -461,7 +461,7 @@ static int virtio_vdpa_probe(struct vdpa_device *vdpa)
> if (!vd_dev)
> return -ENOMEM;
>
> - vd_dev->vdev.dev.parent = vdpa_get_dma_dev(vdpa);
> + vd_dev->vdev.dev.parent = vdpa_get_map_token(vdpa);
> vd_dev->vdev.dev.release = virtio_vdpa_release_dev;
> vd_dev->vdev.config = &virtio_vdpa_config_ops;
> vd_dev->vdpa = vdpa;
> diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h
> index 2e7a30fe6b92..352ca5609c9a 100644
> --- a/include/linux/vdpa.h
> +++ b/include/linux/vdpa.h
> @@ -70,7 +70,7 @@ struct vdpa_mgmt_dev;
> /**
> * struct vdpa_device - representation of a vDPA device
> * @dev: underlying device
> - * @dma_dev: the actual device that is performing DMA
> + * @map_token: the token passed to upper layer to be used for mappping
mappping -> mapping
what is "upper layer" here?
pls document what kind of "mapping"
> * @driver_override: driver name to force a match; do not set directly,
> * because core frees it; use driver_set_override() to
> * set or clear it.
> @@ -87,7 +87,7 @@ struct vdpa_mgmt_dev;
> */
> struct vdpa_device {
> struct device dev;
> - struct device *dma_dev;
> + void *map_token;
> const char *driver_override;
> const struct vdpa_config_ops *config;
> struct rw_semaphore cf_lock; /* Protects get/set config */
Not super happy about complete lack of type safety.
> @@ -352,7 +352,7 @@ struct vdpa_map_file {
> * @vdev: vdpa device
> * @asid: address space identifier
> * Returns integer: success (0) or error (< 0)
> - * @get_vq_dma_dev: Get the dma device for a specific
> + * @get_vq_map_token: Get the map token for a specific
> * virtqueue (optional)
> * @vdev: vdpa device
> * @idx: virtqueue index
> @@ -436,7 +436,7 @@ struct vdpa_config_ops {
> int (*reset_map)(struct vdpa_device *vdev, unsigned int asid);
> int (*set_group_asid)(struct vdpa_device *vdev, unsigned int group,
> unsigned int asid);
> - struct device *(*get_vq_dma_dev)(struct vdpa_device *vdev, u16 idx);
> + struct device *(*get_vq_map_token)(struct vdpa_device *vdev, u16 idx);
> int (*bind_mm)(struct vdpa_device *vdev, struct mm_struct *mm);
> void (*unbind_mm)(struct vdpa_device *vdev);
>
> @@ -520,9 +520,9 @@ static inline void vdpa_set_drvdata(struct vdpa_device *vdev, void *data)
> dev_set_drvdata(&vdev->dev, data);
> }
>
> -static inline struct device *vdpa_get_dma_dev(struct vdpa_device *vdev)
> +static inline void *vdpa_get_map_token(struct vdpa_device *vdev)
> {
> - return vdev->dma_dev;
> + return vdev->map_token;
> }
>
> static inline int vdpa_reset(struct vdpa_device *vdev, u32 flags)
> --
> 2.47.3
next prev parent reply other threads:[~2025-07-18 9:37 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-18 9:16 [PATCH V4 0/9] Refine virtio mapping API Jason Wang
2025-07-18 9:16 ` [PATCH V4 1/9] virtio_ring: constify virtqueue pointer for DMA helpers Jason Wang
2025-07-18 9:27 ` Michael S. Tsirkin
2025-07-18 9:28 ` Jason Wang
2025-07-18 9:39 ` Michael S. Tsirkin
2025-07-25 9:00 ` Xuan Zhuo
2025-07-28 10:44 ` Eugenio Perez Martin
2025-07-18 9:16 ` [PATCH V4 2/9] virtio_ring: switch to use dma_{map|unmap}_page() Jason Wang
2025-07-25 9:09 ` Xuan Zhuo
2025-07-28 3:25 ` Jason Wang
2025-07-18 9:16 ` [PATCH V4 3/9] virtio: rename dma helpers Jason Wang
2025-07-25 9:10 ` Xuan Zhuo
2025-07-18 9:16 ` [PATCH V4 4/9] virtio: rename dma_dev to map_token Jason Wang
2025-07-18 9:16 ` [PATCH V4 5/9] virtio_ring: rename dma_handle to map_handle Jason Wang
2025-07-25 9:11 ` Xuan Zhuo
2025-07-18 9:16 ` [PATCH V4 6/9] virtio: introduce map ops in virtio core Jason Wang
2025-07-25 9:13 ` Xuan Zhuo
2025-07-28 3:28 ` Jason Wang
2025-07-18 9:16 ` [PATCH V4 7/9] vdpa: rename dma_dev to map_token Jason Wang
2025-07-18 9:24 ` Zhu Lingshan
2025-07-18 9:37 ` Michael S. Tsirkin [this message]
2025-07-18 10:09 ` Jason Wang
2025-07-21 8:05 ` Jason Wang
2025-07-22 17:26 ` Michael S. Tsirkin
2025-07-23 5:54 ` Jason Wang
2025-07-23 6:29 ` Michael S. Tsirkin
2025-07-22 14:01 ` Michael S. Tsirkin
2025-07-22 14:02 ` Michael S. Tsirkin
2025-07-18 9:16 ` [PATCH V4 8/9] vdpa: introduce map ops Jason Wang
2025-07-18 9:16 ` [PATCH V4 9/9] vduse: switch to use virtio map API instead of DMA API Jason Wang
2025-07-18 9:41 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250718053156-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=eperezma@redhat.com \
--cc=hch@infradead.org \
--cc=hch@lst.de \
--cc=jasowang@redhat.com \
--cc=virtualization@lists.linux.dev \
--cc=xuanzhuo@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.