rawdev: allow drivers to return error from info query

Since we now allow some parameter checking inside the driver info_get()
functions, it makes sense to allow error return from those functions to the
caller. Therefore we change the driver callback return type from void to
int.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Rosen Xu <rosen.xu@intel.com>
Acked-by: Nipun Gupta <nipun.gupta@nxp.com>
This commit is contained in:
Bruce Richardson 2020-09-10 15:36:04 +01:00 committed by Thomas Monjalon
parent 10b71caecb
commit f150dd8839
7 changed files with 32 additions and 19 deletions

View File

@ -88,6 +88,9 @@ API Changes
``rte_rawdev_info_get()``,
allowing limited driver type-checking and ABI compatibility.
* rawdev: Changed the return type of the function ``rte_dev_info_get()``
from ``void`` to ``int`` allowing the return of error codes from drivers.
ABI Changes
-----------

View File

@ -603,7 +603,7 @@ ifpga_fill_afu_dev(struct opae_accelerator *acc,
return 0;
}
static void
static int
ifpga_rawdev_info_get(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_info_size)
@ -620,12 +620,12 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev,
if (!dev_info || dev_info_size != sizeof(*afu_dev)) {
IFPGA_RAWDEV_PMD_ERR("Invalid request");
return;
return -EINVAL;
}
adapter = ifpga_rawdev_get_priv(dev);
if (!adapter)
return;
return -ENOENT;
afu_dev = dev_info;
afu_dev->rawdev = dev;
@ -637,7 +637,7 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev,
if (ifpga_fill_afu_dev(acc, afu_dev)) {
IFPGA_RAWDEV_PMD_ERR("cannot get info\n");
return;
return -ENOENT;
}
}
@ -647,21 +647,21 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev,
/* get LineSide BAR Index */
if (opae_manager_get_eth_group_region_info(mgr, 0,
&opae_lside_eth_info)) {
return;
return -ENOENT;
}
lside_bar_idx = opae_lside_eth_info.mem_idx;
/* get NICSide BAR Index */
if (opae_manager_get_eth_group_region_info(mgr, 1,
&opae_nside_eth_info)) {
return;
return -ENOENT;
}
nside_bar_idx = opae_nside_eth_info.mem_idx;
if (lside_bar_idx >= PCI_MAX_RESOURCE ||
nside_bar_idx >= PCI_MAX_RESOURCE ||
lside_bar_idx == nside_bar_idx)
return;
return -ENOENT;
/* fill LineSide BAR Index */
afu_dev->mem_resource[lside_bar_idx].phys_addr =
@ -679,6 +679,7 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev,
afu_dev->mem_resource[nside_bar_idx].addr =
opae_nside_eth_info.addr;
}
return 0;
}
static int

View File

@ -110,15 +110,18 @@ ioat_dev_stop(struct rte_rawdev *dev)
RTE_SET_USED(dev);
}
static void
static int
ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
struct rte_ioat_rawdev_config *cfg = dev_info;
struct rte_ioat_rawdev *ioat = dev->dev_private;
if (cfg != NULL && dev_info_size == sizeof(*cfg))
cfg->ring_size = ioat->ring_size;
if (dev_info == NULL || dev_info_size != sizeof(*cfg))
return -EINVAL;
cfg->ring_size = ioat->ring_size;
return 0;
}
static const char * const xstat_names[] = {

View File

@ -800,7 +800,7 @@ end_of_rx:
return nb_rx;
}
static void
static int
ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
@ -809,7 +809,7 @@ ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
if (dev_info_size != sizeof(*info)) {
NTB_LOG(ERR, "Invalid size parameter to %s", __func__);
return;
return -EINVAL;
}
info->mw_cnt = hw->mw_cnt;
@ -824,7 +824,7 @@ ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
if (!hw->queue_size || !hw->queue_pairs) {
NTB_LOG(ERR, "No queue size and queue num assigned.");
return;
return -EAGAIN;
}
hw->hdr_size_per_queue = RTE_ALIGN(sizeof(struct ntb_header) +
@ -832,6 +832,8 @@ ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
hw->queue_size * sizeof(struct ntb_used),
RTE_CACHE_LINE_SIZE);
info->ntb_hdr_size = hw->hdr_size_per_queue * hw->queue_pairs;
return 0;
}
static int

View File

@ -41,7 +41,7 @@ struct queue_buffers {
static struct queue_buffers queue_buf[SKELETON_MAX_QUEUES] = {};
static void clear_queue_bufs(int queue_id);
static void skeleton_rawdev_info_get(struct rte_rawdev *dev,
static int skeleton_rawdev_info_get(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
@ -52,7 +52,7 @@ static void skeleton_rawdev_info_get(struct rte_rawdev *dev,
if (!dev_info || dev_info_size != sizeof(*skeldev_conf)) {
SKELETON_PMD_ERR("Invalid request");
return;
return -EINVAL;
}
skeldev = skeleton_rawdev_get_priv(dev);
@ -63,6 +63,8 @@ static void skeleton_rawdev_info_get(struct rte_rawdev *dev,
skeldev_conf->capabilities = skeldev->capabilities;
skeldev_conf->device_state = skeldev->device_state;
skeldev_conf->firmware_state = skeldev->fw.firmware_state;
return 0;
}
static int skeleton_rawdev_configure(const struct rte_rawdev *dev,

View File

@ -82,6 +82,7 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
size_t dev_private_size)
{
struct rte_rawdev *rawdev;
int ret = 0;
RTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
RTE_FUNC_PTR_OR_ERR_RET(dev_info, -EINVAL);
@ -90,7 +91,8 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
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,
ret = (*rawdev->dev_ops->dev_info_get)(rawdev,
dev_info->dev_private,
dev_private_size);
}
@ -98,7 +100,7 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
dev_info->device = rawdev->device;
dev_info->socket_id = rawdev->socket_id;
return 0;
return ret;
}
int

View File

@ -142,9 +142,9 @@ rte_rawdev_pmd_is_valid_dev(uint8_t dev_id)
* The size of the structure pointed to by dev_info->dev_private
*
* @return
* Returns 0 on success
* Returns 0 on success, negative error code on failure
*/
typedef void (*rawdev_info_get_t)(struct rte_rawdev *dev,
typedef int (*rawdev_info_get_t)(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_private_size);