From patchwork Wed Sep 1 16:32:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 97706 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D40C5A0C47; Wed, 1 Sep 2021 18:32:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A7941410FA; Wed, 1 Sep 2021 18:32:31 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 1A70D410F2 for ; Wed, 1 Sep 2021 18:32:28 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10094"; a="198359835" X-IronPort-AV: E=Sophos;i="5.84,369,1620716400"; d="scan'208";a="198359835" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Sep 2021 09:32:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,369,1620716400"; d="scan'208";a="645812711" Received: from silpixa00399126.ir.intel.com ([10.237.223.29]) by orsmga005.jf.intel.com with ESMTP; 01 Sep 2021 09:32:27 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: conor.walsh@intel.com, kevin.laatz@intel.com, fengchengwen@huawei.com, jerinj@marvell.com, Bruce Richardson Date: Wed, 1 Sep 2021 17:32:11 +0100 Message-Id: <20210901163216.120087-2-bruce.richardson@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210901163216.120087-1-bruce.richardson@intel.com> References: <20210826183301.333442-1-bruce.richardson@intel.com> <20210901163216.120087-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 1/6] dmadev: add device idle check for testing use X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Add in a function to check if a device or vchan has completed all jobs assigned to it, without gathering in the results. This is primarily for use in testing, to allow the hardware to be in a known-state prior to gathering completions. Signed-off-by: Bruce Richardson --- lib/dmadev/rte_dmadev.c | 16 ++++++++++++++++ lib/dmadev/rte_dmadev.h | 21 +++++++++++++++++++++ lib/dmadev/rte_dmadev_core.h | 4 ++++ lib/dmadev/version.map | 1 + 4 files changed, 42 insertions(+) diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c index 1c946402db..e249411631 100644 --- a/lib/dmadev/rte_dmadev.c +++ b/lib/dmadev/rte_dmadev.c @@ -555,3 +555,19 @@ rte_dmadev_dump(uint16_t dev_id, FILE *f) return 0; } + +int +rte_dmadev_vchan_idle(uint16_t dev_id, uint16_t vchan) +{ + struct rte_dmadev *dev = &rte_dmadevices[dev_id]; + + RTE_DMADEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL); + if (vchan >= dev->data->dev_conf.nb_vchans) { + RTE_DMADEV_LOG(ERR, + "Device %u vchan %u out of range\n", dev_id, vchan); + return -EINVAL; + } + + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vchan_idle, -ENOTSUP); + return (*dev->dev_ops->vchan_idle)(dev, vchan); +} diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h index e8f58e9213..350e7defc8 100644 --- a/lib/dmadev/rte_dmadev.h +++ b/lib/dmadev/rte_dmadev.h @@ -1028,6 +1028,27 @@ rte_dmadev_completed_status(uint16_t dev_id, uint16_t vchan, return (*dev->completed_status)(dev, vchan, nb_cpls, last_idx, status); } +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Determine if all jobs have completed on a device channel. + * This function is primarily designed for testing use, as it allows a process to check if + * all jobs are completed, without actually gathering completions from those jobs. + * + * @param dev_id + * The identifier of the device. + * @param vchan + * The identifier of virtual DMA channel. + * @return + * 1 - if all jobs have completed and the device vchan is idle + * 0 - if there are still outstanding jobs yet to complete + * < 0 - error code indicating there was a problem calling the API + */ +__rte_experimental +int +rte_dmadev_vchan_idle(uint16_t dev_id, uint16_t vchan); + #ifdef __cplusplus } #endif diff --git a/lib/dmadev/rte_dmadev_core.h b/lib/dmadev/rte_dmadev_core.h index e94aa1c457..7ec5a5b572 100644 --- a/lib/dmadev/rte_dmadev_core.h +++ b/lib/dmadev/rte_dmadev_core.h @@ -53,6 +53,9 @@ typedef int (*rte_dmadev_stats_reset_t)(struct rte_dmadev *dev, uint16_t vchan); typedef int (*rte_dmadev_dump_t)(const struct rte_dmadev *dev, FILE *f); /**< @internal Used to dump internal information. */ +typedef int (*rte_dmadev_vchan_idle_t)(const struct rte_dmadev *dev, uint16_t vchan); +/**< @internal Used to check if a virtual channel has finished all jobs. */ + typedef int (*rte_dmadev_copy_t)(struct rte_dmadev *dev, uint16_t vchan, rte_iova_t src, rte_iova_t dst, uint32_t length, uint64_t flags); @@ -106,6 +109,7 @@ struct rte_dmadev_ops { rte_dmadev_stats_get_t stats_get; rte_dmadev_stats_reset_t stats_reset; rte_dmadev_dump_t dev_dump; + rte_dmadev_vchan_idle_t vchan_idle; }; /** diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map index 80be592713..b7e52fda3d 100644 --- a/lib/dmadev/version.map +++ b/lib/dmadev/version.map @@ -18,6 +18,7 @@ EXPERIMENTAL { rte_dmadev_stats_reset; rte_dmadev_stop; rte_dmadev_submit; + rte_dmadev_vchan_idle; rte_dmadev_vchan_setup; local: *;