[V3] compress/mlx5: allow partial transformations support

Message ID 20210915001223.6238-1-rzidane@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series [V3] compress/mlx5: allow partial transformations support |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-testing warning apply patch failure
ci/Intel-compilation warning apply issues

Commit Message

Raja Zidane Sept. 15, 2021, 12:12 a.m. UTC
  Currently compress, decompress and dma are allowed only when all 3
capabilities are on.
A case where the user wants decompress offload, if decompress capability
is on but one of compress, dma is off, is not allowed.
Split compress/decompress/dma support check to allow partial
transformations.

V2: fix checkpatch errors
V3: rebase.

---mlx5: replaced hardware queue object

Signed-off-by: Raja Zidane <rzidane@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
 drivers/compress/mlx5/mlx5_compress.c | 61 ++++++++++++++++++++-------
 1 file changed, 46 insertions(+), 15 deletions(-)
  

Comments

Akhil Goyal Oct. 5, 2021, 1:13 p.m. UTC | #1
> Currently compress, decompress and dma are allowed only when all 3
> capabilities are on.
> A case where the user wants decompress offload, if decompress capability
> is on but one of compress, dma is off, is not allowed.
> Split compress/decompress/dma support check to allow partial
> transformations.
> 
> V2: fix checkpatch errors
> V3: rebase.
> 
> ---mlx5: replaced hardware queue object
> 
> Signed-off-by: Raja Zidane <rzidane@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>
> ---
This patch does not apply. 
When I see in patchworks, there is another series which include this patch.
But that is also superseded and the latest series does not have this patch.
Not sure what is happening here, is this patch needed or not?

Please make sure that previous version of patches are marked as superseded.
  
Matan Azrad Oct. 19, 2021, 9:07 a.m. UTC | #2
Hi Akhil

From: dev <dev-bounces@dpdk.org>
> > Currently compress, decompress and dma are allowed only when all 3
> > capabilities are on.
> > A case where the user wants decompress offload, if decompress
> > capability is on but one of compress, dma is off, is not allowed.
> > Split compress/decompress/dma support check to allow partial
> > transformations.
> >
> > V2: fix checkpatch errors
> > V3: rebase.
> >
> > ---mlx5: replaced hardware queue object
> >
> > Signed-off-by: Raja Zidane <rzidane@nvidia.com>
> > Acked-by: Matan Azrad <matan@nvidia.com>
> > ---
> This patch does not apply.
> When I see in patchworks, there is another series which include this patch.
> But that is also superseded and the latest series does not have this patch.
> Not sure what is happening here, is this patch needed or not?

Yes, this patch is needed.

This patch depended on a series that was integrated to the master branch by Thomas.
This is the link for the first patch of the series: https://patchwork.dpdk.org/project/dpdk/patch/20211005122733.12444-2-rzidane@nvidia.com/

Please let us know if you still have an issue in integration.

 
> Please make sure that previous version of patches are marked as
> superseded.
>
  
Akhil Goyal Oct. 20, 2021, 2:12 p.m. UTC | #3
> > This patch does not apply.
> > When I see in patchworks, there is another series which include this patch.
> > But that is also superseded and the latest series does not have this patch.
> > Not sure what is happening here, is this patch needed or not?
> 
> Yes, this patch is needed.
> 
> This patch depended on a series that was integrated to the master branch by
> Thomas.


> 
> Please let us know if you still have an issue in integration.
> 
> 
Applied to dpdk-next-crypto

Thanks.
  

Patch

diff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c
index 5c5aa87a18..e94e8fb0c6 100644
--- a/drivers/compress/mlx5/mlx5_compress.c
+++ b/drivers/compress/mlx5/mlx5_compress.c
@@ -291,17 +291,44 @@  mlx5_compress_xform_create(struct rte_compressdev *dev,
 	struct mlx5_compress_xform *xfrm;
 	uint32_t size;
 
-	if (xform->type == RTE_COMP_COMPRESS && xform->compress.level ==
-							  RTE_COMP_LEVEL_NONE) {
-		DRV_LOG(ERR, "Non-compressed block is not supported.");
-		return -ENOTSUP;
-	}
-	if ((xform->type == RTE_COMP_COMPRESS && xform->compress.hash_algo !=
-	     RTE_COMP_HASH_ALGO_NONE) || (xform->type == RTE_COMP_DECOMPRESS &&
-		      xform->decompress.hash_algo != RTE_COMP_HASH_ALGO_NONE)) {
-		DRV_LOG(ERR, "SHA is not supported.");
+	switch (xform->type) {
+	case RTE_COMP_COMPRESS:
+		if (xform->compress.algo == RTE_COMP_ALGO_NULL &&
+				!priv->mmo_dma_qp && !priv->mmo_dma_sq) {
+			DRV_LOG(ERR, "Not enough capabilities to support DMA operation, maybe old FW/OFED version?");
+			return -ENOTSUP;
+		} else if (!priv->mmo_comp_qp && !priv->mmo_comp_sq) {
+			DRV_LOG(ERR, "Not enough capabilities to support compress operation, maybe old FW/OFED version?");
+			return -ENOTSUP;
+		}
+		if (xform->compress.level == RTE_COMP_LEVEL_NONE) {
+			DRV_LOG(ERR, "Non-compressed block is not supported.");
+			return -ENOTSUP;
+		}
+		if (xform->compress.hash_algo != RTE_COMP_HASH_ALGO_NONE) {
+			DRV_LOG(ERR, "SHA is not supported.");
+			return -ENOTSUP;
+		}
+		break;
+	case RTE_COMP_DECOMPRESS:
+		if (xform->decompress.algo == RTE_COMP_ALGO_NULL &&
+				!priv->mmo_dma_qp && !priv->mmo_dma_sq) {
+			DRV_LOG(ERR, "Not enough capabilities to support DMA operation, maybe old FW/OFED version?");
+			return -ENOTSUP;
+		} else if (!priv->mmo_decomp_qp && !priv->mmo_decomp_sq) {
+			DRV_LOG(ERR, "Not enough capabilities to support decompress operation, maybe old FW/OFED version?");
+			return -ENOTSUP;
+		}
+		if (xform->compress.hash_algo != RTE_COMP_HASH_ALGO_NONE) {
+			DRV_LOG(ERR, "SHA is not supported.");
+			return -ENOTSUP;
+		}
+		break;
+	default:
+		DRV_LOG(ERR, "Xform type should be compress/decompress");
 		return -ENOTSUP;
 	}
+
 	xfrm = rte_zmalloc_socket(__func__, sizeof(*xfrm), 0,
 						    priv->dev_config.socket_id);
 	if (xfrm == NULL)
@@ -816,12 +843,16 @@  mlx5_compress_dev_probe(struct rte_device *dev)
 		rte_errno = ENODEV;
 		return -rte_errno;
 	}
-	if (mlx5_devx_cmd_query_hca_attr(ctx, &att) != 0 ||
-	    ((att.mmo_compress_sq_en == 0 || att.mmo_decompress_sq_en == 0 ||
-		att.mmo_dma_sq_en == 0) && (att.mmo_compress_qp_en == 0 ||
-		att.mmo_decompress_qp_en == 0 || att.mmo_dma_qp_en == 0))) {
-		DRV_LOG(ERR, "Not enough capabilities to support compress "
-			"operations, maybe old FW/OFED version?");
+	if (mlx5_devx_cmd_query_hca_attr(ctx, &att) != 0) {
+		DRV_LOG(ERR, "Failed to query device capabilities");
+		claim_zero(mlx5_glue->close_device(ctx));
+		rte_errno = ENOTSUP;
+		return -ENOTSUP;
+	}
+	if (!att.mmo_decompress_qp_en && !att.mmo_decompress_sq_en
+		&& !att.mmo_compress_qp_en && !att.mmo_compress_sq_en
+		&& !att.mmo_dma_qp_en && !att.mmo_dma_sq_en) {
+		DRV_LOG(ERR, "Not enough capabilities to support compress operations, maybe old FW/OFED version?");
 		claim_zero(mlx5_glue->close_device(ctx));
 		rte_errno = ENOTSUP;
 		return -ENOTSUP;