Re: [PATCH] vhost: introduce vDPA based backend
From: Jason Gunthorpe <jgg@ziepe.ca>
Date: 2020-02-19 13:11:05
Also in:
kvm, lkml, netdev
On Wed, Feb 19, 2020 at 10:52:38AM +0800, Tiwei Bie wrote:
quoted
quoted
+static int __init vhost_vdpa_init(void) +{ + int r; + + idr_init(&vhost_vdpa.idr); + mutex_init(&vhost_vdpa.mutex); + init_waitqueue_head(&vhost_vdpa.release_q); + + /* /dev/vhost-vdpa/$vdpa_device_index */ + vhost_vdpa.class = class_create(THIS_MODULE, "vhost-vdpa"); + if (IS_ERR(vhost_vdpa.class)) { + r = PTR_ERR(vhost_vdpa.class); + goto err_class; + } + + vhost_vdpa.class->devnode = vhost_vdpa_devnode; + + r = alloc_chrdev_region(&vhost_vdpa.devt, 0, MINORMASK + 1, + "vhost-vdpa"); + if (r) + goto err_alloc_chrdev; + + cdev_init(&vhost_vdpa.cdev, &vhost_vdpa_fops); + r = cdev_add(&vhost_vdpa.cdev, vhost_vdpa.devt, MINORMASK + 1); + if (r) + goto err_cdev_add;It is very strange, is the intention to create a single global char dev?No. It's to create a per-vdpa char dev named vhost-vdpa/$vdpa_device_index in dev. I followed the code in VFIO which creates char dev vfio/$GROUP dynamically, e.g.: https://github.com/torvalds/linux/blob/b1da3acc781c/drivers/vfio/vfio.c#L2164-L2180 https://github.com/torvalds/linux/blob/b1da3acc781c/drivers/vfio/vfio.c#L373-L387 https://github.com/torvalds/linux/blob/b1da3acc781c/drivers/vfio/vfio.c#L1553 Is it something unwanted?
Yes it is unwanted. This is some special pattern for vfio's unique needs. Since this has a struct device for each char dev instance please use the normal cdev_device_add() driven pattern here, or justify why it needs to be special like this. Jason