From patchwork Thu Jul 9 15:20:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 73653 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 16030A0528; Thu, 9 Jul 2020 17:21:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 99BBC1DD1A; Thu, 9 Jul 2020 17:21:05 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 09EDF1DD17 for ; Thu, 9 Jul 2020 17:21:03 +0200 (CEST) IronPort-SDR: zgKwd5DciUBilGY8FkpIgUIQP4Kqj5qraixI70mhZr3tGUaCFfZ9k5th5m0IHwpe5kj/5PgSIc G50Dq0hivr7Q== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="209546528" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="209546528" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 08:21:02 -0700 IronPort-SDR: f3wau+O/5GkYUPLI66RoCTuUF4cNm9M8lnmsYjtPVjxWLO1kJd58LEFJIfCQv0i8GnzSxJiZUz vXLjGJ2rIfAQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483835512" Received: from silpixa00399126.ir.intel.com ([10.237.222.36]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 08:20:59 -0700 From: Bruce Richardson To: Nipun Gupta , Hemant Agrawal Cc: dev@dpdk.org, Rosen Xu , Tianfei zhang , Xiaoyun Li , Jingjing Wu , Satha Rao , Mahipal Challa , Jerin Jacob , Bruce Richardson Date: Thu, 9 Jul 2020 16:20:43 +0100 Message-Id: <20200709152047.167730-2-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200709152047.167730-1-bruce.richardson@intel.com> References: <20200709152047.167730-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20.11 1/5] rawdev: add private data length parameter to info fn X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently with the rawdev API there is no way to check that the structure passed in via the dev_private pointer in the dev_info structure is of the correct type - it's just checked that it is non-NULL. Adding in the length of the expected structure provides a measure of typechecking, and can also be used for ABI compatibility in future, since ABI changes involving structs almost always involve a change in size. Signed-off-by: Bruce Richardson Reviewed-by: Rosen Xu --- drivers/bus/ifpga/ifpga_bus.c | 2 +- drivers/raw/ifpga/ifpga_rawdev.c | 5 +++-- drivers/raw/ioat/ioat_rawdev.c | 5 +++-- drivers/raw/ioat/ioat_rawdev_test.c | 4 ++-- drivers/raw/ntb/ntb.c | 8 +++++++- drivers/raw/skeleton/skeleton_rawdev.c | 5 +++-- drivers/raw/skeleton/skeleton_rawdev_test.c | 19 ++++++++++++------- examples/ioat/ioatfwd.c | 2 +- examples/ntb/ntb_fwd.c | 2 +- lib/librte_rawdev/rte_rawdev.c | 6 ++++-- lib/librte_rawdev/rte_rawdev.h | 9 ++++++++- lib/librte_rawdev/rte_rawdev_pmd.h | 5 ++++- 12 files changed, 49 insertions(+), 23 deletions(-) diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c index 6b16a20bb..bb8b3dcfb 100644 --- a/drivers/bus/ifpga/ifpga_bus.c +++ b/drivers/bus/ifpga/ifpga_bus.c @@ -162,7 +162,7 @@ ifpga_scan_one(struct rte_rawdev *rawdev, afu_dev->id.port = afu_pr_conf.afu_id.port; if (rawdev->dev_ops && rawdev->dev_ops->dev_info_get) - rawdev->dev_ops->dev_info_get(rawdev, afu_dev); + rawdev->dev_ops->dev_info_get(rawdev, afu_dev, sizeof(*afu_dev)); if (rawdev->dev_ops && rawdev->dev_ops->dev_start && diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index cc25c662b..47cfa3877 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -605,7 +605,8 @@ ifpga_fill_afu_dev(struct opae_accelerator *acc, static void ifpga_rawdev_info_get(struct rte_rawdev *dev, - rte_rawdev_obj_t dev_info) + rte_rawdev_obj_t dev_info, + size_t dev_info_size) { struct opae_adapter *adapter; struct opae_accelerator *acc; @@ -617,7 +618,7 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev, IFPGA_RAWDEV_PMD_FUNC_TRACE(); - if (!dev_info) { + if (!dev_info || dev_info_size != sizeof(*afu_dev)) { IFPGA_RAWDEV_PMD_ERR("Invalid request"); return; } diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c index f876ffc3f..8dd856c55 100644 --- a/drivers/raw/ioat/ioat_rawdev.c +++ b/drivers/raw/ioat/ioat_rawdev.c @@ -113,12 +113,13 @@ ioat_dev_stop(struct rte_rawdev *dev) } static void -ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info) +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) + if (cfg != NULL && dev_info_size == sizeof(*cfg)) cfg->ring_size = ioat->ring_size; } diff --git a/drivers/raw/ioat/ioat_rawdev_test.c b/drivers/raw/ioat/ioat_rawdev_test.c index d99f1bd6b..90f5974cd 100644 --- a/drivers/raw/ioat/ioat_rawdev_test.c +++ b/drivers/raw/ioat/ioat_rawdev_test.c @@ -157,7 +157,7 @@ ioat_rawdev_test(uint16_t dev_id) return TEST_SKIPPED; } - rte_rawdev_info_get(dev_id, &info); + rte_rawdev_info_get(dev_id, &info, sizeof(p)); if (p.ring_size != expected_ring_size[dev_id]) { printf("Error, initial ring size is not as expected (Actual: %d, Expected: %d)\n", (int)p.ring_size, expected_ring_size[dev_id]); @@ -169,7 +169,7 @@ ioat_rawdev_test(uint16_t dev_id) printf("Error with rte_rawdev_configure()\n"); return -1; } - rte_rawdev_info_get(dev_id, &info); + rte_rawdev_info_get(dev_id, &info, sizeof(p)); if (p.ring_size != IOAT_TEST_RINGSIZE) { printf("Error, ring size is not %d (%d)\n", IOAT_TEST_RINGSIZE, (int)p.ring_size); diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index e40412bb7..4676c6f8f 100644 --- a/drivers/raw/ntb/ntb.c +++ b/drivers/raw/ntb/ntb.c @@ -801,11 +801,17 @@ ntb_dequeue_bufs(struct rte_rawdev *dev, } static void -ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info) +ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info, + size_t dev_info_size) { struct ntb_hw *hw = dev->dev_private; struct ntb_dev_info *info = dev_info; + if (dev_info_size != sizeof(*info)){ + NTB_LOG(ERR, "Invalid size parameter to %s", __func__); + return; + } + info->mw_cnt = hw->mw_cnt; info->mw_size = hw->mw_size; diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c index 72ece887a..dc05f3ecf 100644 --- a/drivers/raw/skeleton/skeleton_rawdev.c +++ b/drivers/raw/skeleton/skeleton_rawdev.c @@ -42,14 +42,15 @@ 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, - rte_rawdev_obj_t dev_info) + rte_rawdev_obj_t dev_info, + size_t dev_info_size) { struct skeleton_rawdev *skeldev; struct skeleton_rawdev_conf *skeldev_conf; SKELETON_PMD_FUNC_TRACE(); - if (!dev_info) { + if (!dev_info || dev_info_size != sizeof(*skeldev_conf)) { SKELETON_PMD_ERR("Invalid request"); return; } diff --git a/drivers/raw/skeleton/skeleton_rawdev_test.c b/drivers/raw/skeleton/skeleton_rawdev_test.c index 9ecfdee81..9b8390dfb 100644 --- a/drivers/raw/skeleton/skeleton_rawdev_test.c +++ b/drivers/raw/skeleton/skeleton_rawdev_test.c @@ -106,12 +106,12 @@ test_rawdev_info_get(void) struct rte_rawdev_info rdev_info = {0}; struct skeleton_rawdev_conf skel_conf = {0}; - ret = rte_rawdev_info_get(test_dev_id, NULL); + ret = rte_rawdev_info_get(test_dev_id, NULL, 0); RTE_TEST_ASSERT(ret == -EINVAL, "Expected -EINVAL, %d", ret); rdev_info.dev_private = &skel_conf; - ret = rte_rawdev_info_get(test_dev_id, &rdev_info); + ret = rte_rawdev_info_get(test_dev_id, &rdev_info, sizeof(skel_conf)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to get raw dev info"); return TEST_SUCCESS; @@ -142,7 +142,8 @@ test_rawdev_configure(void) rdev_info.dev_private = &rdev_conf_get; ret = rte_rawdev_info_get(test_dev_id, - (rte_rawdev_obj_t)&rdev_info); + (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_get)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to obtain rawdev configuration (%d)", ret); @@ -170,7 +171,8 @@ test_rawdev_queue_default_conf_get(void) /* Get the current configuration */ rdev_info.dev_private = &rdev_conf_get; ret = rte_rawdev_info_get(test_dev_id, - (rte_rawdev_obj_t)&rdev_info); + (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_get)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to obtain rawdev configuration (%d)", ret); @@ -218,7 +220,8 @@ test_rawdev_queue_setup(void) /* Get the current configuration */ rdev_info.dev_private = &rdev_conf_get; ret = rte_rawdev_info_get(test_dev_id, - (rte_rawdev_obj_t)&rdev_info); + (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_get)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to obtain rawdev configuration (%d)", ret); @@ -327,7 +330,8 @@ test_rawdev_start_stop(void) dummy_firmware = NULL; rte_rawdev_start(test_dev_id); - ret = rte_rawdev_info_get(test_dev_id, (rte_rawdev_obj_t)&rdev_info); + ret = rte_rawdev_info_get(test_dev_id, (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_get)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to obtain rawdev configuration (%d)", ret); @@ -336,7 +340,8 @@ test_rawdev_start_stop(void) rdev_conf_get.device_state); rte_rawdev_stop(test_dev_id); - ret = rte_rawdev_info_get(test_dev_id, (rte_rawdev_obj_t)&rdev_info); + ret = rte_rawdev_info_get(test_dev_id, (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_get)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to obtain rawdev configuration (%d)", ret); diff --git a/examples/ioat/ioatfwd.c b/examples/ioat/ioatfwd.c index b66ee73bc..5c631da1b 100644 --- a/examples/ioat/ioatfwd.c +++ b/examples/ioat/ioatfwd.c @@ -757,7 +757,7 @@ assign_rawdevs(void) do { if (rdev_id == rte_rawdev_count()) goto end; - rte_rawdev_info_get(rdev_id++, &rdev_info); + rte_rawdev_info_get(rdev_id++, &rdev_info, 0); } while (rdev_info.driver_name == NULL || strcmp(rdev_info.driver_name, IOAT_PMD_RAWDEV_NAME_STR) != 0); diff --git a/examples/ntb/ntb_fwd.c b/examples/ntb/ntb_fwd.c index eba8ebf9f..11e224451 100644 --- a/examples/ntb/ntb_fwd.c +++ b/examples/ntb/ntb_fwd.c @@ -1389,7 +1389,7 @@ main(int argc, char **argv) rte_rawdev_set_attr(dev_id, NTB_QUEUE_NUM_NAME, num_queues); printf("Set queue number as %u.\n", num_queues); ntb_rawdev_info.dev_private = (rte_rawdev_obj_t)(&ntb_info); - rte_rawdev_info_get(dev_id, &ntb_rawdev_info); + rte_rawdev_info_get(dev_id, &ntb_rawdev_info, sizeof(ntb_info)); nb_mbuf = nb_desc * num_queues * 2 * 2 + rte_lcore_count() * MEMPOOL_CACHE_SIZE; diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c index 8f84d0b22..a57689035 100644 --- a/lib/librte_rawdev/rte_rawdev.c +++ b/lib/librte_rawdev/rte_rawdev.c @@ -78,7 +78,8 @@ rte_rawdev_socket_id(uint16_t dev_id) } int -rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info) +rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info, + size_t dev_private_size) { struct rte_rawdev *rawdev; @@ -89,7 +90,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); + (*rawdev->dev_ops->dev_info_get)(rawdev, dev_info->dev_private, + dev_private_size); } dev_info->driver_name = rawdev->driver_name; diff --git a/lib/librte_rawdev/rte_rawdev.h b/lib/librte_rawdev/rte_rawdev.h index 32f6b8bb0..cf6acfd26 100644 --- a/lib/librte_rawdev/rte_rawdev.h +++ b/lib/librte_rawdev/rte_rawdev.h @@ -82,13 +82,20 @@ struct rte_rawdev_info; * 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. * + * @param dev_private_size + * The length of the memory space pointed to by dev_private in dev_info. + * This should be set to the size of the expected private structure to be + * returned, and may be checked by drivers to ensure the expected struct + * type is provided. + * * @return * - 0: Success, driver updates the contextual information of the raw device * - <0: Error code returned by the driver info get function. * */ int -rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info); +rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info, + size_t dev_private_size); /** * Configure a raw device. diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h b/lib/librte_rawdev/rte_rawdev_pmd.h index 4395a2182..0e72a9205 100644 --- a/lib/librte_rawdev/rte_rawdev_pmd.h +++ b/lib/librte_rawdev/rte_rawdev_pmd.h @@ -138,12 +138,15 @@ rte_rawdev_pmd_is_valid_dev(uint8_t dev_id) * Raw device pointer * @param dev_info * Raw device information structure + * @param dev_private_size + * The size of the structure pointed to by dev_info->dev_private * * @return * Returns 0 on success */ typedef void (*rawdev_info_get_t)(struct rte_rawdev *dev, - rte_rawdev_obj_t dev_info); + rte_rawdev_obj_t dev_info, + size_t dev_private_size); /** * Configure a device. From patchwork Thu Jul 9 15:20:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 73654 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B12EBA0528; Thu, 9 Jul 2020 17:21:18 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C88621DDFC; Thu, 9 Jul 2020 17:21:08 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 43DC51DDDF for ; Thu, 9 Jul 2020 17:21:07 +0200 (CEST) IronPort-SDR: xpix/Z2HOv4/7/aRFGVFiPDYYVQ0zd/mS8mJ1ReTmOI715+Da3sqMuWcl8tiKpzLmErCkH69l7 l8eZ3NjuERDA== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="209546562" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="209546562" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 08:21:06 -0700 IronPort-SDR: tb3h444Mil+uUrVg71B+msZwHqrmBSAHYvMWgSwoRMBA8Xm2vYziDXPiI/TwuQp7phmXh23ZDK 4T8M9LCbPqlw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483835532" Received: from silpixa00399126.ir.intel.com ([10.237.222.36]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 08:21:04 -0700 From: Bruce Richardson To: Nipun Gupta , Hemant Agrawal Cc: dev@dpdk.org, Rosen Xu , Tianfei zhang , Xiaoyun Li , Jingjing Wu , Satha Rao , Mahipal Challa , Jerin Jacob , Bruce Richardson Date: Thu, 9 Jul 2020 16:20:44 +0100 Message-Id: <20200709152047.167730-3-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200709152047.167730-1-bruce.richardson@intel.com> References: <20200709152047.167730-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20.11 2/5] rawdev: allow drivers to return error from info function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Reviewed-by: Rosen Xu --- 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); From patchwork Thu Jul 9 15:20:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 73655 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6FCE4A0528; Thu, 9 Jul 2020 17:21:33 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 52DC21E4AA; Thu, 9 Jul 2020 17:21:13 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 8381A1DEAD for ; Thu, 9 Jul 2020 17:21:11 +0200 (CEST) IronPort-SDR: rc3fPQ7bCtdqdITVUwPdbsBCRJumM7pZPZFmJb7nY/aetTZEJRywKLKKLJBKEmOdiL7npTuAmZ mPng5nR6y+DQ== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="209546597" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="209546597" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 08:21:10 -0700 IronPort-SDR: QUTpoayXuyG/aEP4/p1KVpnkGLmmiVkFSaDxFjzo8qpTaFBLQ9n0UimOraTTx6bsfwB8tV7kKR ybyAFh2QGz+g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483835556" Received: from silpixa00399126.ir.intel.com ([10.237.222.36]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 08:21:08 -0700 From: Bruce Richardson To: Nipun Gupta , Hemant Agrawal Cc: dev@dpdk.org, Rosen Xu , Tianfei zhang , Xiaoyun Li , Jingjing Wu , Satha Rao , Mahipal Challa , Jerin Jacob , Bruce Richardson Date: Thu, 9 Jul 2020 16:20:45 +0100 Message-Id: <20200709152047.167730-4-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200709152047.167730-1-bruce.richardson@intel.com> References: <20200709152047.167730-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20.11 3/5] rawdev: add private data length parameter to config fn X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently with the rawdev API there is no way to check that the structure passed in via the dev_private pointer in the structure passed to configure API is of the correct type - it's just checked that it is non-NULL. Adding in the length of the expected structure provides a measure of typechecking, and can also be used for ABI compatibility in future, since ABI changes involving structs almost always involve a change in size. Signed-off-by: Bruce Richardson Reviewed-by: Rosen Xu --- drivers/raw/ifpga/ifpga_rawdev.c | 3 ++- drivers/raw/ioat/ioat_rawdev.c | 5 +++-- drivers/raw/ioat/ioat_rawdev_test.c | 2 +- drivers/raw/ntb/ntb.c | 6 +++++- drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c | 7 ++++--- drivers/raw/octeontx2_dma/otx2_dpi_test.c | 3 ++- drivers/raw/octeontx2_ep/otx2_ep_rawdev.c | 7 ++++--- drivers/raw/octeontx2_ep/otx2_ep_test.c | 2 +- drivers/raw/skeleton/skeleton_rawdev.c | 5 +++-- drivers/raw/skeleton/skeleton_rawdev_test.c | 5 +++-- examples/ioat/ioatfwd.c | 2 +- examples/ntb/ntb_fwd.c | 2 +- lib/librte_rawdev/rte_rawdev.c | 6 ++++-- lib/librte_rawdev/rte_rawdev.h | 8 +++++++- lib/librte_rawdev/rte_rawdev_pmd.h | 3 ++- 15 files changed, 43 insertions(+), 23 deletions(-) diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 32a2b96c9..a50173264 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -684,7 +684,8 @@ ifpga_rawdev_info_get(struct rte_rawdev *dev, static int ifpga_rawdev_configure(const struct rte_rawdev *dev, - rte_rawdev_obj_t config) + rte_rawdev_obj_t config, + size_t config_size __rte_unused) { IFPGA_RAWDEV_PMD_FUNC_TRACE(); diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c index 6a336795d..b29ff983f 100644 --- a/drivers/raw/ioat/ioat_rawdev.c +++ b/drivers/raw/ioat/ioat_rawdev.c @@ -41,7 +41,8 @@ RTE_LOG_REGISTER(ioat_pmd_logtype, rawdev.ioat, INFO); #define COMPLETION_SZ sizeof(__m128i) static int -ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) +ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config, + size_t config_size) { struct rte_ioat_rawdev_config *params = config; struct rte_ioat_rawdev *ioat = dev->dev_private; @@ -51,7 +52,7 @@ ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) if (dev->started) return -EBUSY; - if (params == NULL) + if (params == NULL || config_size != sizeof(*params)) return -EINVAL; if (params->ring_size > 4096 || params->ring_size < 64 || diff --git a/drivers/raw/ioat/ioat_rawdev_test.c b/drivers/raw/ioat/ioat_rawdev_test.c index 90f5974cd..e5b50ae9f 100644 --- a/drivers/raw/ioat/ioat_rawdev_test.c +++ b/drivers/raw/ioat/ioat_rawdev_test.c @@ -165,7 +165,7 @@ ioat_rawdev_test(uint16_t dev_id) } p.ring_size = IOAT_TEST_RINGSIZE; - if (rte_rawdev_configure(dev_id, &info) != 0) { + if (rte_rawdev_configure(dev_id, &info, sizeof(p)) != 0) { printf("Error with rte_rawdev_configure()\n"); return -1; } diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index eaeb67b74..c181094d5 100644 --- a/drivers/raw/ntb/ntb.c +++ b/drivers/raw/ntb/ntb.c @@ -837,13 +837,17 @@ ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info, } static int -ntb_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) +ntb_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config, + size_t config_size) { struct ntb_dev_config *conf = config; struct ntb_hw *hw = dev->dev_private; uint32_t xstats_num; int ret; + if (conf == NULL || config_size != sizeof(*conf)) + return -EINVAL; + hw->queue_pairs = conf->num_queues; hw->queue_size = conf->queue_size; hw->used_mw_num = conf->mz_num; diff --git a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c index e398abb75..5b496446c 100644 --- a/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c +++ b/drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c @@ -294,7 +294,8 @@ otx2_dpi_rawdev_reset(struct rte_rawdev *dev) } static int -otx2_dpi_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) +otx2_dpi_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config, + size_t config_size) { struct dpi_rawdev_conf_s *conf = config; struct dpi_vf_s *dpivf = NULL; @@ -302,8 +303,8 @@ otx2_dpi_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) uintptr_t pool; uint32_t gaura; - if (conf == NULL) { - otx2_dpi_dbg("NULL configuration"); + if (conf == NULL || config_size != sizeof(*conf)) { + otx2_dpi_dbg("NULL or invalid configuration"); return -EINVAL; } dpivf = (struct dpi_vf_s *)dev->dev_private; diff --git a/drivers/raw/octeontx2_dma/otx2_dpi_test.c b/drivers/raw/octeontx2_dma/otx2_dpi_test.c index 276658af0..cec6ca91b 100644 --- a/drivers/raw/octeontx2_dma/otx2_dpi_test.c +++ b/drivers/raw/octeontx2_dma/otx2_dpi_test.c @@ -182,7 +182,8 @@ test_otx2_dma_rawdev(uint16_t val) /* Configure rawdev ports */ conf.chunk_pool = dpi_create_mempool(); rdev_info.dev_private = &conf; - ret = rte_rawdev_configure(i, (rte_rawdev_obj_t)&rdev_info); + ret = rte_rawdev_configure(i, (rte_rawdev_obj_t)&rdev_info, + sizeof(conf)); if (ret) { otx2_dpi_dbg("Unable to configure DPIVF %d", i); return -ENODEV; diff --git a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c index 0778603d5..2b78a7941 100644 --- a/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c +++ b/drivers/raw/octeontx2_ep/otx2_ep_rawdev.c @@ -224,13 +224,14 @@ sdp_rawdev_close(struct rte_rawdev *dev) } static int -sdp_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config) +sdp_rawdev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config, + size_t config_size) { struct sdp_rawdev_info *app_info = (struct sdp_rawdev_info *)config; struct sdp_device *sdpvf; - if (app_info == NULL) { - otx2_err("Application config info [NULL]"); + if (app_info == NULL || config_size != sizeof(*app_info)) { + otx2_err("Application config info [NULL] or incorrect size"); return -EINVAL; } diff --git a/drivers/raw/octeontx2_ep/otx2_ep_test.c b/drivers/raw/octeontx2_ep/otx2_ep_test.c index 091f1827c..b876275f7 100644 --- a/drivers/raw/octeontx2_ep/otx2_ep_test.c +++ b/drivers/raw/octeontx2_ep/otx2_ep_test.c @@ -108,7 +108,7 @@ sdp_rawdev_selftest(uint16_t dev_id) dev_info.dev_private = &app_info; - ret = rte_rawdev_configure(dev_id, &dev_info); + ret = rte_rawdev_configure(dev_id, &dev_info, sizeof(app_info)); if (ret) { otx2_err("Unable to configure SDP_VF %d", dev_id); rte_mempool_free(ioq_mpool); diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c index dce300c35..531d0450c 100644 --- a/drivers/raw/skeleton/skeleton_rawdev.c +++ b/drivers/raw/skeleton/skeleton_rawdev.c @@ -68,7 +68,8 @@ static int skeleton_rawdev_info_get(struct rte_rawdev *dev, } static int skeleton_rawdev_configure(const struct rte_rawdev *dev, - rte_rawdev_obj_t config) + rte_rawdev_obj_t config, + size_t config_size) { struct skeleton_rawdev *skeldev; struct skeleton_rawdev_conf *skeldev_conf; @@ -77,7 +78,7 @@ static int skeleton_rawdev_configure(const struct rte_rawdev *dev, RTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL); - if (!config) { + if (config == NULL || config_size != sizeof(*skeldev_conf)) { SKELETON_PMD_ERR("Invalid configuration"); return -EINVAL; } diff --git a/drivers/raw/skeleton/skeleton_rawdev_test.c b/drivers/raw/skeleton/skeleton_rawdev_test.c index 9b8390dfb..7dc7c7684 100644 --- a/drivers/raw/skeleton/skeleton_rawdev_test.c +++ b/drivers/raw/skeleton/skeleton_rawdev_test.c @@ -126,7 +126,7 @@ test_rawdev_configure(void) struct skeleton_rawdev_conf rdev_conf_get = {0}; /* Check invalid configuration */ - ret = rte_rawdev_configure(test_dev_id, NULL); + ret = rte_rawdev_configure(test_dev_id, NULL, 0); RTE_TEST_ASSERT(ret == -EINVAL, "Null configure; Expected -EINVAL, got %d", ret); @@ -137,7 +137,8 @@ test_rawdev_configure(void) rdev_info.dev_private = &rdev_conf_set; ret = rte_rawdev_configure(test_dev_id, - (rte_rawdev_obj_t)&rdev_info); + (rte_rawdev_obj_t)&rdev_info, + sizeof(rdev_conf_set)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to configure rawdev (%d)", ret); rdev_info.dev_private = &rdev_conf_get; diff --git a/examples/ioat/ioatfwd.c b/examples/ioat/ioatfwd.c index 5c631da1b..8e9513e44 100644 --- a/examples/ioat/ioatfwd.c +++ b/examples/ioat/ioatfwd.c @@ -734,7 +734,7 @@ configure_rawdev_queue(uint32_t dev_id) struct rte_ioat_rawdev_config dev_config = { .ring_size = ring_size }; struct rte_rawdev_info info = { .dev_private = &dev_config }; - if (rte_rawdev_configure(dev_id, &info) != 0) { + if (rte_rawdev_configure(dev_id, &info, sizeof(dev_config)) != 0) { rte_exit(EXIT_FAILURE, "Error with rte_rawdev_configure()\n"); } diff --git a/examples/ntb/ntb_fwd.c b/examples/ntb/ntb_fwd.c index 11e224451..656f73659 100644 --- a/examples/ntb/ntb_fwd.c +++ b/examples/ntb/ntb_fwd.c @@ -1401,7 +1401,7 @@ main(int argc, char **argv) ntb_conf.num_queues = num_queues; ntb_conf.queue_size = nb_desc; ntb_rawdev_conf.dev_private = (rte_rawdev_obj_t)(&ntb_conf); - ret = rte_rawdev_configure(dev_id, &ntb_rawdev_conf); + ret = rte_rawdev_configure(dev_id, &ntb_rawdev_conf, sizeof(ntb_conf)); if (ret) rte_exit(EXIT_FAILURE, "Can't config ntb dev: err=%d, " "port=%u\n", ret, dev_id); diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c index bde33763e..6c4d783cc 100644 --- a/lib/librte_rawdev/rte_rawdev.c +++ b/lib/librte_rawdev/rte_rawdev.c @@ -104,7 +104,8 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info, } int -rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf) +rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, + size_t dev_private_size) { struct rte_rawdev *dev; int diag; @@ -123,7 +124,8 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf) } /* Configure the device */ - diag = (*dev->dev_ops->dev_configure)(dev, dev_conf->dev_private); + diag = (*dev->dev_ops->dev_configure)(dev, dev_conf->dev_private, + dev_private_size); if (diag != 0) RTE_RDEV_ERR("dev%d dev_configure = %d", dev_id, diag); else diff --git a/lib/librte_rawdev/rte_rawdev.h b/lib/librte_rawdev/rte_rawdev.h index cf6acfd26..73e3bd5ae 100644 --- a/lib/librte_rawdev/rte_rawdev.h +++ b/lib/librte_rawdev/rte_rawdev.h @@ -116,13 +116,19 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info, * driver/implementation can use to configure the device. It is also assumed * that once the configuration is done, a `queue_id` type field can be used * to refer to some arbitrary internal representation of a queue. + * @dev_private_size + * The length of the memory space pointed to by dev_private in dev_info. + * This should be set to the size of the expected private structure to be + * used by the driver, and may be checked by drivers to ensure the expected + * struct type is provided. * * @return * - 0: Success, device configured. * - <0: Error code returned by the driver configuration function. */ int -rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf); +rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, + size_t dev_private_size); /** diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h b/lib/librte_rawdev/rte_rawdev_pmd.h index 89e46412a..050f8b029 100644 --- a/lib/librte_rawdev/rte_rawdev_pmd.h +++ b/lib/librte_rawdev/rte_rawdev_pmd.h @@ -160,7 +160,8 @@ typedef int (*rawdev_info_get_t)(struct rte_rawdev *dev, * Returns 0 on success */ typedef int (*rawdev_configure_t)(const struct rte_rawdev *dev, - rte_rawdev_obj_t config); + rte_rawdev_obj_t config, + size_t config_size); /** * Start a configured device. From patchwork Thu Jul 9 15:20:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 73656 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7CB3FA0528; Thu, 9 Jul 2020 17:21:44 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 88DE41E87B; Thu, 9 Jul 2020 17:21:16 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 3CA1C1E869 for ; Thu, 9 Jul 2020 17:21:15 +0200 (CEST) IronPort-SDR: vE3vD4d74LEU1m4WzpyWodHeYE12fG70hkWh9kmhbsuaelq3w2Cw+eovxD/s8GJCW7prjAOMxX CoxsT+9KNwDA== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="209546654" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="209546654" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 08:21:14 -0700 IronPort-SDR: QPCj+t55Of735rgPNnVVwwVnjzyzjXZX+kXPBCXLeuiAmiV7P9InX/miawucCO3i7IULezLxNw dsHwoiDC9qQA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483835589" Received: from silpixa00399126.ir.intel.com ([10.237.222.36]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 08:21:12 -0700 From: Bruce Richardson To: Nipun Gupta , Hemant Agrawal Cc: dev@dpdk.org, Rosen Xu , Tianfei zhang , Xiaoyun Li , Jingjing Wu , Satha Rao , Mahipal Challa , Jerin Jacob , Bruce Richardson Date: Thu, 9 Jul 2020 16:20:46 +0100 Message-Id: <20200709152047.167730-5-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200709152047.167730-1-bruce.richardson@intel.com> References: <20200709152047.167730-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20.11 4/5] rawdev: add private data length parameter to queue fns X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The queue setup and queue defaults query functions take a void * parameter as configuration data, preventing any compile-time checking of the parameters and limiting runtime checks. Adding in the length of the expected structure provides a measure of typechecking, and can also be used for ABI compatibility in future, since ABI changes involving structs almost always involve a change in size. Signed-off-by: Bruce Richardson --- drivers/raw/ntb/ntb.c | 25 ++++++++++++++++----- drivers/raw/skeleton/skeleton_rawdev.c | 10 +++++---- drivers/raw/skeleton/skeleton_rawdev_test.c | 8 +++---- examples/ntb/ntb_fwd.c | 3 ++- lib/librte_rawdev/rte_rawdev.c | 10 +++++---- lib/librte_rawdev/rte_rawdev.h | 10 +++++++-- lib/librte_rawdev/rte_rawdev_pmd.h | 6 +++-- 7 files changed, 49 insertions(+), 23 deletions(-) diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index c181094d5..7c15e204c 100644 --- a/drivers/raw/ntb/ntb.c +++ b/drivers/raw/ntb/ntb.c @@ -249,11 +249,15 @@ ntb_dev_intr_handler(void *param) static void ntb_queue_conf_get(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct ntb_queue_conf *q_conf = queue_conf; struct ntb_hw *hw = dev->dev_private; + if (conf_size != sizeof(*q_conf)) + return; + q_conf->tx_free_thresh = hw->tx_queues[queue_id]->tx_free_thresh; q_conf->nb_desc = hw->rx_queues[queue_id]->nb_rx_desc; q_conf->rx_mp = hw->rx_queues[queue_id]->mpool; @@ -294,12 +298,16 @@ ntb_rxq_release(struct ntb_rx_queue *rxq) static int ntb_rxq_setup(struct rte_rawdev *dev, uint16_t qp_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct ntb_queue_conf *rxq_conf = queue_conf; struct ntb_hw *hw = dev->dev_private; struct ntb_rx_queue *rxq; + if (conf_size != sizeof(*rxq_conf)) + return -EINVAL; + /* Allocate the rx queue data structure */ rxq = rte_zmalloc_socket("ntb rx queue", sizeof(struct ntb_rx_queue), @@ -375,13 +383,17 @@ ntb_txq_release(struct ntb_tx_queue *txq) static int ntb_txq_setup(struct rte_rawdev *dev, uint16_t qp_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct ntb_queue_conf *txq_conf = queue_conf; struct ntb_hw *hw = dev->dev_private; struct ntb_tx_queue *txq; uint16_t i, prev; + if (conf_size != sizeof(*txq_conf)) + return -EINVAL; + /* Allocate the TX queue data structure. */ txq = rte_zmalloc_socket("ntb tx queue", sizeof(struct ntb_tx_queue), @@ -439,7 +451,8 @@ ntb_txq_setup(struct rte_rawdev *dev, static int ntb_queue_setup(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct ntb_hw *hw = dev->dev_private; int ret; @@ -447,11 +460,11 @@ ntb_queue_setup(struct rte_rawdev *dev, if (queue_id >= hw->queue_pairs) return -EINVAL; - ret = ntb_txq_setup(dev, queue_id, queue_conf); + ret = ntb_txq_setup(dev, queue_id, queue_conf, conf_size); if (ret < 0) return ret; - ret = ntb_rxq_setup(dev, queue_id, queue_conf); + ret = ntb_rxq_setup(dev, queue_id, queue_conf, conf_size); return ret; } diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c index 531d0450c..f109e4d2c 100644 --- a/drivers/raw/skeleton/skeleton_rawdev.c +++ b/drivers/raw/skeleton/skeleton_rawdev.c @@ -222,14 +222,15 @@ static int skeleton_rawdev_reset(struct rte_rawdev *dev) static void skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct skeleton_rawdev *skeldev; struct skeleton_rawdev_queue *skelq; SKELETON_PMD_FUNC_TRACE(); - if (!dev || !queue_conf) + if (!dev || !queue_conf || conf_size != sizeof(struct skeleton_rawdev_queue)) return; skeldev = skeleton_rawdev_get_priv(dev); @@ -252,7 +253,8 @@ clear_queue_bufs(int queue_id) static int skeleton_rawdev_queue_setup(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t conf_size) { int ret = 0; struct skeleton_rawdev *skeldev; @@ -260,7 +262,7 @@ static int skeleton_rawdev_queue_setup(struct rte_rawdev *dev, SKELETON_PMD_FUNC_TRACE(); - if (!dev || !queue_conf) + if (!dev || !queue_conf || conf_size != sizeof(struct skeleton_rawdev_queue)) return -EINVAL; skeldev = skeleton_rawdev_get_priv(dev); diff --git a/drivers/raw/skeleton/skeleton_rawdev_test.c b/drivers/raw/skeleton/skeleton_rawdev_test.c index 7dc7c7684..bb4b6efe4 100644 --- a/drivers/raw/skeleton/skeleton_rawdev_test.c +++ b/drivers/raw/skeleton/skeleton_rawdev_test.c @@ -185,7 +185,7 @@ test_rawdev_queue_default_conf_get(void) * depth = DEF_DEPTH */ for (i = 0; i < rdev_conf_get.num_queues; i++) { - rte_rawdev_queue_conf_get(test_dev_id, i, &q); + rte_rawdev_queue_conf_get(test_dev_id, i, &q, sizeof(q)); RTE_TEST_ASSERT_EQUAL(q.depth, SKELETON_QUEUE_DEF_DEPTH, "Invalid default depth of queue (%d)", q.depth); @@ -235,11 +235,11 @@ test_rawdev_queue_setup(void) /* Modify the queue depth for Queue 0 and attach it */ qset.depth = 15; qset.state = SKELETON_QUEUE_ATTACH; - ret = rte_rawdev_queue_setup(test_dev_id, 0, &qset); + ret = rte_rawdev_queue_setup(test_dev_id, 0, &qset, sizeof(qset)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to setup queue (%d)", ret); /* Now, fetching the queue 0 should show depth as 15 */ - ret = rte_rawdev_queue_conf_get(test_dev_id, 0, &qget); + ret = rte_rawdev_queue_conf_get(test_dev_id, 0, &qget, sizeof(qget)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to get queue config (%d)", ret); RTE_TEST_ASSERT_EQUAL(qset.depth, qget.depth, @@ -263,7 +263,7 @@ test_rawdev_queue_release(void) RTE_TEST_ASSERT_SUCCESS(ret, "Failed to release queue 0; (%d)", ret); /* Now, fetching the queue 0 should show depth as default */ - ret = rte_rawdev_queue_conf_get(test_dev_id, 0, &qget); + ret = rte_rawdev_queue_conf_get(test_dev_id, 0, &qget, sizeof(qget)); RTE_TEST_ASSERT_SUCCESS(ret, "Failed to get queue config (%d)", ret); RTE_TEST_ASSERT_EQUAL(qget.depth, SKELETON_QUEUE_DEF_DEPTH, diff --git a/examples/ntb/ntb_fwd.c b/examples/ntb/ntb_fwd.c index 656f73659..5a8439b8d 100644 --- a/examples/ntb/ntb_fwd.c +++ b/examples/ntb/ntb_fwd.c @@ -1411,7 +1411,8 @@ main(int argc, char **argv) ntb_q_conf.rx_mp = mbuf_pool; for (i = 0; i < num_queues; i++) { /* Setup rawdev queue */ - ret = rte_rawdev_queue_setup(dev_id, i, &ntb_q_conf); + ret = rte_rawdev_queue_setup(dev_id, i, &ntb_q_conf, + sizeof(ntb_q_conf)); if (ret < 0) rte_exit(EXIT_FAILURE, "Failed to setup ntb queue %u.\n", i); diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c index 6c4d783cc..8965f2ce3 100644 --- a/lib/librte_rawdev/rte_rawdev.c +++ b/lib/librte_rawdev/rte_rawdev.c @@ -137,7 +137,8 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, int rte_rawdev_queue_conf_get(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size) { struct rte_rawdev *dev; @@ -145,14 +146,15 @@ rte_rawdev_queue_conf_get(uint16_t dev_id, dev = &rte_rawdevs[dev_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf, -ENOTSUP); - (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf); + (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf, queue_conf_size); return 0; } int rte_rawdev_queue_setup(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf) + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size) { struct rte_rawdev *dev; @@ -160,7 +162,7 @@ rte_rawdev_queue_setup(uint16_t dev_id, dev = &rte_rawdevs[dev_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_setup, -ENOTSUP); - return (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf); + return (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf, queue_conf_size); } int diff --git a/lib/librte_rawdev/rte_rawdev.h b/lib/librte_rawdev/rte_rawdev.h index 73e3bd5ae..bbd63913a 100644 --- a/lib/librte_rawdev/rte_rawdev.h +++ b/lib/librte_rawdev/rte_rawdev.h @@ -146,6 +146,8 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, * previously supplied to rte_rawdev_configure(). * @param[out] queue_conf * The pointer to the default raw queue configuration data. + * @param queue_conf_size + * The size of the structure pointed to by queue_conf * @return * - 0: Success, driver updates the default raw queue configuration data. * - <0: Error code returned by the driver info get function. @@ -156,7 +158,8 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf, int rte_rawdev_queue_conf_get(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf); + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size); /** * Allocate and set up a raw queue for a raw device. @@ -169,6 +172,8 @@ rte_rawdev_queue_conf_get(uint16_t dev_id, * @param queue_conf * The pointer to the configuration data to be used for the raw queue. * NULL value is allowed, in which case default configuration used. + * @param queue_conf_size + * The size of the structure pointed to by queue_conf * * @see rte_rawdev_queue_conf_get() * @@ -179,7 +184,8 @@ rte_rawdev_queue_conf_get(uint16_t dev_id, int rte_rawdev_queue_setup(uint16_t dev_id, uint16_t queue_id, - rte_rawdev_obj_t queue_conf); + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size); /** * Release and deallocate a raw queue from a raw device. diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h b/lib/librte_rawdev/rte_rawdev_pmd.h index 050f8b029..34eb667f6 100644 --- a/lib/librte_rawdev/rte_rawdev_pmd.h +++ b/lib/librte_rawdev/rte_rawdev_pmd.h @@ -218,7 +218,8 @@ typedef int (*rawdev_reset_t)(struct rte_rawdev *dev); */ typedef void (*rawdev_queue_conf_get_t)(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf); + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size); /** * Setup an raw queue. @@ -235,7 +236,8 @@ typedef void (*rawdev_queue_conf_get_t)(struct rte_rawdev *dev, */ typedef int (*rawdev_queue_setup_t)(struct rte_rawdev *dev, uint16_t queue_id, - rte_rawdev_obj_t queue_conf); + rte_rawdev_obj_t queue_conf, + size_t queue_conf_size); /** * Release resources allocated by given raw queue. From patchwork Thu Jul 9 15:20:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 73657 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 236C4A0528; Thu, 9 Jul 2020 17:21:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BCC241E89B; Thu, 9 Jul 2020 17:21:20 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 031C11E89B for ; Thu, 9 Jul 2020 17:21:18 +0200 (CEST) IronPort-SDR: 2dzuQ9C1C0kCqMqmSge8xfAZUjaX0wJFhQhN4xPV17E+ZlXUcm535w+kzWvwzdywUJR63AuMnf tuYg7TBVdJuA== X-IronPort-AV: E=McAfee;i="6000,8403,9677"; a="209546688" X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="209546688" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2020 08:21:18 -0700 IronPort-SDR: Ewp9q2WflKZa3vHtUATQMVWBIXKCthdmYPJjCorANSG2clFoelRBwUJbiXELlJur7YsRgiDl5L qwh40lw+ev7w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,331,1589266800"; d="scan'208";a="483835620" Received: from silpixa00399126.ir.intel.com ([10.237.222.36]) by fmsmga006.fm.intel.com with ESMTP; 09 Jul 2020 08:21:16 -0700 From: Bruce Richardson To: Nipun Gupta , Hemant Agrawal Cc: dev@dpdk.org, Rosen Xu , Tianfei zhang , Xiaoyun Li , Jingjing Wu , Satha Rao , Mahipal Challa , Jerin Jacob , Bruce Richardson Date: Thu, 9 Jul 2020 16:20:47 +0100 Message-Id: <20200709152047.167730-6-bruce.richardson@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200709152047.167730-1-bruce.richardson@intel.com> References: <20200709152047.167730-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 20.11 5/5] rawdev: allow queue default config query to return error X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The driver APIs for returning the queue default config can fail if the parameters are invalid, or other reasons, so allow them to return error codes to the rawdev layer and from hence to the app. Signed-off-by: Bruce Richardson --- drivers/raw/ntb/ntb.c | 6 ++++-- drivers/raw/skeleton/skeleton_rawdev.c | 12 +++++++----- lib/librte_rawdev/rte_rawdev.c | 3 +-- lib/librte_rawdev/rte_rawdev_pmd.h | 4 +++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/raw/ntb/ntb.c b/drivers/raw/ntb/ntb.c index 7c15e204c..72489c521 100644 --- a/drivers/raw/ntb/ntb.c +++ b/drivers/raw/ntb/ntb.c @@ -246,7 +246,7 @@ ntb_dev_intr_handler(void *param) } } -static void +static int ntb_queue_conf_get(struct rte_rawdev *dev, uint16_t queue_id, rte_rawdev_obj_t queue_conf, @@ -256,11 +256,13 @@ ntb_queue_conf_get(struct rte_rawdev *dev, struct ntb_hw *hw = dev->dev_private; if (conf_size != sizeof(*q_conf)) - return; + return -EINVAL; q_conf->tx_free_thresh = hw->tx_queues[queue_id]->tx_free_thresh; q_conf->nb_desc = hw->rx_queues[queue_id]->nb_rx_desc; q_conf->rx_mp = hw->rx_queues[queue_id]->mpool; + + return 0; } static void diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c index f109e4d2c..9c4082b9a 100644 --- a/drivers/raw/skeleton/skeleton_rawdev.c +++ b/drivers/raw/skeleton/skeleton_rawdev.c @@ -220,10 +220,10 @@ static int skeleton_rawdev_reset(struct rte_rawdev *dev) return 0; } -static void skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev, - uint16_t queue_id, - rte_rawdev_obj_t queue_conf, - size_t conf_size) +static int skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev, + uint16_t queue_id, + rte_rawdev_obj_t queue_conf, + size_t conf_size) { struct skeleton_rawdev *skeldev; struct skeleton_rawdev_queue *skelq; @@ -231,7 +231,7 @@ static void skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev, SKELETON_PMD_FUNC_TRACE(); if (!dev || !queue_conf || conf_size != sizeof(struct skeleton_rawdev_queue)) - return; + return -EINVAL; skeldev = skeleton_rawdev_get_priv(dev); skelq = &skeldev->queues[queue_id]; @@ -239,6 +239,8 @@ static void skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev, if (queue_id < SKELETON_MAX_QUEUES) rte_memcpy(queue_conf, skelq, sizeof(struct skeleton_rawdev_queue)); + + return 0; } static void diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/librte_rawdev/rte_rawdev.c index 8965f2ce3..69872d450 100644 --- a/lib/librte_rawdev/rte_rawdev.c +++ b/lib/librte_rawdev/rte_rawdev.c @@ -146,8 +146,7 @@ rte_rawdev_queue_conf_get(uint16_t dev_id, dev = &rte_rawdevs[dev_id]; RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf, -ENOTSUP); - (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf, queue_conf_size); - return 0; + return (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf, queue_conf_size); } int diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h b/lib/librte_rawdev/rte_rawdev_pmd.h index 34eb667f6..34dd7181b 100644 --- a/lib/librte_rawdev/rte_rawdev_pmd.h +++ b/lib/librte_rawdev/rte_rawdev_pmd.h @@ -215,8 +215,10 @@ typedef int (*rawdev_reset_t)(struct rte_rawdev *dev); * @param[out] queue_conf * Raw device queue configuration structure * + * @return + * Returns 0 on success, negative errno on failure */ -typedef void (*rawdev_queue_conf_get_t)(struct rte_rawdev *dev, +typedef int (*rawdev_queue_conf_get_t)(struct rte_rawdev *dev, uint16_t queue_id, rte_rawdev_obj_t queue_conf, size_t queue_conf_size);