rawdev: allow getting info for unknown device
authorBruce Richardson <bruce.richardson@intel.com>
Mon, 6 Jul 2020 10:31:30 +0000 (11:31 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 7 Jul 2020 17:18:04 +0000 (19:18 +0200)
To call the rte_rawdev_info_get() function, the user currently has to know
the underlying type of the device in order to pass an appropriate structure
or buffer as the dev_private pointer in the info structure. By allowing a
NULL value for this field, we can skip getting the device-specific info and
just return the generic info - including the device name and driver, which
can be used to determine the device type - to the user.

This ensures that basic info can be get for all rawdevs, without knowing
the type, and even if the info driver API call has not been implemented for
the device.

Cc: stable@dpdk.org
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
lib/librte_rawdev/rte_rawdev.c
lib/librte_rawdev/rte_rawdev.h

index 2eb7b3b..e634a56 100644 (file)
@@ -87,8 +87,10 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info)
 
        rawdev = &rte_rawdevs[dev_id];
 
-       RTE_FUNC_PTR_OR_ERR_RET(*rawdev->dev_ops->dev_info_get, -ENOTSUP);
-       (*rawdev->dev_ops->dev_info_get)(rawdev, dev_info->dev_private);
+       if (dev_info->dev_private != NULL) {
+               RTE_FUNC_PTR_OR_ERR_RET(*rawdev->dev_ops->dev_info_get, -ENOTSUP);
+               (*rawdev->dev_ops->dev_info_get)(rawdev, dev_info->dev_private);
+       }
 
        if (dev_info) {
 
index 7a1f321..32f6b8b 100644 (file)
@@ -74,7 +74,13 @@ struct rte_rawdev_info;
  *
  * @param[out] dev_info
  *   A pointer to a structure of type *rte_rawdev_info* to be filled with the
- *   contextual information of the device.
+ *   contextual information of the device. The dev_info->dev_private field
+ *   should point to an appropriate buffer space for holding the device-
+ *   specific info for that hardware.
+ *   If the dev_private field is set to NULL, then the device-specific info
+ *   function will not be called and only basic information about the device
+ *   will be returned. This can be used to safely query the type of a rawdev
+ *   instance without needing to know the size of the private data to return.
  *
  * @return
  *   - 0: Success, driver updates the contextual information of the raw device