From: Parav Pandit <parav@nvidia.com> To: <virtualization@lists.linux-foundation.org> Cc: <mst@redhat.com>, <jasowang@redhat.com>, <parav@nvidia.com>, <elic@nvidia.com>, <netdev@vger.kernel.org> Subject: [PATCH linux-next v3 2/6] vdpa: Extend routine to accept vdpa device name Date: Tue, 5 Jan 2021 12:31:59 +0200 Message-ID: <20210105103203.82508-3-parav@nvidia.com> (raw) In-Reply-To: <20210105103203.82508-1-parav@nvidia.com> In a subsequent patch, when user initiated command creates a vdpa device, the user chooses the name of the vdpa device. To support it, extend the device allocation API to consider this name specified by the caller driver. Signed-off-by: Parav Pandit <parav@nvidia.com> Reviewed-by: Eli Cohen <elic@nvidia.com> Acked-by: Jason Wang <jasowang@redhat.com> --- Changelog: v1->v2: - rebased --- drivers/vdpa/ifcvf/ifcvf_main.c | 2 +- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- drivers/vdpa/vdpa.c | 36 +++++++++++++++++++++++++++---- drivers/vdpa/vdpa_sim/vdpa_sim.c | 2 +- include/linux/vdpa.h | 7 +++--- 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c index fa1af301cf55..7c8bbfcf6c3e 100644 --- a/drivers/vdpa/ifcvf/ifcvf_main.c +++ b/drivers/vdpa/ifcvf/ifcvf_main.c @@ -432,7 +432,7 @@ static int ifcvf_probe(struct pci_dev *pdev, const struct pci_device_id *id) adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa, dev, &ifc_vdpa_ops, - IFCVF_MAX_QUEUE_PAIRS * 2); + IFCVF_MAX_QUEUE_PAIRS * 2, NULL); if (adapter == NULL) { IFCVF_ERR(pdev, "Failed to allocate vDPA structure"); return -ENOMEM; diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c index 81b932f72e10..5920290521cf 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1946,7 +1946,7 @@ void *mlx5_vdpa_add_dev(struct mlx5_core_dev *mdev) max_vqs = min_t(u32, max_vqs, MLX5_MAX_SUPPORTED_VQS); ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mlx5_vdpa_ops, - 2 * mlx5_vdpa_max_qps(max_vqs)); + 2 * mlx5_vdpa_max_qps(max_vqs), NULL); if (IS_ERR(ndev)) return ndev; diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c index c0825650c055..7414bbd9057c 100644 --- a/drivers/vdpa/vdpa.c +++ b/drivers/vdpa/vdpa.c @@ -12,6 +12,8 @@ #include <linux/slab.h> #include <linux/vdpa.h> +/* A global mutex that protects vdpa management device and device level operations. */ +static DEFINE_MUTEX(vdpa_dev_mutex); static DEFINE_IDA(vdpa_index_ida); static int vdpa_dev_probe(struct device *d) @@ -63,6 +65,7 @@ static void vdpa_release_dev(struct device *d) * @config: the bus operations that is supported by this device * @nvqs: number of virtqueues supported by this device * @size: size of the parent structure that contains private data + * @name: name of the vdpa device; optional. * * Driver should use vdpa_alloc_device() wrapper macro instead of * using this directly. @@ -72,8 +75,7 @@ static void vdpa_release_dev(struct device *d) */ struct vdpa_device *__vdpa_alloc_device(struct device *parent, const struct vdpa_config_ops *config, - int nvqs, - size_t size) + int nvqs, size_t size, const char *name) { struct vdpa_device *vdev; int err = -EINVAL; @@ -101,7 +103,10 @@ struct vdpa_device *__vdpa_alloc_device(struct device *parent, vdev->features_valid = false; vdev->nvqs = nvqs; - err = dev_set_name(&vdev->dev, "vdpa%u", vdev->index); + if (name) + err = dev_set_name(&vdev->dev, "%s", name); + else + err = dev_set_name(&vdev->dev, "vdpa%u", vdev->index); if (err) goto err_name; @@ -118,6 +123,13 @@ struct vdpa_device *__vdpa_alloc_device(struct device *parent, } EXPORT_SYMBOL_GPL(__vdpa_alloc_device); +static int vdpa_name_match(struct device *dev, const void *data) +{ + struct vdpa_device *vdev = container_of(dev, struct vdpa_device, dev); + + return (strcmp(dev_name(&vdev->dev), data) == 0); +} + /** * vdpa_register_device - register a vDPA device * Callers must have a succeed call of vdpa_alloc_device() before. @@ -127,7 +139,21 @@ EXPORT_SYMBOL_GPL(__vdpa_alloc_device); */ int vdpa_register_device(struct vdpa_device *vdev) { - return device_add(&vdev->dev); + struct device *dev; + int err; + + mutex_lock(&vdpa_dev_mutex); + dev = bus_find_device(&vdpa_bus, NULL, dev_name(&vdev->dev), vdpa_name_match); + if (dev) { + put_device(dev); + err = -EEXIST; + goto name_err; + } + + err = device_add(&vdev->dev); +name_err: + mutex_unlock(&vdpa_dev_mutex); + return err; } EXPORT_SYMBOL_GPL(vdpa_register_device); @@ -137,7 +163,9 @@ EXPORT_SYMBOL_GPL(vdpa_register_device); */ void vdpa_unregister_device(struct vdpa_device *vdev) { + mutex_lock(&vdpa_dev_mutex); device_unregister(&vdev->dev); + mutex_unlock(&vdpa_dev_mutex); } EXPORT_SYMBOL_GPL(vdpa_unregister_device); diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c index b3fcc67bfdf0..db1636a99ba4 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -235,7 +235,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr) ops = &vdpasim_config_ops; vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops, - dev_attr->nvqs); + dev_attr->nvqs, NULL); if (!vdpasim) goto err_alloc; diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h index 0fefeb976877..5700baa22356 100644 --- a/include/linux/vdpa.h +++ b/include/linux/vdpa.h @@ -245,15 +245,14 @@ struct vdpa_config_ops { struct vdpa_device *__vdpa_alloc_device(struct device *parent, const struct vdpa_config_ops *config, - int nvqs, - size_t size); + int nvqs, size_t size, const char *name); -#define vdpa_alloc_device(dev_struct, member, parent, config, nvqs) \ +#define vdpa_alloc_device(dev_struct, member, parent, config, nvqs, name) \ container_of(__vdpa_alloc_device( \ parent, config, nvqs, \ sizeof(dev_struct) + \ BUILD_BUG_ON_ZERO(offsetof( \ - dev_struct, member))), \ + dev_struct, member)), name), \ dev_struct, member) int vdpa_register_device(struct vdpa_device *vdev); -- 2.26.2
next prev parent reply index Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-12 6:39 [PATCH 0/7] Introduce vdpa management tool Parav Pandit 2020-11-12 6:39 ` [PATCH 1/7] vdpa: Add missing comment for virtqueue count Parav Pandit 2020-11-12 6:40 ` [PATCH 2/7] vdpa: Use simpler version of ida allocation Parav Pandit 2020-11-12 6:40 ` [PATCH 3/7] vdpa: Extend routine to accept vdpa device name Parav Pandit 2020-11-12 6:40 ` [PATCH 4/7] vdpa: Define vdpa parent device, ops and a netlink interface Parav Pandit 2020-11-12 6:40 ` [PATCH 5/7] vdpa: Enable a user to add and delete a vdpa device Parav Pandit 2020-11-12 6:40 ` [PATCH 6/7] vdpa: Enable user to query vdpa device info Parav Pandit 2020-11-12 6:40 ` [PATCH 7/7] vdpa/vdpa_sim: Enable user to create vdpasim net devices Parav Pandit 2020-11-16 9:41 ` [PATCH 0/7] Introduce vdpa management tool Stefan Hajnoczi 2020-11-17 19:41 ` Parav Pandit 2020-11-16 22:23 ` Jakub Kicinski 2020-11-17 19:51 ` Parav Pandit 2020-12-16 9:13 ` Michael S. Tsirkin [not found] ` <20201216080610.08541f44@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com> 2020-12-16 16:54 ` Parav Pandit 2020-12-16 19:57 ` Michael S. Tsirkin 2020-12-17 12:13 ` Parav Pandit 2020-11-27 3:53 ` Jason Wang [not found] ` <CACycT3sYScObb9nN3g7L3cesjE7sCZWxZ5_5R1usGU9ePZEeqA@mail.gmail.com> 2020-11-30 3:36 ` [External] " Jason Wang 2020-11-30 7:07 ` Yongji Xie 2020-12-01 6:25 ` Jason Wang 2020-12-01 9:55 ` Yongji Xie 2020-12-01 11:32 ` Parav Pandit 2020-12-01 14:18 ` Yongji Xie 2020-12-01 15:58 ` Parav Pandit 2020-12-02 3:29 ` Yongji Xie 2020-12-02 4:53 ` Parav Pandit 2020-12-02 5:51 ` Jason Wang 2020-12-02 6:24 ` Parav Pandit 2020-12-02 7:55 ` Jason Wang 2020-12-02 9:27 ` Yongji Xie 2020-12-02 9:21 ` Yongji Xie 2020-12-02 11:13 ` Parav Pandit 2020-12-02 13:18 ` Yongji Xie 2020-12-02 5:48 ` Jason Wang 2020-12-08 22:47 ` David Ahern 2021-01-19 4:21 ` Parav Pandit 2020-12-16 9:16 ` Michael S. Tsirkin 2021-01-04 3:31 ` [PATCH linux-next v2 " Parav Pandit 2021-01-04 3:31 ` [PATCH linux-next v2 1/7] vdpa_sim_net: Make mac address array static Parav Pandit 2021-01-04 7:00 ` Jason Wang 2021-01-04 3:31 ` [PATCH linux-next v2 2/7] vdpa_sim_net: Add module param to disable default vdpa net device Parav Pandit 2021-01-04 3:31 ` [PATCH linux-next v2 3/7] vdpa: Extend routine to accept vdpa device name Parav Pandit 2021-01-04 3:31 ` [PATCH linux-next v2 4/7] vdpa: Define vdpa mgmt device, ops and a netlink interface Parav Pandit 2021-01-04 7:03 ` Jason Wang 2021-01-04 7:24 ` Parav Pandit 2021-01-05 4:10 ` Jason Wang 2021-01-05 6:33 ` Parav Pandit 2021-01-05 8:36 ` Jason Wang 2021-01-04 3:31 ` [PATCH linux-next v2 5/7] vdpa: Enable a user to add and delete a vdpa device Parav Pandit 2021-01-04 3:31 ` [PATCH linux-next v2 6/7] vdpa: Enable user to query vdpa device info Parav Pandit 2021-01-04 3:31 ` [PATCH linux-next v2 7/7] vdpa_sim_net: Add support for user supported devices Parav Pandit 2021-01-04 7:05 ` Jason Wang 2021-01-04 7:21 ` Parav Pandit 2021-01-05 4:06 ` Jason Wang 2021-01-05 6:22 ` Parav Pandit 2021-01-05 10:31 ` [PATCH linux-next v3 0/6] Introduce vdpa management tool Parav Pandit 2021-01-05 10:31 ` [PATCH linux-next v3 1/6] vdpa_sim_net: Make mac address array static Parav Pandit 2021-01-07 13:45 ` Stefano Garzarella 2021-01-05 10:31 ` Parav Pandit [this message] 2021-01-05 10:32 ` [PATCH linux-next v3 3/6] vdpa: Define vdpa mgmt device, ops and a netlink interface Parav Pandit 2021-01-05 10:32 ` [PATCH linux-next v3 4/6] vdpa: Enable a user to add and delete a vdpa device Parav Pandit 2021-01-05 10:32 ` [PATCH linux-next v3 5/6] vdpa: Enable user to query vdpa device info Parav Pandit 2021-01-05 10:32 ` [PATCH linux-next v3 6/6] vdpa_sim_net: Add support for user supported devices Parav Pandit 2021-01-05 11:48 ` Michael S. Tsirkin 2021-01-05 12:02 ` Parav Pandit 2021-01-05 12:14 ` Michael S. Tsirkin 2021-01-05 12:30 ` Parav Pandit 2021-01-05 13:23 ` Michael S. Tsirkin 2021-01-07 3:48 ` Parav Pandit 2021-01-12 4:14 ` Parav Pandit 2021-01-14 4:17 ` Jason Wang 2021-01-14 7:58 ` Parav Pandit 2021-01-15 5:38 ` Jason Wang 2021-01-15 6:27 ` Parav Pandit 2021-01-19 11:09 ` Jason Wang 2021-01-20 3:21 ` Parav Pandit 2021-01-20 3:46 ` Parav Pandit 2021-01-18 18:03 ` Parav Pandit 2021-01-20 7:53 ` 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=20210105103203.82508-3-parav@nvidia.com \ --to=parav@nvidia.com \ --cc=elic@nvidia.com \ --cc=jasowang@redhat.com \ --cc=mst@redhat.com \ --cc=netdev@vger.kernel.org \ --cc=virtualization@lists.linux-foundation.org \ /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
Netdev Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/netdev/0 netdev/git/0.git git clone --mirror https://lore.kernel.org/netdev/1 netdev/git/1.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 netdev netdev/ https://lore.kernel.org/netdev \ netdev@vger.kernel.org public-inbox-index netdev Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.netdev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git