> -----Original Message----- > From: Pei, Andy <andy....@intel.com> > Sent: Wednesday, May 18, 2022 8:14 PM > To: dev@dpdk.org > Cc: Xia, Chenbo <chenbo....@intel.com>; maxime.coque...@redhat.com; Cao, > Gang <gang....@intel.com>; Liu, Changpeng <changpeng....@intel.com>; Xu, > Rosen <rosen...@intel.com>; Xiao, QimaiX <qimaix.x...@intel.com> > Subject: [PATCH v8 07/13] vhost: add API to get vDPA device type > > Vhost backend of different devices have different features. > Add a API to get vDPA device type, net device or blk device
an API > currently, so users can set different features for different > kinds of devices. > > Signed-off-by: Andy Pei <andy....@intel.com> > --- > doc/guides/prog_guide/vhost_lib.rst | 5 ++++ > doc/guides/rel_notes/release_22_07.rst | 4 ++++ > lib/vhost/rte_vhost.h | 17 +++++++++++++ > lib/vhost/socket.c | 44 > ++++++++++++++++++++++++++++++++++ > lib/vhost/vdpa_driver.h | 3 +++ > lib/vhost/version.map | 1 + > 6 files changed, 74 insertions(+) > > diff --git a/doc/guides/prog_guide/vhost_lib.rst > b/doc/guides/prog_guide/vhost_lib.rst > index f287b76..0337b38 100644 > --- a/doc/guides/prog_guide/vhost_lib.rst > +++ b/doc/guides/prog_guide/vhost_lib.rst > @@ -282,6 +282,11 @@ The following is an overview of some key Vhost API > functions: > Clear inflight packets which are submitted to DMA engine in vhost async > data > path. Completed packets are returned to applications through ``pkts``. > > +* ``rte_vhost_driver_get_vdpa_dev_type(path, type)`` > + > + Get device type of vDPA device, such as VDPA_DEVICE_TYPE_NET, > + VDPA_DEVICE_TYPE_BLK. > + > Vhost-user Implementations > -------------------------- > > diff --git a/doc/guides/rel_notes/release_22_07.rst > b/doc/guides/rel_notes/release_22_07.rst > index e49cace..9550977 100644 > --- a/doc/guides/rel_notes/release_22_07.rst > +++ b/doc/guides/rel_notes/release_22_07.rst > @@ -104,6 +104,10 @@ New Features > * ``RTE_EVENT_QUEUE_ATTR_WEIGHT`` > * ``RTE_EVENT_QUEUE_ATTR_AFFINITY`` > > +* **Added vhost API to get the device type of a vDPA device.** > + > + Added an API which can get the device type of vDPA device. > + Release note has a requirement of order, check comment under 'New features' in release notes. Based on these comments, you should put this after 'Added vhost API to get the number of in-flight packets' > > Removed Items > ------------- > diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h > index c733f85..c977a24 100644 > --- a/lib/vhost/rte_vhost.h > +++ b/lib/vhost/rte_vhost.h > @@ -117,6 +117,9 @@ > > #define RTE_MAX_VHOST_DEVICE 1024 > > +#define VDPA_DEVICE_TYPE_NET 0 > +#define VDPA_DEVICE_TYPE_BLK 1 These will be new APIs of vhost lib. I suggest to rename them by adding prefix 'RTE_VHOST_' Thanks, Chenbo > + > struct rte_vdpa_device; > > /** > @@ -486,6 +489,20 @@ struct rte_vdpa_device * > rte_vhost_driver_get_vdpa_device(const char *path); > > /** > + * Get the device type of the vdpa device. > + * > + * @param path > + * The vhost-user socket file path > + * @param type > + * the device type of the vdpa device > + * @return > + * 0 on success, -1 on failure > + */ > +__rte_experimental > +int > +rte_vhost_driver_get_vdpa_dev_type(const char *path, uint32_t *type); > + > +/** > * Set the feature bits the vhost-user driver supports. > * > * @param path > diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c > index b304339..ef0f401 100644 > --- a/lib/vhost/socket.c > +++ b/lib/vhost/socket.c > @@ -619,6 +619,50 @@ struct rte_vdpa_device * > } > > int > +rte_vhost_driver_get_vdpa_dev_type(const char *path, uint32_t *type) > +{ > + struct vhost_user_socket *vsocket; > + struct rte_vdpa_device *vdpa_dev; > + uint32_t vdpa_type = 0; > + int ret = 0; > + > + pthread_mutex_lock(&vhost_user.mutex); > + vsocket = find_vhost_user_socket(path); > + if (!vsocket) { > + VHOST_LOG_CONFIG(ERR, > + "(%s) socket file is not registered yet.\n", > + path); > + ret = -1; > + goto unlock_exit; > + } > + > + vdpa_dev = vsocket->vdpa_dev; > + if (!vdpa_dev) { > + ret = -1; > + goto unlock_exit; > + } > + > + if (vdpa_dev->ops->get_dev_type) { > + ret = vdpa_dev->ops->get_dev_type(vdpa_dev, &vdpa_type); > + if (ret) { > + VHOST_LOG_CONFIG(ERR, > + "(%s) failed to get vdpa dev type for > socket file.\n", > + path); > + ret = -1; > + goto unlock_exit; > + } > + } else { > + vdpa_type = VDPA_DEVICE_TYPE_NET; > + } > + > + *type = vdpa_type; > + > +unlock_exit: > + pthread_mutex_unlock(&vhost_user.mutex); > + return ret; > +} > + > +int > rte_vhost_driver_disable_features(const char *path, uint64_t features) > { > struct vhost_user_socket *vsocket; > diff --git a/lib/vhost/vdpa_driver.h b/lib/vhost/vdpa_driver.h > index e59a834..9cbd7cd 100644 > --- a/lib/vhost/vdpa_driver.h > +++ b/lib/vhost/vdpa_driver.h > @@ -78,6 +78,9 @@ struct rte_vdpa_dev_ops { > /** Set the device configuration space */ > int (*set_config)(int vid, uint8_t *config, uint32_t offset, > uint32_t size, uint32_t flags); > + > + /** get device type: net device, blk device... */ > + int (*get_dev_type)(struct rte_vdpa_device *dev, uint32_t *type); > }; > > /** > diff --git a/lib/vhost/version.map b/lib/vhost/version.map > index 5841315..583b4f3 100644 > --- a/lib/vhost/version.map > +++ b/lib/vhost/version.map > @@ -90,6 +90,7 @@ EXPERIMENTAL { > > # added in 22.07 > rte_vhost_async_get_inflight_thread_unsafe; > + rte_vhost_driver_get_vdpa_dev_type; > > }; > > -- > 1.8.3.1