[V3] compress/mlx5: allow partial transformations support
Checks
Commit Message
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
> 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.
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.
>
> > 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.
@@ -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;