From patchwork Wed May 12 14:49:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 93228 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 4A5CAA0A0E; Wed, 12 May 2021 16:50:15 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 32CDD4003F; Wed, 12 May 2021 16:50:15 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 1B6874003E for ; Wed, 12 May 2021 16:50:13 +0200 (CEST) IronPort-SDR: oM5irJY3fNLun03n46s3SRLI/FWfZ0+mLLniZ547cfxl4q+1g2kRwbE1znMpCYhqFo3iWQAGep GWDY5Cp24NaQ== X-IronPort-AV: E=McAfee;i="6200,9189,9982"; a="263650383" X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="263650383" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2021 07:50:12 -0700 IronPort-SDR: MH/C4F3wJmon6Cm9UcijeWHNq1MiXFTDvQOnrrUyt66lMu5rpv/6Mt1kB9WGOgEZ0QM4v2TsTL XXCaHs/2MYDg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="537795895" Received: from silpixa00401026.ir.intel.com ([10.243.23.108]) by fmsmga001.fm.intel.com with ESMTP; 12 May 2021 07:50:11 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: kevin.laatz@intel.com, Bruce Richardson , Jiayu Hu Date: Wed, 12 May 2021 14:49:59 +0000 Message-Id: <20210512145000.249215-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/2] raw/ioat: fix ring space checks 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" When enqueuing a descriptor, when checking that there is at least one slot free for the current descriptor and a later batch descriptor, we need to test for both two free and one free, in case the last write was a batch descriptor which is allowed to use the "spare" slot. Similarly, when computing the free space in the ring to return to the user, we need to take account of the same condition, so that we do not return a "-1" ring space value, by blindly subtracting "2". Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs") Reported-by: Jiayu Hu Signed-off-by: Bruce Richardson Acked-by: Kevin Laatz --- drivers/raw/ioat/rte_idxd_rawdev_fns.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/raw/ioat/rte_idxd_rawdev_fns.h b/drivers/raw/ioat/rte_idxd_rawdev_fns.h index 862e0eb41..6ed67d77e 100644 --- a/drivers/raw/ioat/rte_idxd_rawdev_fns.h +++ b/drivers/raw/ioat/rte_idxd_rawdev_fns.h @@ -132,7 +132,7 @@ __idxd_burst_capacity(int dev_id) struct rte_idxd_rawdev *idxd = (struct rte_idxd_rawdev *)rte_rawdevs[dev_id].dev_private; uint16_t write_idx = idxd->batch_start + idxd->batch_size; - uint16_t used_space; + uint16_t used_space, free_space; /* Check for space in the batch ring */ if ((idxd->batch_idx_read == 0 && idxd->batch_idx_write == idxd->max_batches) || @@ -147,7 +147,10 @@ __idxd_burst_capacity(int dev_id) /* Return amount of free space in the descriptor ring * subtract 1 for space for batch descriptor and 1 for possible null desc */ - return idxd->desc_ring_mask - used_space - 2; + free_space = idxd->desc_ring_mask - used_space; + if (free_space < 2) + return 0; + return free_space - 2; } static __rte_always_inline rte_iova_t @@ -174,7 +177,8 @@ __idxd_write_desc(int dev_id, idxd->batch_idx_write + 1 == idxd->batch_idx_read) goto failed; /* for descriptor ring, we always need a slot for batch completion */ - if (((write_idx + 2) & mask) == idxd->hdls_read) + if (((write_idx + 2) & mask) == idxd->hdls_read || + ((write_idx + 1) & mask) == idxd->hdls_read) goto failed; /* write desc and handle. Note, descriptors don't wrap */ From patchwork Wed May 12 14:50:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 93229 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 8B145A0A0E; Wed, 12 May 2021 16:50:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 726F7410FD; Wed, 12 May 2021 16:50:22 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id BAFEF410F8 for ; Wed, 12 May 2021 16:50:20 +0200 (CEST) IronPort-SDR: 3QRVaa+PvevTYjLUUjjH84ykRCfhsw1P4KJnuuBrIgoNJgwLC2kV3bwnZ4ByxOogGTb0Bq6hCt SypRSM58qIIA== X-IronPort-AV: E=McAfee;i="6200,9189,9982"; a="285225971" X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="285225971" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2021 07:50:19 -0700 IronPort-SDR: w0Q9P4+lr+nDHQYZUrpws4Aml6FW0C/BzBsYwppNLgZN57xrcmN9NZ2BQBYZZOflGJc5MMbreS /lHraZ81iM+w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="537796555" Received: from silpixa00401026.ir.intel.com ([10.243.23.108]) by fmsmga001.fm.intel.com with ESMTP; 12 May 2021 07:50:18 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: kevin.laatz@intel.com, Bruce Richardson , Jiayu Hu Date: Wed, 12 May 2021 14:50:00 +0000 Message-Id: <20210512145000.249215-2-bruce.richardson@intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210512145000.249215-1-bruce.richardson@intel.com> References: <20210512145000.249215-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/2] raw/ioat: remove special case for no status reporting 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" The special fast-path for returning completed descriptors without reporting status or user-handles returns the number of completed ring slots used, rather than the number of actual user-submitted jobs. This means that the counts returned are too high, as the batch descriptor slots would be included in the total. Therefore remove this special case, and use the normal status-processing path so that the returned count is correct in all cases. Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs") Reported-by: Jiayu Hu Signed-off-by: Bruce Richardson Acked-by: Kevin Laatz --- drivers/raw/ioat/rte_idxd_rawdev_fns.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/raw/ioat/rte_idxd_rawdev_fns.h b/drivers/raw/ioat/rte_idxd_rawdev_fns.h index 6ed67d77e..6c5334cb3 100644 --- a/drivers/raw/ioat/rte_idxd_rawdev_fns.h +++ b/drivers/raw/ioat/rte_idxd_rawdev_fns.h @@ -343,14 +343,6 @@ __idxd_completed_ops(int dev_id, uint8_t max_ops, uint32_t *status, uint8_t *num idxd->batch_idx_read = 0; } - if (idxd->cfg.hdls_disable && status == NULL) { - n = (idxd->hdls_avail < idxd->hdls_read) ? - (idxd->hdls_avail + idxd->desc_ring_mask + 1 - idxd->hdls_read) : - (idxd->hdls_avail - idxd->hdls_read); - idxd->hdls_read = idxd->hdls_avail; - goto out; - } - n = 0; h_idx = idxd->hdls_read; while (h_idx != idxd->hdls_avail) { @@ -386,7 +378,6 @@ __idxd_completed_ops(int dev_id, uint8_t max_ops, uint32_t *status, uint8_t *num } idxd->hdls_read = h_idx; -out: idxd->xstats.completed += n; return n; }