Hi, Reviewed-by: Rosen Xu <rosen...@intel.com>
> -----Original Message----- > From: Richardson, Bruce <bruce.richard...@intel.com> > Sent: Thursday, July 09, 2020 23:21 > To: Nipun Gupta <nipun.gu...@nxp.com>; Hemant Agrawal > <hemant.agra...@nxp.com> > Cc: dev@dpdk.org; Xu, Rosen <rosen...@intel.com>; Zhang, Tianfei > <tianfei.zh...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>; Wu, Jingjing > <jingjing...@intel.com>; Satha Rao <skotesh...@marvell.com>; Mahipal > Challa <mcha...@marvell.com>; Jerin Jacob <jer...@marvell.com>; > Richardson, Bruce <bruce.richard...@intel.com> > Subject: [PATCH 20.11 2/5] rawdev: allow drivers to return error from info > function > > 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.richard...@intel.com> > --- > drivers/raw/ifpga/ifpga_rawdev.c | 15 ++++++++------- > drivers/raw/ioat/ioat_rawdev.c | 9 ++++++--- > drivers/raw/ntb/ntb.c | 8 +++++--- > drivers/raw/skeleton/skeleton_rawdev.c | 6 ++++-- > lib/librte_rawdev/rte_rawdev.c | 6 ++++-- > lib/librte_rawdev/rte_rawdev_pmd.h | 4 ++-- > 6 files changed, 29 insertions(+), 19 deletions(-) > > diff --git a/drivers/raw/ifpga/ifpga_rawdev.c > b/drivers/raw/ifpga/ifpga_rawdev.c > index 47cfa3877..32a2b96c9 100644 > --- a/drivers/raw/ifpga/ifpga_rawdev.c > +++ b/drivers/raw/ifpga/ifpga_rawdev.c > @@ -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 > diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c > index 8dd856c55..6a336795d 100644 > --- a/drivers/raw/ioat/ioat_rawdev.c > +++ b/drivers/raw/ioat/ioat_rawdev.c > @@ -112,15 +112,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[] = { diff --git > a/drivers/raw/ntb/ntb.c > b/drivers/raw/ntb/ntb.c index 4676c6f8f..eaeb67b74 100644 > --- a/drivers/raw/ntb/ntb.c > +++ b/drivers/raw/ntb/ntb.c > @@ -800,7 +800,7 @@ ntb_dequeue_bufs(struct rte_rawdev *dev, > 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 > diff --git a/drivers/raw/skeleton/skeleton_rawdev.c > b/drivers/raw/skeleton/skeleton_rawdev.c > index dc05f3ecf..dce300c35 100644 > --- a/drivers/raw/skeleton/skeleton_rawdev.c > +++ b/drivers/raw/skeleton/skeleton_rawdev.c > @@ -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, diff -- > git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c > index a57689035..bde33763e 100644 > --- a/lib/librte_rawdev/rte_rawdev.c > +++ b/lib/librte_rawdev/rte_rawdev.c > @@ -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 > diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h > b/lib/librte_rawdev/rte_rawdev_pmd.h > index 0e72a9205..89e46412a 100644 > --- a/lib/librte_rawdev/rte_rawdev_pmd.h > +++ b/lib/librte_rawdev/rte_rawdev_pmd.h > @@ -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); > > -- > 2.25.1